本站目前升级了全新主题zhime,该主题色彩更清新明亮。售价99元/套,你值得拥有,后台配置全,永久更新。另外还有Next.js版本!😃

实时同步线上mysql数据到本地mysql数据

第一步是开启 binlog 功能,并修改 MySQL 配置文件(my.cnf 或 my.ini),然后重启使配置生效

code
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 = ""

第二步创建同步专用账号并授权

code
CREATE USER 'async_user'@'%' IDENTIFIED BY '你的密码';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'async_user'@'%';
FLUSH PRIVILEGES;

然后通过下面命令查询并记录一下我们需要用到的同步信息

code
SHOW MASTER STATUS;

会得到一个File和Position的查询结果,需要记录下来,因为从库将从这里开始同步。

第三步就需要设置一下从库的MySQL配置,如下:

code
[mysqld]
server-id = 246
relay-log = mysql-relay-bin
read_only = 1

需要注意一下这里的server-id,不要和主数据库的重复,设置一个不一样的就行,必须唯一。

第四步就可以启动同步了,首先重启本地MySQL,执行以下SQL指定主库信息并启动同步。

code
--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 及以上版本,需要使用下面的代码

code
--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字段进行查看并修复。

如果你需要同步部分数据库并且主从数据库的名字不一样,可以用下面代码操作

code
-- 先停止
STOP SLAVE;
-- 重新设置你需要的过滤和重写规则
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((主数据库表, 从数据库表));
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('从数据库表.%');
-- 启动
START SLAVE;

同样的,如果你使用的MySQL版本在8.0.22 及以上版本,使用的停止和启动命令需要更改一下,中间的重写设置不变。

读完了点一下,作者能得积分

赞赏

如果这篇内容帮到了你,不妨请作者喝杯咖啡

分享 微博 QQ

发表评论

发表评论