使用 mysqldump 迁移数据库是一种常见且可靠的方法,适用于备份、恢复或在不同服务器之间迁移数据。整个过程主要包括导出数据和导入数据两个步骤,操作简单但需要注意权限、字符集和网络等细节。
1. 使用 mysqldump 导出数据库
在源数据库服务器上执行导出操作,生成 SQL 文件。
基本语法:mysqldump -u [用户名] -p[密码] [选项] [数据库名] > [输出文件路径]
常用示例: 导出单个数据库:mysqldump -u root -p mydatabase > mydatabase.sql导出多个数据库:
mysqldump -u root -p --databases db1 db2 > backup.sql导出所有数据库:
mysqldump -u root -p --all-databases > alldb.sql只导出表结构(不包含数据):
mysqldump -u root -p --no-data mydatabase > schema.sql导出时添加锁表机制以保证一致性(适合生产环境):
mysqldump -u root -p --single-transaction mydatabase > mydatabase.sql注意:
密码可以直接写在 -p 后面(如 -p123456),但出于安全考虑建议省略密码,回车后手动输入。
2. 将导出文件传输到目标服务器
使用安全方式将 .sql 文件复制到目标机器。
使用 scp 命令(Linux/Unix 环境):scp mydatabase.sql user@target-server:/path/to/destination/也可通过 FTP、rsync 或U盘等方式传输,确保文件完整。
3. 在目标服务器导入数据库
导入前需确保 MySQL 服务运行正常,并创建好目标数据库(可选)。
创建数据库(如果不存在):mysql -u root -p -e "CREATE DATABASE mydatabase CHARACTER SET utf8mb4;"导入 SQL 文件:
mysql -u root -p mydatabase如果导出的是多个数据库或 all-databases,则直接执行:
mysql -u root -p提示:
导入大文件时可能耗时较长,建议在后台运行或使用 screen/nohup。可通过查看日志或执行
SHOW TABLES;验证是否导入成功。
4. 注意事项与优化建议
确保源和目标 MySQL 版本兼容,避免因语法差异导致导入失败。 统一字符集(推荐使用 utf8mb4),防止乱码问题。 大数据库导出时加上--single-transaction可避免锁表,保持服务可用。 若数据量极大,可结合压缩减少传输体积:
mysqldump -u root -p mydatabase | gzip > mydatabase.sql.gz
导入时解压:
gunzip导入前关闭唯一性检查可提升速度(适用于大批量数据):
在 SQL 文件开头添加:
SET unique_checks=0;和
SET foreign_key_checks=0;
导入后再恢复约束检查。
基本上就这些。只要权限正确、路径无误、字符集一致,mysqldump 迁移过程稳定高效,适合大多数中小型数据库场景。不复杂但容易忽略细节,比如事务选项和外键约束处理。
