1.两台机器,一个主192.168.1.101,一个从192.168.1.102。
先在主机器上创建一个专用的复制用户repl
sql
CREATE USER 'repl'@'192.168.1.102' IDENTIFIED BY 'R2026@copy01';
授权
sql
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.102';
刷新缓存
sql
FLUSH PRIVILEGES;
2.备份主库
指定要同步的数据库
sql
mysqldump -uroot -p \
--single-transaction --set-gtid-purged=ON --master-data=2 \
--databases mydatabase > mydatabase_$(date +%F).sql
--single-transaction 的核心就是"在不加任何表锁的前提下拿到一致性快照 ",只对 InnoDB 表生效
全库备份
sql
mysqldump -uroot -p \
--single-transaction --master-data=2 \
--set-gtid-purged=ON --all-databases \
> all_$(date +%F).sql
从库必须是空实例 (或先 RESET MASTER; RESET SLAVE ALL;)
3.将主库备份好的sql复制到从库服务器上,在从库服务器上执行以下语句进行恢复。
sql
mysql -uroot -p < mybase_$(date +%F).sql
恢复完成后。
在从库执行以下语句:
sql
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='repl',
MASTER_PASSWORD='R2026@copy01',
MASTER_AUTO_POSITION=1;
用 MASTER_AUTO_POSITION=1 接主库,从库会自动从"导出快照点"继续拉 binlog.
4.修改两边mysql的配置文件 /etc/my.cnf
主:
sql
server_id = 1
log_bin = /pub/data/log/mysql-bin
relay_log = /pub/data/log/relay-bin
expire_logs_days = 1
binlog_format = ROW
binlog_cache_size = 4M
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = 1
log_bin_trust_function_creators = 1
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
binlog_checksum = CRC32
slave_sql_verify_checksum = 1
slave_parallel_workers = 12
slave_parallel_type = LOGICAL_CLOCK
从:
sql
server_id = 2
log_bin = /pub/data/log/mysql-bin
relay_log = /pub/data/log/relay-bin
expire_logs_days = 1
binlog_format = ROW
binlog_cache_size = 4M
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = 1
log_bin_trust_function_creators = 1
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
binlog_checksum = CRC32
slave_sql_verify_checksum = 1
slave_parallel_workers = 12
slave_parallel_type = LOGICAL_CLOCK
read_only = 1
replicate-do-db = mydatabase
用 replicate-do-db = mydatabase 指定要复制的数据库.
改完配置要重启数据库
sql
systemctl restart mysqld
查看主节点状态:
sql
SHOW MASTER STATUS
从库命令
sql
stop SLAVE;
START SLAVE;
SHOW SLAVE STATUS;
观察

都是Yes就是同步成功。