飞行的猪哼哼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一:配置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>
>>> 

posted on 2020-09-13 19:37  飞行的猪哼哼  阅读(34)  评论(0)    收藏  举报