docker实现mysql主从复制
2021/8/30 19:08:39
本文主要是介绍docker实现mysql主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 一、概述
- 二、创建master主库
- 三、创建Slave实例
- 四、主从配置
- 五、参考
一、概述
1、原理
- master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
- slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
- 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
- 主从流程图
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;
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;
11、启动从库同步
- 先将主库的数据复制一份到从库,包含表结构及数据
- 将主库binlog清除一下,这样它的位置就从0开始了
purge master logs to'mysql-bin.000001';
- 开启同步
# 开始同步 start slave; # 停止同步 # stop slave; # 查看同步状态 show slave status\G;
12、错误排查
- 如果无法实现主从同步,可以通过以下排查
13、总结:
- 主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且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主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程