
简介
MySQL 数据库迁移是一项关键操作,会影响数据完整性、应用程序稳定性和恢复功能。我们将解释如何使用 mysqldump、迁移用户、保持数据完整性以及考虑不同 MySQL 版本的细微差别。
何时需要进行迁移?
- 迁移至新的托管服务提供商或新服务器。
- 升级 MySQL 版本。
- 配置复制或负载均衡。
- 数据库合并。
风险及如何最小化风险
- 版本不兼容:sql_mode、default_authentication_plugin、编码(utf8mb4_unicode_ci 与 utf8mb4_0900_ai_ci)差异。
- 权限丢失:用户需单独注册并手动转移。
- 应用程序停机时间:在无复制迁移过程中。
- 不一致的导出:–single-transaction 仅适用于 InnoDB;对于 MyISAM,需要使用 FLUSH TABLES WITH READ LOCK。
迁移的分步计划
步骤 1. 创建导出
主要关键词 (1):MySQL 数据库迁移。
创建保留逻辑的导出:
mysqldump -u root -p --single-transaction --routines --triggers --events olddb > dump.sql
- –single-transaction 减少锁定(仅适用于 InnoDB)。
- –routines, –triggers, –events 保留存储过程、触发器和事件调度程序。
步骤 2. 传输导出文件
通过 SCP 或 rsync 通过安全通道传输。验证文件完整性:
sha256sum dump.sql
步骤 3. 创建数据库
在新服务器上:
mysql -u root -p -e "CREATE DATABASE newdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
注意:utf8mb4_unicode_ci 在 MySQL 8.0 中可能与 utf8mb4_0900_ai_ci 不同。
步骤 4. 导入数据导出文件。
mysql -u root -p newdb < dump.sql
步骤 5. 转移用户和权限
- 执行 SHOW GRANTS FOR «user»@“host” 并转移 CREATE USER/GRANT。
- 在 MySQL 8.0 中,您可以使用 mysqlpump –users。
- 请注意 default_authentication_plugin(在 8.0 中为 caching_sha2_password)。
步骤 6. 完整性检查
- 比较表中的行数。
- 检查校验和(pt-table-checksum)。
- 测试重要 SQL 查询。
步骤 7. 最大限度地减少停机时间
对于关键系统,请使用 复制:
- 将新服务器配置为从属服务器。
- 等待同步完成。
- 无停机时间地从主服务器切换到从属服务器。
迁移前检查清单
单元 | 需要检查什么? |
版本 | 与MySQL/MariaDB的兼容性 |
编码 | 请确保utf8mb4和分类设置正确。 |
SQL 模式 | 比较 sql_mode |
权利 | 验证权限授予 |
附件 | default_authentication_plugin |
复制品 | 检查延迟 |
回滚
- 创建旧服务器的备份。
- 要执行回滚,您可以将旧服务器作为从属服务器启动,然后再恢复原状。
结论
如果考虑版本兼容性、使用备份并验证数据完整性,MySQL 数据库迁移是安全的。复制可避免停机时间,备份则支持快速恢复。MySQL 数据库迁移需要在权限、分类和参数设置方面采取细致入微的策略。