请选择 进入手机版 | 继续访问电脑版

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

[复制链接]
查看40 | 回复9 | 2021-9-13 17:19:33 | 显示全部楼层 |阅读模式
目次

一、概述

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、安装镜像

  1. docker pull mysql:8.0.26
复制代码

2、新建目次

  1. mkdir -p /home/apps/mysql-master/{config,log,data}
复制代码

3、创建并启动

  1. docker run -d --name mysql-master \
  2. --restart=always \
  3. --privileged=true \
  4. -p 3310:3306 \
  5. -v /home/apps/mysql-master/config:/etc/mysql/conf.d \
  6. -v /home/apps/mysql-master/log:/var/log/mysql \
  7. -v /home/apps/mysql-master/data:/var/lib/mysql \
  8. -e MYSQL_ROOT_PASSWORD=123456 \
  9. mysql:8.0.26
复制代码

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

  1. vim /home/apps/mysql-master/config/my.cnf
复制代码

添加以下内容

  1. [client]
  2. default-character-set=utf8
  3. [mysql]
  4. default-character-set=utf8
  5. [mysqld]
  6. init_connect='SET collation_connection = utf8_unicode_ci'
  7. init_connect='SET NAMES utf8'
  8. character-set-server=utf8
  9. collation-server=utf8_unicode_ci
  10. skip-character-set-client-handshake
  11. skip-name-resolve
复制代码

三、创建Slave实例

进入服务器192.168.3.14

1、同上面操作一样

  1. # 创建目次
  2. mkdir -p /home/apps/mysql-slave-01/{config,log,data}
  3. # 启动容器
  4. docker run -d --name mysql-slave-01 \
  5. --restart=always \
  6. --privileged=true \
  7. -p 3310:3306 \
  8. -v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d \
  9. -v /home/apps/mysql-slave-01/log:/var/log/mysql \
  10. -v /home/apps/mysql-slave-01/data:/var/lib/mysql \
  11. -e MYSQL_ROOT_PASSWORD=123456 \
  12. mysql:8.0.26
  13. # 修改Slave基本设置
  14. vim /home/apps/mysql-slave-01/config/my.cnf
  15. # 添加以下内容[client]
  16. default-character-set=utf8
  17. [mysql]
  18. default-character-set=utf8
  19. [mysqld]
  20. init_connect='SET collation_connection = utf8_unicode_ci'
  21. init_connect='SET NAMES utf8'
  22. character-set-server=utf8
  23. collation-server=utf8_unicode_ci
  24. skip-character-set-client-handshake
  25. skip-name-resolve
复制代码

四、主从设置

1、添加master设置

  1. vim /home/apps/mysql-master/config/my.cnf
  2. server_id=1
  3. # 开启二进制日志
  4. log-bin=mysql-bin
  5. read-only=0
  6. # 必要 同步的数据库
  7. binlog-do-db=rapid-cloud
  8. binlog-do-db=rapid-cloud-test
  9. # 必要 忽略的数据库
  10. replicate-ignore-db=mysql
  11. replicate-ignore-db=sys
  12. replicate-ignore-db=information_schema
  13. replicate-ignore-db=performance_schema
复制代码

2、重启容器

  1. docker restart mysql-master
复制代码

3、添加Slave设置

  1. vim /home/apps/mysql-slave-01/config/my.cnf
  2. server_id=2
  3. log-bin=mysql-bin
  4. read-only=1
  5. binlog-do-db=rapid-cloud
  6. binlog-do-db=rapid-cloud-test
  7. replicate-ignore-db=mysql
  8. replicate-ignore-db=sys
  9. replicate-ignore-db=information_schema
  10. replicate-ignore-db=performance_schema
复制代码

4、重启容器

  1. docker restart mysql-slave-01
复制代码

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

  1. # 进入容器
  2. docker exec -it mysql-master /bin/bash
  3. # 进入主库mysql数据库
  4. mysql -u root -p
  5. # 授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)
  6. # 授权远程
  7. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  8. # 刷新
  9. flush privileges;
  10. # 创建backup用户
  11. # 应先创建新用户
  12. create user 'backup'@'%' identified by '123456';
  13. # 执行授权
  14. grant all privileges on *.* to 'backup'@'%';
  15. # 刷新
  16. flush privileges;
  17. # 授权远程
  18. ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  19. # 刷新
  20. flush privileges;
  21. # 查看主库状态
  22. show master status;
复制代码

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

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

  1. # 进入容器
  2. docker exec -it mysql-slave-01 /bin/bash
  3. # 进入主库mysql数据库
  4. mysql -u root -p
  5. 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开始了

  1. purge master logs to'mysql-bin.000001';
复制代码

开启同步

  1. # 开始同步
  2. start slave;
  3. # 停止同步
  4. # stop slave;
  5. # 查看同步状态
  6. show slave status\G;
复制代码

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

8、错误排查

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

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

总结:

主从数据库在本身 设置 文件中声明必要 同步哪个数据库,忽略哪个数据库等信息。并且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

到此这篇关于docker实现mysql主从复制的示例代码的文章就先容 到这了,更多干系 docker mysql主从复制内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 昀离936 | 2021-9-18 10:42:14 | 显示全部楼层
楼上的这是啥态度呢?
回复

使用道具 举报

avatar 润唇膏贡 | 2021-10-1 22:07:46 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar 务川冷泉水鱼庄 | 2021-10-7 13:43:18 | 显示全部楼层
看了这么多帖子,第一次看到这么经典的!
回复

使用道具 举报

avatar 楠木2017 | 2021-10-10 03:21:26 | 显示全部楼层
admin楼主又闹绯闻了!
回复

使用道具 举报

avatar 忧伤428 | 2021-10-15 01:41:38 | 显示全部楼层
哥回复的不是帖子,是寂寞!
回复

使用道具 举报

avatar 计儿坏 | 2021-10-15 20:13:21 | 显示全部楼层
青春不在了,青春痘还在!
回复

使用道具 举报

avatar 我能陪你变老 | 2021-10-16 18:36:34 | 显示全部楼层
这么经典的话只有admin楼主能想到!
回复

使用道具 举报

admin楼主,你妈妈喊你回家吃药!
回复

使用道具 举报

信admin楼主,考试不挂科!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则