网站迁移时,数据库的导出导入是决定成败的关键环节。无论是更换服务器、升级系统,还是从虚拟主机迁到云服务器,数据库迁移的失误都可能导致数据丢失或网站无法运行。本文将以典型场景串联步骤,为你梳理从备份到验证的完整流程,并指出常见的误区。
场景一:从旧服务器导出数据库
假设你正在将网站从旧主机迁移到新主机,第一步是备份并导出数据库。不同数据库系统导出方式不同,但核心原则一致:确保导出文件完整且包含所有必要数据。
MySQL/MariaDB 导出
使用 mysqldump 命令是常见做法。例如:
mysqldump -u 用户名 -p 数据库名 > backup.sql
执行后会生成 SQL 文件。注意:如果数据库较大,应使用 --single-transaction 选项(InnoDB)以避免锁表,同时可考虑压缩文件以节省空间。
PostgreSQL 导出
PostgreSQL 官方文档推荐使用 pg_dump 或 pg_dumpall。对于单个数据库,pg_dump 足够;若需全局对象(如用户、表空间),则用 pg_dumpall。例如:
pg_dump -U 用户名 -d 数据库名 -f backup.sql
导出后应检查文件大小和内容,确保非空且无错误提示。
Redis 等 NoSQL 导出
对于 Redis,官方文档建议使用 BGSAVE 生成 RDB 快照,或使用 MIGRATE 命令在线迁移。导出后需确保快照文件完整,并注意版本兼容性。
场景二:将导出文件传输到新服务器
导出的文件需要安全传输到新服务器。使用 scp 或 rsync 是常见方式,但需注意权限和加密。传输过程中可能因网络中断导致文件损坏,因此传输后应校验文件哈希(如 MD5 或 SHA256)。
场景三:在新服务器上导入数据库
导入前,先确认新服务器的数据库版本和字符集与旧环境兼容。例如,MySQL 5.7 导出的文件导入到 MySQL 8.0 可能遇到语法差异,需提前测试。
MySQL 导入
mysql -u 用户名 -p 数据库名 < backup.sql
导入过程中可能出现权限或外键错误,建议先禁用外键检查:
SET FOREIGN_KEY_CHECKS=0;
PostgreSQL 导入
psql -U 用户名 -d 数据库名 -f backup.sql
若导入报错,可查看日志定位问题,必要时调整 search_path 或权限。
Redis 导入
将 RDB 文件放到 Redis 数据目录,重启服务即可加载。但需注意 Redis 版本兼容性,官方文档建议使用相同或更高版本。
场景四:验证迁移结果
导入完成后,必须验证数据完整性。检查表数量、记录数是否一致,随机抽查关键数据。同时测试网站功能,确保数据库连接正常。AWS 可靠性指南强调,应验证备份的可恢复性,而不仅仅是创建备份。
常见误区与注意事项
- 忽略字符集:导出导入时未指定字符集,导致中文乱码。应统一使用 UTF-8。
- 忘记用户与权限:仅迁移数据,未迁移数据库用户和权限,导致连接失败。需单独处理。
- 版本不兼容:不同版本数据库的默认设置和语法可能变化,务必测试兼容性。
- 不验证备份:从未实际恢复过备份,迁移时才发现备份损坏。应定期演练恢复流程。
- 导入时锁表:导入大文件时未优化配置,导致超时或内存不足。可调整
max_allowed_packet等参数。
参考资料
延伸阅读
