docker实现mysql主从复制的示例代码

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录一、概述1、原理2、实现三、创建Slave实例四、主从配置总结:五、参考

一、概述

1、原理

master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中; slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

主从流程图

docker实现mysql主从复制的示例代码插图

2、实现

主库:192.168.3.13:3310从库:192.168.3.14:3310二、创建master主库进入服务器192.168.3.13

1、安装镜像

docker pull mysql:8.0.26

2、新建目录

mkdir -p /home/apps/mysql-master/{config,log,data}

3、创建并启动

docker run -d –name mysql-master –restart=always –privileged=true -p 3310:3306 -v /home/apps/mysql-master/config:/etc/mysql/conf.d -v /home/apps/mysql-master/log:/var/log/mysql -v /home/apps/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.26

4、新增/修改master基本配置

vim /home/apps/mysql-master/config/my.cnf

添加以下内容

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect=SET collation_connection = utf8_unicode_ci init_connect=SET NAMES utf8 character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve

三、创建Slave实例

进入服务器192.168.3.14

1、同上面操作一样

# 创建目录 mkdir -p /home/apps/mysql-slave-01/{config,log,data} # 启动容器 docker run -d –name mysql-slave-01 –restart=always –privileged=true -p 3310:3306 -v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d -v /home/apps/mysql-slave-01/log:/var/log/mysql -v /home/apps/mysql-slave-01/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.26 # 修改Slave基本配置 vim /home/apps/mysql-slave-01/config/my.cnf # 添加以下内容 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect=SET collation_connection = utf8_unicode_ci init_connect=SET NAMES utf8 character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve

四、主从配置

1、添加master配置

vim /home/apps/mysql-master/config/my.cnf server_id=1 # 开启二进制日志 log-bin=mysql-bin read-only=0 # 需要同步的数据库 binlog-do-db=rapid-cloud binlog-do-db=rapid-cloud-test # 需要忽略的数据库 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema

2、重启容器

docker restart mysql-master

3、添加Slave配置

vim /home/apps/mysql-slave-01/config/my.cnf server_id=2 log-bin=mysql-bin read-only=1 binlog-do-db=rapid-cloud binlog-do-db=rapid-cloud-test replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema

4、重启容器

docker restart mysql-slave-01

5、master添加帐号,用来同步的用户

# 进入容器 docker exec -it mysql-master /bin/bash # 进入主库mysql数据库 mysql -u root -p # 授权root可以远程访问( 主从无关,为了方便我们远程连接mysql) # 授权远程 ALTER USER root@% IDENTIFIED WITH mysql_native_password BY 123456; # 刷新 flush privileges; # 创建backup用户 # 应先创建新用户 create user backup@% identified by 123456; # 执行授权 grant all privileges on *.* to backup@%; # 刷新 flush privileges; # 授权远程 ALTER USER backup@% IDENTIFIED WITH mysql_native_password BY 123456; # 刷新 flush privileges; # 查看主库状态 show master status;

docker实现mysql主从复制的示例代码插图1

6、在从库里设置主库连接

# 进入容器 docker exec -it mysql-slave-01 /bin/bash # 进入主库mysql数据库 mysql -u root -p change master to master_host=192.168.3.13,master_user=backup,master_password=123456,master_log_file=mysql-bin.000001,master_log_pos=0,master_port=3310;

7、启动从库同步

先将主库的数据复制一份到从库,包含表结构及数据

将主库binlog清除一下,这样它的位置就从0开始了

purge master logs tomysql-bin.000001;

开启同步

# 开始同步 start slave; # 停止同步 # stop slave; # 查看同步状态 show slave statusG;

docker实现mysql主从复制的示例代码插图2

8、错误排查

如果无法实现主从同步,可以通过以下排查

docker实现mysql主从复制的示例代码插图3

总结:

主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且server-id不能一样主库授权某个账号密码来同步自己的数据从库使用这个账号密码连接主库来同步数据

五、参考

https://www.cnblogs.com/heian99/p/12104189.html

https://blog.csdn.net/lilygg/article/details/98187015

binlog清除:https://www.cnblogs.com/kiko2014551511/p/11532426.html

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容