mysql如何同步指定数据库

首先配置主库启用二进制日志并设置server-id,创建复制账号;然后在从库设置不同server-id并使用replicate-do-db指定同步数据库;接着在主库执行SHOW MASTER STATUS获取日志文件和位置,在从库通过CHANGE MASTER TO指向主库信息并启动复制;最后检查SHOW SLAVE STATUS中Slave_IO_Running和Slave_SQL_Running是否均为Yes以确认复制正常。注意防火墙开放3306端口、主从时间同步及跨库操作可能被忽略的问题,建议通过备份恢复初始化从库数据以确保一致性。

MySQL同步指定数据库,通常通过主从复制(Replication)实现。只需要配置主库和从库,在从库上只同步你指定的数据库即可。整个过程不复杂,关键在于正确设置过滤规则。

1. 启用主库的二进制日志并配置server-id

要开启复制,主库必须启用二进制日志,并设置唯一的server-id

编辑主库的my.cnfmy.ini文件:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW

重启MySQL服务使配置生效。

创建用于复制的账号:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

2. 配置从库并指定要同步的数据库

从库也需要设置唯一的server-id,并且不能与主库相同。

编辑从库配置文件:

[mysqld]
server-id = 2
replicate-do-db = your_database_name  # 只同步这个数据库

说明:replicate-do-db 表示只应用来自该数据库的事件。如果有多个数据库需要同步,可以添加多行,每行一个数据库。

注意:如果使用了replicate-do-db,跨库操作(如主库执行USE other_db; UPDATE your_db.table SET ...)可能不会被正确同步,建议保持操作在目标数据库内进行。

3. 获取主库状态并启动复制

在主库上执行:

SHOW MASTER STATUS;

记录下FilePosition值。

在从库上配置主库连接信息:

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',  # 对应上面的File
  MASTER_LOG_POS=1234;                 # 对应上面的Position

START SLAVE;

查看从库复制状态:

SHOW SLAVE STATUS\G

检查Slave_IO_RunningSlave_SQL_Running是否都为Yes

4. 常见问题与注意事项

  • 确保主从库时间同步,避免复制延迟误判。
  • 防火墙开放3306端口,允许从库连接主库。
  • 使用replicate-do-db时,SQL语句默认作用于指定数据库,否则可能跳过。
  • 若需更灵活控制(如忽略某些表),可使用replicate-ignore-table等参数。
  • 备份恢复方式初始化从库更安全:先在主库导出指定库数据,导入从库后再开始复制。

基本上就这些。只要主库开启binlog,从库配置好过滤规则,就能实现只同步指定数据库。关键是配置准确,状态检查到位。