关于新增实例时数据库初始数据复制实现方式的技术问询
不同数据库添加新复制实例时的初始数据同步方案
以下是主流数据库针对空实例加入复制架构时的初始数据同步实操方案,核心逻辑均为全量数据加载 + 增量变更追更:
MySQL
方案1:冷备份+Binlog追更
- 若允许源库短时间停机,直接停止源库服务,复制源库数据目录到新实例对应路径
- 启动新实例,在源库执行
SHOW MASTER STATUS;记录File(binlog文件名)和Position(binlog位点) - 在新实例配置复制并启动:
CHANGE MASTER TO MASTER_HOST='源库IP', MASTER_USER='复制专用账号', MASTER_PASSWORD='账号密码', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=107; START SLAVE;
方案2:热备份(Percona XtraBackup)
- 在源库执行全量热备份(无需停机):
xtrabackup --user=root --password=xxx --backup --target-dir=/data/mysql_backup - 准备备份文件(修复未完成的事务):
xtrabackup --prepare --target-dir=/data/mysql_backup - 将备份文件复制到新实例数据目录,修改文件权限为mysql用户可读写,启动新实例
- 备份目录下的
xtrabackup_binlog_info文件已记录对应binlog位点,直接用该信息配置复制即可
方案3:mysqldump全量导出+Binlog追更
- 导出全量数据并自动记录binlog位点:
mysqldump --user=root --password=xxx --single-transaction --master-data=2 --all-databases > full_data.sql - 将dump文件导入新实例:
mysql --user=root --password=xxx < full_data.sql - 打开
full_data.sql,找到注释的CHANGE MASTER TO行,提取binlog信息配置复制并启动
PostgreSQL
方案1:基础备份+WAL流同步
- 直接在新实例执行基础备份命令,从源库拉取全量数据并自动配置WAL同步:
pg_basebackup -h 源库IP -U 复制账号 -D /var/lib/postgresql/14/main -P -X stream - 启动新实例后,它会自动从源库追更后续的WAL日志,完成同步
方案2:pg_dump全量导入+WAL追更
- 导出源库全量数据:
pg_dump -h 源库IP -U postgres -F c -b -v -f full_dump.dmp - 在新实例创建空库后导入数据:
pg_restore -h 新实例IP -U postgres -d target_db -v full_dump.dmp - 获取源库当前WAL位点:
SELECT pg_current_wal_lsn();,配置新实例为从库并指定该位点启动流复制
MongoDB
方案1:自动初始同步(Initial Sync)
- 在新实例的
mongod.conf中配置源库副本集地址,启动mongod服务 - 新实例会自动从源库拉取全量数据,然后追更oplog中的增量操作,直到追上源库进度
- 注意:数据量过大时该过程耗时较长,适合中小型数据集
方案2:mongodump全量备份+oplog追更
- 导出源库全量数据并包含oplog:
mongodump --host 源库IP --port 27017 --oplog --out /data/mongo_backup - 在新实例恢复全量数据:
mongorestore --host 新实例IP --port 27017 /data/mongo_backup - 启动新实例的复制功能,从备份时的oplog时间点开始追更后续变更
SQL Server
方案1:完整备份+事务日志备份还原
- 在源库创建完整备份:
BACKUP DATABASE DemoDB TO DISK = 'C:\backup\DemoDB_full.bak' WITH INIT; - 将备份文件复制到新实例,以
NORECOVERY模式还原完整备份:RESTORE DATABASE DemoDB FROM DISK = 'D:\backup\DemoDB_full.bak' WITH NORECOVERY; - 在源库创建事务日志备份:
BACKUP LOG DemoDB TO DISK = 'C:\backup\DemoDB_log.trn' WITH INIT; - 在新实例以
RECOVERY模式还原事务日志:RESTORE LOG DemoDB FROM DISK = 'D:\backup\DemoDB_log.trn' WITH RECOVERY; - 配置新实例为源库的复制订阅,从日志备份末尾开始同步增量
方案2:复制初始化快照
- 将源库配置为发布服务器,创建需要同步的发布内容
- 在新实例创建订阅,选择「初始化快照」选项
- 发布服务器自动生成全量数据快照,推送到新实例并完成导入,之后自动同步后续增量变更
内容的提问来源于stack exchange,提问作者IDarar
相关产品推荐
相关产品推荐

