第一步是开启 binlog 功能,并修改 MySQL 配置文件(my.cnf 或 my.ini),然后重启使配置生效
log-bin=mysql-bin
binlog-format=row
server-id = 123
expire_logs_days = 7
slow_query_log=1
slow-query-log-file=/www/server/data/mysql-slow.log
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""
第二步创建同步专用账号并授权
CREATE USER 'async_user'@'%' IDENTIFIED BY '你的密码';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'async_user'@'%';
FLUSH PRIVILEGES;
然后通过下面命令查询并记录一下我们需要用到的同步信息
SHOW MASTER STATUS;
会得到一个File和Position的查询结果,需要记录下来,因为从库将从这里开始同步。
第三步就需要设置一下从库的MySQL配置,如下:
[mysqld]
server-id = 246
relay-log = mysql-relay-bin
read_only = 1
需要注意一下这里的server-id,不要和主数据库的重复,设置一个不一样的就行,必须唯一。
第四步就可以启动同步了,首先重启本地MySQL,执行以下SQL指定主库信息并启动同步。
--8.0.22以下版本
CHANGE MASTER TO
MASTER_HOST='线上数据库IP',
MASTER_USER='async_user',
MASTER_PASSWORD='your_password', -- 替换为实际密码
MASTER_LOG_FILE='记录的File值mysql-bin.000001', -- 请替换为实际的二进制日志文件名
MASTER_LOG_POS= 记录的Position值123456; -- 请替换为实际的日志位置
START SLAVE;
如果你使用的MySQL版本在8.0.22 及以上版本,需要使用下面的代码
--8.0.22及以上版本
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '线上数据库IP',
SOURCE_USER = 'async_user',
SOURCE_PASSWORD = 'your_password', -- 替换为实际密码
SOURCE_LOG_FILE = '记录的File值mysql-bin.000001', -- 请替换为实际的二进制日志文件名
SOURCE_LOG_POS = 记录的Position值123456; -- 请替换为实际的日志位置
START REPLICA; -- 启动复制线程
第五步检查以下状态:运行 SHOW SLAVE STATUS;,若 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes,则表示同步成功。
如果这2个状态有一个不是yes的情况下,需要查看对应的error字段进行查看并修复。
如果你需要同步部分数据库并且主从数据库的名字不一样,可以用下面代码操作
-- 先停止
STOP SLAVE;
-- 重新设置你需要的过滤和重写规则
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((主数据库表, 从数据库表));
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('从数据库表.%');
-- 启动
START SLAVE;
同样的,如果你使用的MySQL版本在8.0.22 及以上版本,使用的停止和启动命令需要更改一下,中间的重写设置不变。


评论前必须登录!
注册