阅读量:38
Debian系统MySQL数据库迁移指南
一、迁移前准备
-
备份源数据库:使用
mysqldump工具导出所有数据库或特定数据库,确保数据安全。命令示例:mysqldump -u [用户名] -p[密码] --all-databases > all_databases_backup.sql # 备份所有数据库 mysqldump -u [用户名] -p[密码] [数据库名] > single_db_backup.sql # 备份特定数据库注意:
-p与密码之间无空格,避免认证失败。 -
目标服务器环境配置:
- 确保目标Debian服务器已安装与源服务器版本兼容的MySQL(推荐同主版本,如5.7→5.7或8.0→8.0)。可通过以下命令安装:
sudo apt update && sudo apt install mysql-server - 检查目标服务器磁盘空间是否充足(需容纳源数据库所有数据)。
- 确保目标Debian服务器已安装与源服务器版本兼容的MySQL(推荐同主版本,如5.7→5.7或8.0→8.0)。可通过以下命令安装:
二、物理迁移(适用于大数据量、同版本场景)
物理迁移通过直接复制数据文件实现,速度快但需停机,且要求源与目标服务器MySQL版本、配置一致。
-
停止源和目标MySQL服务:
sudo systemctl stop mysql # 源服务器 ssh user@target_server "sudo systemctl stop mysql" # 目标服务器(通过SSH执行) -
复制数据文件:使用
scp或rsync将源服务器的MySQL数据目录(默认/var/lib/mysql)复制到目标服务器相同路径。示例:rsync -avz /var/lib/mysql/ user@target_server:/var/lib/mysql/ # 保留文件属性 -
设置权限:确保目标服务器的MySQL用户(默认
mysql:mysql)对新数据目录有读写权限。ssh user@target_server "sudo chown -R mysql:mysql /var/lib/mysql" -
启动目标MySQL服务:
ssh user@target_server "sudo systemctl start mysql" sudo systemctl start mysql # 源服务器(如需恢复服务) -
验证数据:登录目标服务器,检查数据库是否完整。
mysql -u [用户名] -p -e "SHOW DATABASES;" # 查看所有数据库 mysql -u [用户名] -p [数据库名] -e "SHOW TABLES;" # 查看特定数据库的表
三、逻辑迁移(适用于跨版本、部分迁移场景)
逻辑迁移通过导出SQL脚本实现,兼容性强,适合跨版本(如5.7→8.0)或部分数据库迁移。
-
导出源数据库:使用
mysqldump导出结构和数据到SQL文件(同准备步骤)。mysqldump -u [用户名] -p[密码] [数据库名] > db_backup.sql -
传输备份文件到目标服务器:使用
scp将SQL文件复制到目标服务器。scp db_backup.sql user@target_server:/home/user/backups/ -
在目标服务器恢复数据:
- 登录目标服务器,创建目标数据库(若未存在):
mysql -u [用户名] -p -e "CREATE DATABASE [目标数据库名];" - 导入SQL文件:
mysql -u [用户名] -p [目标数据库名] < /home/user/backups/db_backup.sql
- 登录目标服务器,创建目标数据库(若未存在):
-
验证数据:同物理迁移的验证步骤,确保数据一致性。
四、跨版本迁移注意事项
-
版本兼容性检查:
- 确保目标版本不低于源版本(如5.7→8.0可行,但8.0→5.7不可行)。
- 查阅MySQL官方发行说明,确认新版本是否支持源数据库的特性(如JSON函数、存储引擎等)。
-
数据类型与语法适配:
- MySQL 8.0默认字符集为
utf8mb4(支持emoji),若源数据库用latin1,需在导出前修改源数据库字符集或在导入后转换:ALTER DATABASE [数据库名] CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 检查SQL脚本中的保留字(如
ORDER、GROUP),若有冲突需用反引号(`)包裹。
- MySQL 8.0默认字符集为
-
逐步升级(大版本跨度时):
- 若跨多个主版本(如5.7→8.0),建议分步升级(5.7→8.0),每步升级前测试数据兼容性,避免直接升级导致错误。
五、迁移后验证
-
数据完整性检查:
- 对比源与目标数据库的表数量、行数(对大表可使用
COUNT(*)抽样检查)。 - 抽查关键表的关键字段(如ID、金额),确保数据一致。
- 对比源与目标数据库的表数量、行数(对大表可使用
-
应用连接测试:
- 将应用程序的数据库连接配置(如JDBC URL、PHP配置)指向目标服务器,测试应用功能是否正常(如登录、查询、写入)。
-
清理工作:
- 确认迁移无误后,删除源服务器的备份文件(
rm all_databases_backup.sql)和目标服务器的临时文件,释放空间。
- 确认迁移无误后,删除源服务器的备份文件(