一:配置Mysql主从同步:
1:使⽤搭建了mysql服务的docker镜像来搭建mysql从服务器:
1.1:导入镜像:
docker image load -i mysql_docker_5722.tar
python@ubuntu:~$ cd Desktop/
python@ubuntu:~/Desktop$ docker image load -i mysql_docker_5722.tar
Loaded image: mysql:5.7.22
1.2:在宿主机中准备⽂件夹(存储从服务器的配置信息,日志信息)
sudo mkdir ~/mysql_slave/
sudo mkdir ~/mysql_slave/data/
# 把主服务器的配置文件移动到从服务器
sudo cp -r /etc/mysql/mysql.conf.d ~/mysql_slave/
1.3:修改从服务器的配置:
cd ~/mysql_slave
sudo vim mysql.conf.d/mysqld.cnf
修改里面的内容:
# 从机端⼝号
port = 8306
# 关闭⽇志,从服务器不记录日志
general_log = 0
# 从机唯⼀编号
server-id = 2
1.4:把mysql镜像运⾏成容器(使⽤从服务器的配置⽂件)
python@ubuntu:~/mysql_slave$ sudo docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d --network=host -v /home/ubuntu/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/python/mysql.conf.d mysql:5.7.22
a1b81cc37946ad8eeedea15f90849a8af400fd4d373b7150ca15472550a601a2
2:配置主从同步:
2.1:修改主服务器配置⽂件(开启同步功能)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
2.2:重启mysql主服务器:
sudo /etc/init.d/mysql restart
2.3: ⼿动把主服务器的现有的数据导出,在从服务器中恢复
导出主服务器数据:
mysqldump -uroot -pmysql --all-databases --lock-all-tables >~/master_db.sql
导⼊到从服务器中:
mysql -uroot -p123456 -h127.0.0.1 --port=8306 < ~/master_db.sql
2.4:新建主服务器的⼀个账号(该账号是主服务器账号,给从服务器使⽤的)
登陆主服务器: mysql -uroot -pmysql
新建 slave 账号赋予可复制权限:
grant replication slave on *.* to 'slave'@'%'identified by 'slave';
刷新权限: flush privileges;
在主服务器中查看⼆进制⽇志⽂件内容: show master status;

2.5:在从服务器中指定同步的主服务器(使⽤主服务器提供的同步账号)
登陆从服务器: mysql -uroot -p123456 -h127.0.0.1 --port=8306
连接主服务器:
change master to master_host='127.0.0.1', master_user='slave',
master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=730;
开启从机服务: start slave;
查看从机状态: show slave status \G;

二:django配置读写分离:
1:修改 dev.py 配置从服务器
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "meimei_mall",
'USER':'meimei',
'PASSWORD':'123456',
'HOST':'192.168.203.153',
'PORT': 3306,
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "meimei_mall",
'USER':'meimei',
'PASSWORD':'123456',
'HOST':'192.168.203.153',
'PORT': 8390,
}
}
# 指定django数据库读写路由
DATABASE_ROUTERS = [
'meiduo_mall.utils.db_router.MasterSlaveDBRouter'
]
2:新建 meiduo_mall/utils/db_router.py ⽂件并⾃定义Django数据库路由
class MasterSlaveDBRouter(object):
def db_for_read(self, model, **hints):
# 返回slave配置 --> 指向从mysql
return 'slave'
def db_for_write(self, model, **hints):
# 返回default配置 --> 指向主mysql
return 'default'
def allow_relation(self, obj1, obj2, **hints):
"""是否运⾏关联操作"""
return True
(django_env) python@ubuntu:~/Desktop/meimei_project/meiduo_mall$ python3 manage.py shell
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from apps.users.models import User
>>> User.objects.get(pk=1)
<User: weiwei>
>>>
浙公网安备 33010602011771号