MySQL8.0主从复制配置

  简单介绍一下MySQL的主从复制配置,MySQL8.0以及MySQL8.4均可使用。主从同步主要分两个步骤,一是进行一次性的增量同步,二是开启常态化的增量同步。

初始条件

  • 主库已配置好,并初始化数据
  • 从库新建好数据库

my.cnf配置

  • 主库
1
2
3
4
server-id=12831
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-do-db=ems # 指定需要复制的数据库,多个则配置多行
  • 从库
1
server-id=12830
  • 每个MySQL实例的server-id必须不同

主库上新建用于数据同步的用户

1
2
CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';

主库进行一次增量同步

  • 主库:
    • FLUSH TABLES WITH READ LOCK;
    • mysqldump -uroot -p --source-data ems > ems.dump
    • UNLOCK TABLES;
  • 将dump文件从主库主机传输到从库主机
  • 从库恢复文件:mysql -uroot -p ems < ems.dump

从库配置增量同步

  • 完整的命令如下:
    • SOURCE_HOST:主库的IP地址
    • SOURCE_USERSOURCE_PASSWORD:为上面设置的用户名和密码
    • SOURCE_LOG_FILESOURCE_LOG_POS:从BINLOG的哪个位置开始同步
1
2
3
4
5
6
7
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source_host_name',
SOURCE_USER='replication_user_name',
SOURCE_PASSWORD='replication_password',
SOURCE_LOG_FILE='recorded_log_file_name',
SOURCE_LOG_POS=recorded_log_position,
GET_SOURCE_PUBLIC_KEY=1;
  • SOURCE_LOG_FILESOURCE_LOG_POS可以从ems.dump文件中获取
1
2
3
4
5
--
-- Position to start replication or point-in-time recovery from
--

CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='binlog.000002', SOURCE_LOG_POS=158;
  • 检查配置:SHOW REPLICA STATUS;
  • 启动同步:START REPLICA;
  • 再次检查配置:SHOW REPLICA STATUS;Replica_IO_RunningReplica_SQL_Running两个均为Yes主从同步即配置成功

参考文献