docker MySQL主从复制

2 篇文章 0 订阅
2 篇文章 0 订阅

一、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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值