MySQL主从复制
MySQL主从复制是将来自一个MySQL数据库实例(Master)的数据复制到一个或者多个MySQL数据库实例(Slave)。主从复制是MySQL的核心功能,使用主从复制可以完成MySQL的数据同步,备份,高可用,迁移等工作。整个MySQL主从复制操作主要由3个线程完成。一个线程(dump线程)在Master节点上,SQL线程和 I/O线程在 Salve 节点上。Slave节点执行 change master to 连接上 Master 节点,连接上Master 节点后,发送Binlog 的位点信息。_两个数据库怎么做主从复制
文章信息
- 原文链接:https://jiayq.blog.csdn.net/article/details/146117935
- 发布时间:2025-03-08 16:13:16
- 阅读量:1
- 分类:mysql专栏收录该内容, 订阅专栏
- 标签:#mysql, #数据库, #主从复制, #Master-Slave, #Master, #Slave
摘要
文章浏览阅读1.3k次,点赞33次,收藏30次。MySQL主从复制是将来自一个MySQL数据库实例(Master)的数据复制到一个或者多个MySQL数据库实例(Slave)。主从复制是MySQL的核心功能,使用主从复制可以完成MySQL的数据同步,备份,高可用,迁移等工作。整个MySQL主从复制操作主要由3个线程完成。一个线程(dump线程)在Master节点上,SQL线程和 I/O线程在 Salve 节点上。Slave节点执行 change master to 连接上 Master 节点,连接上Master 节点后,发送Binlog 的位点信息。_两个数据库怎么做主从复制
MySQL主从复制
- 介绍
- 主从复制的搭建
- 数据库准备
- 开启 Binlog
- 创建主从复制的用户
- 查看位点信息
- Slave 连接
- 开启主从复制
MySQL主从复制:https://blog.csdn.net/a18792721831/article/details/146117935
MySQL Binlog:https://blog.csdn.net/a18792721831/article/details/146606305
MySQL General Log:https://blog.csdn.net/a18792721831/article/details/146607343
MySQL Slow Log:https://blog.csdn.net/a18792721831/article/details/147166971
MySQL Error Log:https://blog.csdn.net/a18792721831/article/details/147167038
MySQL Redo Log: https://blog.csdn.net/a18792721831/article/details/149862528
MySQL Undo Log: https://blog.csdn.net/a18792721831/article/details/149880355
介绍
MySQL主从复制是将来自一个MySQL数据库实例(Master)的数据复制到一个或者多个MySQL数据库实例(Slave)。
主从复制是MySQL的核心功能,使用主从复制可以完成MySQL的数据同步,备份,高可用,迁移等工作。
整个MySQL主从复制操作主要由3个线程完成。一个线程(dump线程)在Master节点上,SQL线程和 I/O线程在 Salve 节点上。
主从复制的过程大致如下:
- Slave节点执行 change master to 连接上 Master 节点,连接上Master 节点后,发送Binlog 的位点信息。
- Slave 节点的 I/O 线程和 Master 节点的 dump 线程建立连接。
- Slave 节点的 I/O 线程向 Master 节点发起 Binlog 的请求。
- Master 节点的 dump 线程根据 Slave 节点的请求,将本地 Binlog 以 events 的方式发送给 Slave 节点的 I/O 线程。
- Slave 节点的 SQL 线程应用 RelayLog ,并且把应用过的日志记录到 relay-log.info 中,在默认情况下,已经应用过的 RelayLog 会自动被清理掉。
主从复制的搭建
尝试手动搭建一下主从复制
数据库准备
创建数据库需要挂载的目录
创建mysql配置文件my.cnf
master
1
2
[mysqld]
server_id=100
slave
1
2
[mysqld]
server_id=101
需要保证 my.cnf 的文件权限是 644,权限过大,mysql会忽略配置文件
首先使用docker 启动两个mysql实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker run \
--name master \
-e MYSQL_ROOT_PASSWORD=master \
-v /data/mysql/master/log:/var/log/mysql \
-v /data/mysql/master/data:/var/lib/mysql \
-v /data/mysql/master/conf:/etc/mysql/conf.d \
-p 3106:3306 \
-d \
mysql:8.0
docker run \
--name slave \
-e MYSQL_ROOT_PASSWORD=slave \
-v /data/mysql/slave/log:/var/log/mysql \
-v /data/mysql/slave/data:/var/lib/mysql \
-v /data/mysql/slave/conf:/etc/mysql/conf.d \
-p 3107:3306 \
-d \
mysql:8.0
不要使用最新的,坑多~
使用客户端进行连接
开启 Binlog
增加目录
在配置文件中配置binlog的目录
修改启动命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
docker run \
--name master \
-e MYSQL_ROOT_PASSWORD=master \
-v /data/mysql/master/log:/var/log/mysql \
-v /data/mysql/master/data:/var/lib/mysql \
-v /data/mysql/master/conf:/etc/mysql/conf.d \
-v /data/mysql/master/binlog:/var/lib/mysql-bin \
-p 3106:3306 \
-d \
mysql:8.0
docker run \
--name slave \
-e MYSQL_ROOT_PASSWORD=slave \
-v /data/mysql/slave/log:/var/log/mysql \
-v /data/mysql/slave/data:/var/lib/mysql \
-v /data/mysql/slave/conf:/etc/mysql/conf.d \
-v /data/mysql/slave/binlog:/var/lib/mysql-bin \
-p 3107:3306 \
-d \
mysql:8.0
重启
记得使用
chmod -R 777 ./*进行授权,否则会出现 Permission denied 的异常,导致docker 容器启动失败my.cnf 必须是 644
创建主从复制的用户
在Master节点上创建用户,授予 replication slave 权限。
1
2
3
4
5
6
7
8
-- 创建用户
create user 'rep'@'%' identified by 'mspswd';
-- 授权
grant replication slave on *.* to 'rep'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证
SHOW GRANTS FOR 'rep'@'%';
查看位点信息
在Master 节点上查看开始同步的位点信息。执行 show master status 命令,查看开始同步的位点信息:
Slave 连接
在Slave节点初始化 Slave节点,并连接到Master
1
2
3
4
5
6
7
change master to
master_host='',
master_port=,
master_user='',
master_password='',
master_log_file='',
master_log_pos=;
开启主从复制
Slave节点执行 start slave 开启同步复制,并使用 show slave status查看同步状态。
查看同步状态
发现有报错,使用 replication user 连不上 master
解决方案一:
在master执行:
1
2
3
4
5
-- 修改复制用户的认证方式
ALTER USER 'rep'@'%'
IDENTIFIED WITH mysql_native_password BY 'mspswd';
-- 刷新权限
FLUSH PRIVILEGES;
但是该方案不生效,因为在 8.0 中, mysql_native_password 是被禁用的
需要启用该插件,Master启用即可
启用插件:
首先修改配置文件(配置文件不生效是因为权限过大,必须是644):
使用
1
2
3
SELECT plugin_name, plugin_status, plugin_type
FROM information_schema.plugins
WHERE plugin_name = 'mysql_native_password';
验证是否生效
Slave 节点执行 start slave 命令开启同步复制,并使用 show slave status 命令查看同步状态。
需要重点关注Slave_IO_Running和Slave_SQL_Running,其中 Slave_IO_Running 表示 Slave 节点是否能够正常从Master节点同步数据;Slave_SQL_Running表示回放RelayLog 文件中的 Binlog 时是否正常。
当Slave_IO_Running=YES和Slave_SQL_Running=YES 表示成功的建立了主从复制。
Master节点的位点
Slave的同步位点



















