利用docker实现MySQL主从同步

2018-12-04  本文已影响0人  ___Mr徐

1). 在docker上面拉一下mysql镜像

docker image pull mysql:5.7.24  # 拉取镜像

2). 需要在先宿主机中创建文件夹, 保存mysql容器的数据和待会要映射的配置文件

cd ~
mkdir mysql_slave
cd mysql_slave
mkdir data  # 这里先不进文件夹里面去, 因为要把ubuntu里面的mysql配置文件复制到这一层
cp /etc/mysql/mysql.conf.d ./  # 复制mysql配置文件到这里
port = 8306  # 因为mysql默认是3306, 所以我们得更改一下从的端口号
general_log = 0
server-id = 2  # 让待会映射到docker里面去时直接成为从服务

3). 创建docker容器

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d  mysql:5.7.24
mysql -uroot -pmysql -h 127.0.0.1 --port=8306

4). 备份主服务器原有数据到从服务器

先把主服务器里面的所有数据导出来

mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql

再把导出来的数据导进docker里面

mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql

5). 配置主服务器master

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
image.png

6). 配置从服务器slave (docker中的mysql)

7). 启动slave服务器,并查看同步状态

start slave;
show slave status \G
image.png

8). Django配置mysql读写分离

class MasterSlaveRouter(object):
    """数据库主从读写分离路由"""

    def db_for_read(self, model, **hints):
        """读数据库"""
        return "slave"

    def db_for_write(self, model, **hints):
        """写数据库"""
        return "default"

    def allow_relation(self, obj1, obj2, **hints):
        """是否运行关联操作"""
        return True
# settings配置读写分离
DATABASE_ROUTERS = ['meiduo_mall.utils.db_router.MasterSlaveDBRouter']
上一篇 下一篇

猜你喜欢

热点阅读