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

实现
主库:192.168.3.13:3310 从库:192.168.3.14:3310
2创建 Master 主库
进入服务器 192.168.3.13
安装镜像
$ docker pull mysql:8.0.26
复制
新建目录
$ mkdir -p /home/apps/mysql-master/{config,log,data}
复制
创建并启动
$ 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复制
新增/修改 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复制
3创建 Slave 实例
进入服务器 192.168.3.14
同上面操作一样
# 创建目录
$ 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复制
4主从配置
添加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复制
重启容器
$ docker restart mysql-master
复制
添加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复制
重启容器
$ docker restart mysql-slave-01
复制
master 添加帐号,用来同步的用户
# 进入容器
$ docker exec -it mysql-master /bin/bash
# 进入主库mysql数据库
$ mysql -u root -p
# 授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)
# 授权远程
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新
mysql>flush privileges;
# 创建backup用户
# 应先创建新用户
mysql>create user 'backup'@'%' identified by '123456';
# 执行授权
mysql>grant all privileges on *.* to 'backup'@'%';
# 刷新
mysql>flush privileges;
# 授权远程
mysql>ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新
mysql>flush privileges;
# 查看主库状态
mysql>show master status;复制

在从库里设置主库连接
# 进入容器
$ docker exec -it mysql-slave-01 /bin/bash
# 进入主库mysql数据库
$ mysql -u root -p
mysql> 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;复制
启动从库同步
先将主库的数据复制一份到从库,包含表结构及数据 将主库binlog清除一下,这样它的位置就从0开始了
mysql>purge master logs to'mysql-bin.000001';
复制
开启同步
# 开始同步
mysql>start slave;
# 停止同步
mysql>stop slave;
# 查看同步状态
mysql>show slave status\G;复制

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

总结
主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且 server-id 不能一样 主库授权某个账号密码来同步自己的数据 从库使用这个账号密码连接主库来同步数据
5参考
https://www.cnblogs.com/heian99/p/12104189.html https://blog.csdn.net/lilygg/article/details/98187015 https://www.cnblogs.com/kiko2014551511/p/11532426.html
本文转载自:「 博客园 」,原文:https://tinyurl.com/2nsmcate ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。
你可能还喜欢
点击下方图片即可阅读
点击上方图片,『美团|饿了么』大额外卖红包天天免费领
更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!
文章转载自奇妙的Linux世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3028次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
860次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
500次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
439次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
377次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
306次阅读
2025-04-30 17:37:37
SQL优化 - explain查看SQL执行计划(下)
金同学
283次阅读
2025-05-06 14:40:00
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
282次阅读
2025-04-15 15:27:53
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
265次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
262次阅读
2025-04-28 11:01:25