主库开启log_bin
使用以下命令查看是否开启,mysql8.4默认开启
SHOW VARIABLES LIKE 'log_bin';
主库配置文件更改
my.cnf 配置文件 在[mysqld] 下增加 server_id 配置
server-id=1
一、主库创建备份账号并授权
创建一个同步用的账号
create user 'backup'@'backuphost' identified by 'backuppassword';
给账号授权
grant replication slave on *.* to 'backup'@'backuphost';
检查账号权限
show grants for 'backup'@'backuphost';
二、主库锁定,查询log_bin 文件及位置并导出数据导入至从库
数据库锁定
使用 FLUSH TABLES WITH READ LOCK 命令
FLUSH TABLES WITH READ LOCK;
该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配)。
它用于锁定所有数据库中的表,以便进行备份或其他维护操作。
这个命令会执行以下操作:
: 关闭所有打开的表。
: 锁定所有数据库中的所有表,以防止任何表的写入操作。
: 允许其他客户端进行读操作,但不允许写入操作。
查看bin_log 文件信息
使用 SHOW BINARY LOG STATUS; 命令
官方解释:This statement provides status information about binary log files on the source server, and requires the REPLICATION CLIENT privilege (or the deprecated SUPER privilege).
链接:15.7.7.1 SHOW BINARY LOG STATUS Statement
mysql> SHOW BINARY LOG STATUS\G
*************************** 1. row ***************************
File: source-bin.000002
Position: 1307
Binlog_Do_DB: test
Binlog_Ignore_DB: manual, mysql
Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
1 row in set (0.00 sec)
\G 是格式化输出
从主库导出数据并导入从库
主库数据导出
mysqldump -h10.XX.XX.XX -uuser_name -p database_name> yourbase_all.sql
导入数据至从库
mysql -h10.xx.xx.xx -uyouruser -p < yourbase_all.sql
三、从库修改
从库配置文件修改
server-id = 2 //和主库的server-id 不一样就可以
replicate-do-db = 要复制的库名
read_only = 1
从库启动复制
需要修改成自己的信息
CHANGE REPLICATION
SOURCE TO SOURCE_HOST='主库ip',
SOURCE_USER='主库上复制用户',
SOURCE_PASSWORD='主库上复制用户的密码',
SOURCE_PORT=主库的端口, SOURCE_LOG_FILE='上面查询到的bin_log文件名 File的值',
SOURCE_LOG_POS=上面查询到的bin_log文件位置 Position的值 是个数字,
SOURCE_SSL=1;
开启复制:
start replica;
查看状态:
show replica status \G
不能有错误,如有错误使用以下命令查看错误详情:
select * from performance_schema.replication_applier_status_by_worker \G
修复错误可能需要重新执行 CHANGE REPLICATION 命令。
停止复制:
stop replica;
测试
解锁主库:
unlock tables;
测试
在主库增加或者删除数据,然后查看从库是否保持一致。