- 首页 >
- 问答 >
-
云计算 >
- Debian MariaDB数据迁移方案
Debian MariaDB数据迁移方案
小樊
45
2025-12-28 20:08:19
Debian MariaDB 数据迁移方案
一、方案总览与选择
- 逻辑迁移:使用 mysqldump 导出为 SQL 并在目标端导入,适用于跨版本、跨平台、选择性迁移,停机时间短(可在低峰窗口导入)。
- 物理迁移:直接拷贝数据目录 /var/lib/mysql 到目标端并调整配置,要求版本与配置高度一致,需停机,适合同版本整机迁移。
- 主从复制零停机:将目标端先设为源端从库,追平后切换应用连接,再断开复制,适合对业务连续性要求高的场景。
- 云上 DTS:若目标为云上数据库(如 RDS MySQL),可用 DTS 做结构+全量+增量迁移,支持会话级外键约束临时禁用、Rename 风险提醒等能力。
二、通用准备与风险控制
- 备份与版本核对:全量备份(如 –all-databases),核对源端版本(SELECT VERSION();)、字符集与排序规则(SHOW VARIABLES LIKE ‘character_set%’;),确保目标端字符集一致(推荐 utf8mb4)。
- 目标端准备:安装 mariadb-server,运行 mysql_secure_installation 初始化安全项。
- 权限与复制账号:准备用于迁移/复制的账号,按需授予 SELECT、REPLICATION SLAVE/CLIENT 等权限。
- 应用侧准备:梳理连接串、连接池、超时与重试策略,准备回滚预案与切换窗口。
- 大表策略:分批导出/导入、使用压缩传输、必要时增加 innodb_buffer_pool_size,导入后执行 ANALYZE/OPTIMIZE TABLE 提升统计与性能。
三、三种落地方案步骤
-
方案A 逻辑迁移(推荐,低停机)
- 源端导出:
mysqldump -uroot -p --single-transaction --routines --triggers --default-character-set=utf8mb4 --databases your_db > backup.sql
如需跨版本或含 GTID 信息,可加 –set-gtid-purged=OFF。
- 传输到目标端:
scp backup.sql user@target:/tmp/
- 目标端导入:
mysql -uroot -p < /tmp/backup.sql
- 验证:SHOW DATABASES; USE your_db; SHOW TABLES; SELECT COUNT(*) FROM critical_table;
- 切换应用并更新配置,观察错误日志与连接状态。
-
方案B 物理迁移(同版本、停机窗口)
- 停库:systemctl stop mariadb(源与目标)。
- 拷贝数据目录:
rsync -avz --info=progress2 /var/lib/mysql/ target:/var/lib/mysql_new
- 调整目标配置(/etc/mysql/mariadb.conf.d/50-server.cnf):
[mysqld] datadir=/var/lib/mysql_new
并确保目录属主:chown -R mysql:mysql /var/lib/mysql_new
- 启动与验证:
systemctl start mariadb
mysql -uroot -p -e “SHOW GLOBAL VARIABLES LIKE ‘%datadir%’;”
- 如启用 AppArmor/SELinux,需同步策略或临时调整。
-
方案C 主从复制零停机(不停写迁移)
- 目标端设置唯一 server_id(避免与源端冲突)。
- 源端备份(含主库位点/GTID):
mysqldump -h src_host -u repl -p --single-transaction --master-data=2 --set-gtid-purged=ON --databases your_db > master_dump.sql
- 目标端恢复:mysql -uroot -p < master_dump.sql
- 配置复制(示例,基于 GTID):
CHANGE MASTER TO MASTER_HOST=‘src_ip’, MASTER_USER=‘repl’, MASTER_PASSWORD=‘pwd’, MASTER_USE_GTID=slave_pos;
START SLAVE;
SHOW SLAVE STATUS\G(确保 Slave_IO_Running/Slave_SQL_Running=Yes,Seconds_Behind_Master=0)
- 切换:短暂停写→应用切到目标(如通过 MaxScale 或 VIP)→确认无延迟→STOP SLAVE; RESET SLAVE ALL; 还原 server_id。
四、迁移后验证与优化
- 数据一致性:对关键表做行数与抽样校验(COUNT(*)、校验和/抽样对比),核对视图、存储过程、触发器、外键。
- 字符集与排序规则:确认库/表/列级为 utf8mb4,避免乱码。
- 索引与统计:执行 ANALYZE TABLE 更新统计信息;大批量导入后可 OPTIMIZE TABLE 回收碎片。
- 性能与健康:监控错误日志、连接数、慢查询;按需调整 innodb_buffer_pool_size、连接池与超时参数。
五、常见问题与排错要点
- 版本不兼容:跨小版本/大版本优先用逻辑迁移;如用物理迁移,导入后执行 mysql_upgrade(视版本与包而定)。
- GTID 与位点:基于 GTID 复制更稳健;使用 mysqldump 时建议 –set-gtid-purged=ON,避免位点错配。
- 外键与 DDL:DTS 在迁移阶段会会话级禁用约束检查;自建迁移时,导入期间避免执行 DDL,或先导入数据再建外键。
- 大表超时/中断:分批导出/导入、提高 net_read/write_timeout、使用压缩与稳定网络;必要时增加 innodb_log_file_size 与缓冲池。
- 权限遗漏:迁移后复核应用账号权限(GRANT),确保主机、库、表级权限正确。