MySQL 全量备份迁移步骤指南
1 引言
数据库迁移这件事,说起来简单,做起来却有不少门道。特别是把MySQL数据库从一台服务器完整搬到另一台服务器上,这个过程涉及备份、传输、导入三个关键步骤。
无论是做数据迁移、灾难恢复,还是搭建测试环境,这套流程都用得上。本文会把整个过程拆解开来,从源服务器备份数据开始,到最终在目标服务器上成功导入,每个环节都会详细说明。
2 源服务器备份操作
2.1 备份工具的选择
MySQL的备份工具中,mysqldump
算是最常用的一个。它能把数据库的结构和数据都转换成SQL语句,这样在其他服务器上恢复就很方便了。
这个工具有几个优点:操作简单、支持多种备份选项、兼容性好。基本上能满足大部分备份需求。
2.2 全库备份
如果要备份服务器上的所有数据库,用这个命令:
mysqldump -u [源服务器用户名] -p --all-databases > all_databases.sql
命令参数解释:
-u [源服务器用户名]
:连接MySQL的用户名,记得替换成实际的用户名-p
:需要输入密码,执行后系统会提示输入--all-databases
:备份所有数据库> all_databases.sql
:把备份内容保存到文件里
2.3 单库备份
有时候只需要备份特定数据库,比如user_data
:
mysqldump -u [源服务器用户名] -p user_data > user_data.sql
这里user_data
是数据库名,备份会保存到user_data.sql
文件中。用户名同样需要根据实际情况替换。
3 文件传输到目标服务器
3.1 用scp传输
scp
是基于SSH的安全文件传输工具,在服务器间复制文件很常用:
scp all_databases.sql [目标服务器用户名]@[目标服务器IP]:/home/backup/
参数说明:
all_databases.sql
:要传输的备份文件[目标服务器用户名]
:目标服务器的登录用户名[目标服务器IP]
:目标服务器IP地址/home/backup/
:文件在目标服务器上的存放路径
3.2 用rsync传输
rsync
功能更强大,支持增量传输,能节省时间和带宽:
rsync -avz all_databases.sql [目标服务器用户名]@[目标服务器IP]:/home/backup/
参数含义:
-a
:归档模式,保留文件权限和时间戳-v
:显示传输过程的详细信息-z
:传输时压缩文件,减少数据量
对于大文件来说,rsync通常比scp更高效。
4 目标服务器导入数据
4.1 登录MySQL
在目标服务器上连接MySQL:
mysql -u [目标服务器用户名] -p
输入密码后就能进入MySQL命令行了。
4.2 导入全库备份
如果备份的是所有数据库,直接在MySQL命令行执行:
SOURCE /home/backup/all_databases.sql;
这里/home/backup/all_databases.sql
是备份文件的完整路径。MySQL会逐行执行文件中的SQL语句,把数据导入到对应的数据库中。
4.3 导入单库备份
如果备份的是特定数据库,需要先创建数据库,再导入数据:
CREATE DATABASE IF NOT EXISTS user_data;
USE user_data;
SOURCE /home/backup/user_data.sql;
操作步骤:
CREATE DATABASE IF NOT EXISTS user_data;
:创建数据库,如果已存在就跳过USE user_data;
:切换到这个数据库SOURCE /home/backup/user_data.sql;
:导入备份数据
5 常见问题和注意事项
5.1 权限配置
备份和导入都需要相应的数据库权限。源服务器的用户要能读取数据库,目标服务器的用户要能创建数据库和写入数据。
如果权限不够,可以这样授权:
GRANT ALL PRIVILEGES ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'secure_password';
FLUSH PRIVILEGES;
5.2 版本兼容性
尽量保持源服务器和目标服务器的MySQL版本一致。不同版本在语法和存储格式上可能有差异,导致导入时出现问题。
如果版本不一致,建议先在测试环境验证一下。
5.3 磁盘空间检查
导入前要确保目标服务器有足够的磁盘空间。可以用df -h
查看磁盘使用情况:
df -h
根据备份文件大小判断空间是否够用。如果不够,需要清理磁盘或扩容。
5.4 备份文件完整性
传输完成后,建议检查文件完整性:
# 比较文件大小
ls -lh all_databases.sql# 或者用md5校验
md5sum all_databases.sql
这样能确保文件在传输过程中没有损坏。
按照上面的步骤,就能顺利完成MySQL数据库的跨服务器迁移了。整个过程中最重要的是仔细检查每个环节,确保数据的完整性。