1、原理
在主库写入 binlog 日志 后 即可 成功返回客户端,无须等待 binlog 日志传递给 从库 的过程(问题点:一旦主库发生宕机,就可能出现数据丢失的情况)。
MySQL 复制 默认的方式 是异步复制。
缺点:
当主库把 事件(event)写入 二进制日志后,并不知道从库是否已经接收并应用。
如果主库崩溃,很有可能主库中已提交的事务,并没有传到任何一台从库机器上,在高可用集群架构下做主备切换,就会造成新的主库丢失数据。
2、准备条件:
环境:
主机 | 说明 |
---|---|
192.168.23.132 | master |
192.168.23.130 | slave |
(1)修改 主库的 server-id=1002
,从库的server-id=1003
,保持两者不一致。
(2)主库开启 binlog 功能。
为方便后续扩展,从库也开启binlog,并开启 log_slave_updates
参数。
(3)为了后期不出现数据不一致的情况,配置 binlog 格式为 row 模式(主从都要设置)。
3、实施阶段:
(1)账号准备
在主库 中 创建一个 主从复制 账号 bak。
create user 'bak'@'192.168.23.%' identified by 'bak123456';
grant replication slave on *.* to 'bak'@'192.168.23.%';
flush privileges;
(2)数据准备
目的:让主库与从库 在 某一 position 位置时 达到同步。
需要先从 主库中 导出数据
mysqldump --single-transaction -uroot -pliu123456 --master-data=2 -A > all_master.sql
备注:必须加参数
--master-data=2
让备份出来的文件中记录备份这一时刻的binlog 文件与 position 号,为搭建主从环境做准备。
查看 all_master.sql 文件 已记录当前 binlog 文件 和 position 号。
(3)导入主库备份数据
先将 all_master.sql 上传到从库 所在 服务器
然后执行下面的 导入数据命令:
mysql -uroot -pliu123456 < all_master.sql
(4)执行主从配置命令
CHANGE MASTER TO
MASTER_HOST='192.168.23.132',
MASTER_USER='bak',
MASTER_PASSWORD='bak123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=9115;
参数说明:
- MASTER_HOST:指向主库的IP地址
- MASTER_USER:之前创建的用于主从复制用户
- MASTER_PASSWORD:主从复制用户的密码
- MASTER_PORT:主库端口号
- MASTER_LOG_FILE:从备份文件中 获取的 当前二进制文件
- MASTER_LOG_POS:从备份文件中 获取的 position 号
(5)执行开始主从复制命令
start slave;
(6)查看主从复制状态
show slave status\G;
如图,如下参数都为 Yes 时,表示 主从复制已开始工作。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(7)主从复制管理命令
# 在从库查看主从复制状态
show slave status\G;
# 查看主库的 binlog 文件和 position 位置,以及开启 GTID 模式下记录的 gtid。
show master shatus;
# 在从库上配置主从过程
change master to
# 开启主从同步
start slave;
# 关闭主从同步
stop slave;
# 清空从库的所有配置信息
reset slave all;
4、常见问题
暂略…
作者:admin 创建时间:2023-01-03 14:37
最后编辑:admin 更新时间:2023-01-05 17:29
最后编辑:admin 更新时间:2023-01-05 17:29