其他
Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划
在主服务器上,必须开启二进制日志机制和配置一个独立的ID 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号 在开始复制进程前,在主服务器上记录二进制文件的位置信息 如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump 导出数据库,或者直接复制数据文件) 配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
REPOSITORY: 来自于哪个仓库;
TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;
IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了;
CREATED: 镜像最后的更新时间;
SIZE: 镜像的大小,优秀的镜像一般体积都比较小
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
FLUSH PRIVILEGES;
<head>
<title>案例</title>
</head>
<body>
<a href="/create/">创建</a>
<ul>
{%for book in list%}
<li>{{book.btitle}}--<a href="/delete{{book.id}}/">删除</a></li>
{%endfor%}
</ul>
</body>
</html>
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2', # 数据库名字,
'USER': 'root', # 数据库登录用户名
'PASSWORD': 'mysql', # 数据库登录密码
'HOST': '192.168.254.137', # 数据库所在主机
'PORT': '3306', # 数据库端口
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2', # 数据库名字,
'USER': 'root', # 数据库登录用户名
'PASSWORD': 'mysql', # 数据库登录密码
'HOST': '192.168.254.137', # 数据库所在主机
'PORT': '3308', # 数据库端口
},
}
# 定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20) # 图书名称
bpub_date = models.DateField() # 发布日期
bread = models.IntegerField(default=0) # 阅读量
bcomment = models.IntegerField(default=0) # 评论量
isDelete = models.BooleanField(default=False) # 逻辑删除
# 定义英雄模型类HeroInfo
class HeroInfo(models.Model):
hname = models.CharField(max_length=20) # 英雄姓名
hgender = models.BooleanField(default=True) # 英雄性别
isDelete = models.BooleanField(default=False) # 逻辑删除
hcomment = models.CharField(max_length=200) # 英雄描述信息
hbook = models.ForeignKey('BookInfo') # 英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
pip install pymysql
安装成功之后,在test2/_init_.py文件中加上如下代码:
import pymysql
pymysql.install_as_MySQLdb()
生成迁移文件
python manage.py makemigrations
执行迁移文件在数据库生成表
python manage.py migrate
('射雕英雄传','1980-5-1',12,34,0),
('天龙八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飞狐','1987-11-11',58,24,0);
('郭靖',1,1,'降龙十八掌',0),
('黄蓉',0,1,'打狗棍法',0),
('黄药师',1,1,'弹指神通',0),
('欧阳锋',1,1,'蛤蟆功',0),
('梅超风',0,1,'九阴白骨爪',0),
('乔峰',1,2,'降龙十八掌',0),
('段誉',1,2,'六脉神剑',0),
('虚竹',1,2,'天山六阳掌',0),
('王语嫣',0,2,'神仙姐姐',0),
('令狐冲',1,3,'独孤九剑',0),
('任盈盈',0,3,'弹琴',0),
('岳不群',1,3,'华山剑法',0),
('东方不败',0,3,'葵花宝典',0),
('胡斐',1,4,'胡家刀法',0),
('苗若兰',0,4,'黄衣',0),
('程灵素',0,4,'医术',0),
('袁紫衣',0,4,'六合拳',0);
from booktest.models import *
from datetime import date
#查询所有图书并显示
def index(request):
#使用从服务器进行读操作
list=BookInfo.objects.using('slave').all()
return render(request,'booktest/index.html',{'list':list})
#默认使用主服务器进行写操作
#创建新图书
def create(request):
book=BookInfo()
book.btitle = '流星蝴蝶剑'
book.bpub_date = date(1995,12,30)
book.save()
#转向到首页
return redirect('/')
#逻辑删除指定编号的图书
def delete(request,id):
book=BookInfo.objects.get(id=int(id))
book.delete()
#转向到首页
return redirect('/')
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
#引入booktest的url配置
url(r'^',include('booktest.urls')),
]
from booktest import views
urlpatterns=[
url(r'^$',views.index),
url(r'^delete(\d+)/$',views.delete),
url(r'^create/$',views.create),
]