今天介绍的是主从复制、延时从库、过滤复制、GTID复制的一些知识点和配置方法
一、前言
- 概念:两台以上的数据库示例,通过
binlog
二进制日志实现数据“同步”关系(属于异步工作模式) - 条件:需要两台以上的数据库实例(时间同步 网络通畅),server_id 不同,区别不同的角色;主库开启binlog,建立专用复制用户;开启前从库的数据状态与主库状态一致;从库需要确认复制的起点及主库的连接信息;MySQL是单进程多线程 要开启专用的复制线程。
二、搭建主从复制
-
检查主库和从库的 Server_id 和 主库 binlog 日志是否开启
-- 查看 server_id select @@server_id;
@@server_id 1 -- 查看 binlog 是否开启 show variables like 'log_bin';
Variable_name Value log_bin ON 如果没有配置和 binlog 和 Server_id 需要去 my.cnf 里面配置一下:
# 设置 server_id server-id=1 # 设置binlog的位置点 log-bin=/var/log/binlogs/mysql-bin # binlog的存储模式 sync-binlog=1 # binlog的写入格式 binlog-format=row
-
主库创建专用的复制用户
grant replication slave on *.* to rep@'%' identified by 'MySQL';
-
保证主从开启前数据要一致,所以需要主库全备恢复到从库
# 在从库运行,需要写上主库的ip地址 mysqldump -uroot -p -h主库ip -A --master-data=2 --single-transaction>/data/tem.sql
# 启动 MySQL 将逻辑备份 source 到从库 source /data/tem.sql
-
接下来需要在从库配置主库到连接信息 配置 change master to 并启动从库专用复制线程
help change master to;
在从库运行help change master to
后会出现在一些配置方法,我们只需要参考其中一部分就可以了就是上图中间部分。CHANGE MASTER TO MASTER_HOST='master2.example.com', -- 主库ip MASTER_USER='replication', -- 复制用户名 MASTER_PASSWORD='password', -- 复制用户密码 MASTER_PORT=3306, -- 主库端口 MASTER_LOG_FILE='mysql-bin.000004', -- binlog 位置点 MASTER_LOG_POS=154, -- pos 编号 MASTER_CONNECT_RETRY=10; -- 尝试连接次数
这时候就会有朋友问了
MASTER_LOG_FILE
和MASTER_LOG_POS
这两个是什么?如何配置。其实它们是主库 binlog 的复制位置点,我们已经将主库进行全部恢复到了从库,目前主从数据一致,主库数据是由 binlog 来维护的,所以从库需要知道主库 binlog 的位置信息,从而保障主从数据的一致性,当然,如果开启 GTID 复制的话,这一切都会变的比较简单,我们后面再介绍 GTID 复制,现在我们到刚才主库的全备份中寻找位置点。grep "\-- CHANGE MASTER TO" /data/tem.sql
由图所示:运行上面的命令 MASTER_LOG_FILE 和 MASTER_LOG_POS 输出在屏幕上复制后修改 change master to 即可完成配置。
-- 修改相关参数,从库各运行一次如下命令 CHANGE MASTER TO MASTER_HOST='主库ip', MASTER_USER='复制用户', MASTER_PASSWORD='密码', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=6161, MASTER_CONNECT_RETRY=10;
start slave; -- 启动从库专用复制线程
-
验证主从是否搭建成功
show slave status\G
目前只需要关注:Slave_IO_Running: Yes
和Slave_SQL_Running: Yes
IO 线程和 SQL 线程是否都为 Yes 即主从启动成功。 -
如何需要删除主从环境使用如下命令:
-- 关闭主从复制使用的线程 stop slave; -- 清空主身份从环境 reset slave all;
三、主从复制原理
未完待续…