Docker安装MySQL双主从复制

一、下载mysql镜像 略 ![](https://img2024.cnblogs.com/blog/3440595/202411/3440595-20241113160413461-1927204408.png) 二、主节点 my.cnf配置 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=1 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 gtid_mode=ON enforce_gtid_consistency=ON 二、从节点my.cnf配置 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 设置 需要同步的数据库名称,不设置代表同步所有的数据库 # binlog-do-db=sms_test,nacos_config,rcs_cloud ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mysql-bin-slave1 ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) #read_only=1 gtid_mode=ON enforce_gtid_consistency=ON 三、docker-compose.yml配置 version: '3.9' services: mysql-master: image: mysql:8.0 container_name: mysql-master environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_USER: sync MYSQL_PASSWORD: 123456 volumes: - /container/mnt/mysql/master/conf:/etc/mysql/conf.d - /container/mnt/mysql/master/data:/var/lib/mysql ports: - "6311:3306" networks: - mysql-network restart: always mysql-slave: image: mysql:8.0 container_name: mysql-slave environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_USER: sync MYSQL_PASSWORD: 123456 volumes: - /container/mnt/mysql/slave/conf:/etc/mysql/conf.d - /container/mnt/mysql/slave/data:/var/lib/mysql ports: - "6312:3306" networks: - mysql-network restart: always networks: mysql-network: driver: bridge 四、启动mysql-master,mysql-slave容器 docker compose up -d 五、为mysql-master主节点设置同步用户 create user 'slave'@'%' identified by '123456' ; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 更换登录验证方式,不然从节点连接会报错 alter user 'slave'@'%' IDENTIFIED with mysql_native_password by '123456' ; 六、查看主节点相关信息 show master status; ![](https://img2024.cnblogs.com/blog/3440595/202411/3440595-20241113161225348-929805385.png) 七、从节点设置主节点信息 change master to master_host='dbhost_IP', master_user='slave', master_password='123456', master_port=6311, master_log_file='mysql-bin.000003', master_log_pos=996, master_connect_retry=30; 开始同步 start slave; show slave status \G; ![](https://img2024.cnblogs.com/blog/3440595/202411/3440595-20241113161309039-740796124.png) 八,在主节点更新数据,从节点是否也会同步 ![](https://img2024.cnblogs.com/blog/3440595/202411/3440595-20241113161442040-123167136.png) 九、从节点反过来成为主节点 1.登录从节点添加用户 create user 'slave'@'%' identified by '123456' ; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 更换登录验证方式,不然从节点连接会报错 alter user 'slave'@'%' IDENTIFIED with mysql_native_password by '123456' ; 2.查看从节点主机master状态 show master status; ![](https://img2024.cnblogs.com/blog/3440595/202411/3440595-20241113165126640-1723677299.png) 3.登录之前的主节点 设置主节点的binlog记录 change master to master_host='117.186.142.242', master_user='slave', master_password='123456', master_port=6312, master_log_file='mysql-bin-slave1.000004', master_log_pos=44491, master_connect_retry=30; 4.启动从节点同步 start slave; 5.查看从节点同步情况 show slave status \G; 注意:如果主节点无法同步从节点,可以重启mysql的主从容器 可能出现的问题: IO_STARGING: NO 可能是由于从库没有正常启动、或者正常配置导致 IO_STARGING: Connecting 指定的主机网络不通、同步用户权限不足、同步用户验证方式错误等,都有可能导致无法连接主库
posted @   vello  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示