mysql安装完成后进行数据库迁移,核心是通过数据导出和导入的方式实现原有数据的转移,适用于同服务器不同实例、跨服务器迁移等多种场景,操作过程主要依赖mysql自带的原生工具完成。

迁移前的准备工作
在开始迁移前,需要确认以下内容,避免迁移过程中出现错误:
- 新的mysql实例已经正常启动,且可以正常登录
- 拥有原有数据库的读取权限,以及新mysql实例的写入权限
- 确认原有数据库和新实例的字符集尽量保持一致,避免出现中文乱码问题
- 如果是跨服务器迁移,需要确保两台服务器之间网络互通,或者可以通过文件传输工具传递备份文件
数据导出操作步骤
数据导出使用mysql自带的mysqldump工具,该工具可以生成包含数据库结构和数据的SQL脚本文件。
导出单个数据库
执行以下命令导出指定数据库的所有内容:
# 导出数据库test_db,生成备份文件test_db_backup.sql mysqldump -u 用户名 -p 数据库名 > 备份文件路径 # 示例 mysqldump -u root -p test_db > /home/backup/test_db_backup.sql
执行命令后会提示输入数据库密码,输入正确密码后等待命令执行完成,即可在指定路径找到生成的SQL备份文件。
导出多个或所有数据库
如果需要导出多个数据库,可以添加--databases参数指定多个库名,导出所有数据库则使用--all-databases参数:
# 导出多个数据库 mysqldump -u root -p --databases db1 db2 > /home/backup/multi_db_backup.sql # 导出所有数据库 mysqldump -u root -p --all-databases > /home/backup/all_db_backup.sql
备份文件传输(跨服务器场景)
如果是将数据库迁移到另一台服务器的mysql实例,需要把导出的SQL备份文件传输到目标服务器,可以使用scp命令完成传输:
# 将本地备份文件传输到目标服务器的/home/backup目录 scp /home/backup/test_db_backup.sql 目标服务器用户名@目标服务器IP:/home/backup/ # 示例 scp /home/backup/test_db_backup.sql root@192.168.0.1:/home/backup/
数据导入操作步骤
将备份文件准备好后,登录到新的mysql实例执行导入操作,导入方式有两种,分别适用于不同场景。
方式一:使用source命令导入
先登录mysql客户端,然后切换到需要导入的数据库(如果是导入整个库可以跳过建库步骤),执行source命令:
-- 登录mysql mysql -u root -p -- 如果是导入单个库且备份文件不包含建库语句,先创建数据库 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 切换到目标数据库 USE test_db; -- 执行导入,指定备份文件的绝对路径 source /home/backup/test_db_backup.sql;
方式二:使用mysql命令直接导入
无需登录mysql客户端,直接在命令行执行以下命令完成导入:
# 导入SQL备份文件到指定数据库 mysql -u 用户名 -p 数据库名 < 备份文件路径 # 示例 mysql -u root -p test_db < /home/backup/test_db_backup.sql
迁移后验证
导入完成后,需要验证数据是否完整:
- 查看数据库列表,确认目标数据库已经存在:
SHOW DATABASES; - 切换到目标数据库,查看表数量是否和原数据库一致:
SHOW TABLES; - 抽查部分表的数据,确认数据行数和内容没有缺失:
SELECT COUNT(*) FROM 表名;
常见问题说明
- 如果导入时出现权限错误,需要确认登录mysql的用户拥有对应数据库的操作权限
- 如果出现中文乱码,检查导出时是否添加了字符集参数,例如
--default-character-set=utf8mb4 - 如果备份文件较大,导入时间会较长,耐心等待即可,不要中途中断命令执行