docker MySQL主从复制

2 篇文章 0 订阅
2 篇文章 0 订阅
本文介绍了如何在Docker环境下配置MySQL的主从复制,包括拉取镜像、启动容器、设置root密码、修改配置文件、分配权限、配置主从同步及检查复制状态。涉及的关键步骤包括在my.cnf中配置server-id、log-bin等参数,以及在主从数据库间授权和设置复制坐标。
摘要由CSDN通过智能技术生成

一、docker上拉取mysql镜像

        docker pull mysql:5.7

二、docker添加MySQL容器启动并设置MySQL容器root密码

        1、添加第一个MySQL容器

        docker run --name mysql-1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

        2、添加第二个MySQL容器

        docker run --name mysql-2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

        注释:

                run                        启动容器

                --name                 设置容器的名称

                -p 3307:3306      设置容器端口号   (容器端口号:镜像端口号)

                -e MYSQL_ROOT_PASSWORD        设置容器的root密码

                -d 容器会进入到后台,用户无法看到容器中的信息,也无法进行操作

                mysql:5.7        选择镜像

三、设置主从mysql复制

        1、进入mysql-1容器

                docker exec -it mysql-1 bash

        2、进入vim /etc/mysql/my.cnf

              如果是首次进入mysql容器需要配置vim,首先更新 apt-get update,然后安装vim:apt-get install vim

              vim /etc/mysql/my.cnf

              进入mysql-1的my.cnf 之后把下面代码复制进去

                

[mysqld]
server-id = 1 #id唯一值,从数据库可以为2,3,4....
log-bin=mysql-bin
binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库
log-slave-updates = 1 #从库的写操作记录到
bin-logexpire_logs_days = 30 #日志存在的天数,30天
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1,从库为2
slave-skip-errors = all

                保存,然后执行 service mysql restart 重启mysql,执行完成重启之后会关闭mysql的服务

                需要重新在docker里面启动docker start mysql-1

配置从数据mysql-2

[mysqld]
server-id = 2
log-bin=mysql-bin
binlog-ignore-db = mysql,information_schema
log-slave-updates = 1 
expire_logs_days = 30 
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all

               保存,然后执行 service mysql restart 重启mysql,执行完成重启之后会关闭mysql的服务

                需要重新在docker里面启动docker start mysql-2

四、为主从数据库添加用户分配权限

      获取数库ip地址

      docker inspect --format='{{.NetworkSettings.IPAddress}}'  容器ID or 容器名称

      链接主数据库,为从数据库分配权限

mysql -u root -p
####
GRANT REPLICATION SLAVE ON *.* TO 'root'@'从数据库IP' IDENTIFIED BY '从数据库密码';
flush privileges;

     链接从数据库,为主数据库分配权限

mysql -u root -p
####
GRANT REPLICATION SLAVE ON *.* TO 'root'@'主数据库IP' IDENTIFIED BY '主数据库密码';
flush privileges;

      遇到报错可能是密码过于简单

        修改validate_password_policy参数的值(0 or LOW / 1 or MEDIUM / 2 or STRONG)

                mysql> set global validate_password_policy=0;

        修改密码的长度

                mysql> set global validate_password_length=1;

五、配置主从双向复制

        如果不是docker,是两个服务器上面的MySQL需要开放防火墙的MySQL端口

        firewall-cmd --query-port=3306/tcp                ##查询端口是否打开

        firewall-cmd --permanent --add-prot=3306/tcp        ##把端口添加到防火墙里面外网可访问

        systemctl restart firewalld                         ##重启防火墙执行

        分别在主库和从库执行下面代码

        show master status;

        87b1d47c82bc4f12be9fb91766d34d88.png

         在主数据库执行以下命令

change master to master_host='从数据库IP', master_user='从数据用来链接库的用户名', master_password='从数据库密码', master_log_file='mysql-bin.000001', master_log_pos=1554;

        *master_log_file与master_log_pos以在从库查询的数据为准,master_log_file对应图上的File下面的数据,master_log_pos对应图上Position的数据

        在从数据库执行以下命令

        

change master to master_host='主数据库IP', master_user='主数据用来链接库的用户名', master_password='主数据库密码', master_log_file='mysql-bin.000001', master_log_pos=1554;

*master_log_file与master_log_pos以在主库查询的数据为准,解释同上

        主从数据库分别执行以下代码

   start slave;

六、自查是否启动成功

        show slave status G;

        执行代码如果两个都是Yes,说明成功。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa3JiX19f,size_20,color_FFFFFF,t_70,g_se,x_16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值