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