- 首页 >
- 问答 >
-
云计算 >
- Debian MariaDB数据库迁移技巧
Debian MariaDB数据库迁移技巧
小樊
46
2025-11-23 10:36:00
Debian MariaDB 数据库迁移技巧
一 迁移方式选型与适用场景
- 逻辑迁移(推荐上手):使用 mysqldump 或 mysqlpump 导出为 SQL 脚本,在目标 Debian 主机导入。适合大多数场景,跨版本、跨实例、跨云都方便;注意字符集、触发器/存储过程分拆导出与一致性时点控制。
- 物理热备(大库与最小停机):使用 Percona XtraBackup 做在线备份,目标端 prepare 后拷贝回数据目录并启动。适合 TB 级库、要求接近零停机的场景。
- 云上实例迁移:同云内可用厂商工具(如 DTS)做结构+全量+增量迁移;也可用 mysqldump 分拆导出数据与例程/触发器后导入。
- 物理文件直拷(同版本、同平台):停库后用 rsync/LVM 快照 拷贝 /var/lib/mysql,保持权限与 InnoDB 一致性;风险高,需严格一致性与回滚预案。
二 标准流程与命令清单(逻辑迁移)
- 源库导出(单库示例,含字符集与 BLOB 安全导出)
- 数据:
- mysqldump -h 源主机 -P 端口 -u 用户 -p --opt --default-character-set=utf8 --hex-blob 数据库名 > db.sql
- 例程/触发器/函数(如存在):
- mysqldump -h 源主机 -P 端口 -u 用户 -p --opt --default-character-set=utf8 --hex-blob 数据库名 -R > db_triggers.sql
- 传输到目标 Debian
- scp db.sql user@目标IP:/tmp/
- 目标库准备
- 先创建同名空库:CREATE DATABASE 数据库名 CHARACTER SET utf8mb4;
- 目标库导入
- mysql -h 127.0.0.1 -u 用户 -p 数据库名 < /tmp/db.sql
- 如有例程/触发器:mysql -h 127.0.0.1 -u 用户 -p 数据库名 < /tmp/db_triggers.sql
- 校验
- SHOW TABLES; SELECT COUNT(*) FROM 关键表; 抽样对比校验数据一致性。
三 版本兼容与升级要点
- 版本匹配建议:从 MySQL 5.6 → MariaDB 10.0+,MySQL 5.7 → MariaDB 10.2+;跨大版本建议用 mysqldump 而非直拷系统库。
- 系统库与权限迁移:不要跨版本直接导入 mysql 系统库。建议在旧库用 SHOW GRANTS 导出各账号权限,在新库逐条执行 GRANT;完成后执行 FLUSH PRIVILEGES。
- 升级后兼容性检查:在 Debian 上安装 MariaDB 后,按需执行 mysql_upgrade(部分发行版/安装方式会自动调用),以更新系统表结构与存储引擎兼容性。
- 认证与本地 root 登录:MariaDB 默认可能启用 unix_socket 认证,root 可在本机免密登录。若需密码或远程管理,调整用户插件与权限,例如:
- ALTER USER ‘root’@‘localhost’ IDENTIFIED VIA mysql_native_password USING PASSWORD(‘新密码’);
- 或在配置中启用相应认证插件后重启服务。
四 大库与零停机策略
- 并行导出与分拆导入:用 mysqlpump 的并行能力或多库分片导出,缩短窗口;导入时按库/表并发恢复。
- 零停机方案:
- 物理层:源端 XtraBackup 在线备份 → 传输 → 目标端 –prepare → 停写切换 → 拷贝回数据目录并启动;适合大库与严格 RTO 场景。
- 逻辑层:基于时间点的一致性快照(如按 GTID 或 binlog 位置),先全量导入,再回放增量直至切换。
- 云上增量迁移:使用 DTS 可实现结构迁移、全量迁移与增量同步(支持 INSERT/UPDATE/DELETE/REPLACE 与常见 DDL),便于平滑切换与回滚。
五 常见坑与排查清单
- 字符集与排序规则:导出时统一 –default-character-set=utf8(或 utf8mb4),避免目标库缺字符集/排序规则导致导入失败。
- 触发器/存储过程与事件:默认导出可能不包含或跳过触发器,建议分拆导出(如 -R),并在导入后校验 EVENT 是否启用。
- root 本地免密与远程登录:若遇到 root 无法用密码登录或 mysqladmin 失败,检查 unix_socket 插件与权限配置,并按需调整。
- systemd 与 AppArmor:目录迁移或自定义路径时,注意 ProtectHome、权限与 AppArmor 策略,避免因权限受限导致启动超时或访问被拒。
- 版本语法差异:跨版本/跨产品迁移时,部分语法(如全文索引顺序、排序规则、默认值函数、数据类型)不兼容会导致任务失败,需在迁移前做 DDL 改造或兼容性评估。