MySQL 数据库迁移/拷贝完整流程(含物理文件+SQL导入方式)
侧边栏壁纸
  • 累计撰写 20 篇文章
  • 累计收到 1 条评论

MySQL 数据库迁移/拷贝完整流程(含物理文件+SQL导入方式)

snailszzy
2025-07-15 / 0 评论 / 1 阅读 / 正在检测是否收录...

本文记录如何从一台旧服务器将 MySQL 数据库 test_db 迁移到新服务器,适用于服务器更换、备份还原、数据同步等场景。


📦 一、在旧服务器导出数据库 SQL 文件

使用 mysqldump 工具导出整个数据库的结构和数据:

mysqldump -u root -p --databases test_db > test_db.sql

说明:

  • --databases 参数确保导出的 SQL 文件中包含 CREATE DATABASEUSE test_db;,防止导入时报错。
  • 将导出的 test_db.sql 文件传输到新服务器,例如用 scp
scp test_db.sql admin@新服务器IP:/home/admin/

📁 二、准备新服务器导入

1. 停止 MySQL 服务(防止旧文件影响导入)

sudo systemctl stop mysql

2. 如果你曾从旧服务器拷贝了 /var/lib/mysql/test_db/ 文件夹,建议删除残留的表空间文件(.ibd

sudo rm /var/lib/mysql/test_db/*.ibd

这一步避免在导入 SQL 时出现类似:

ERROR 1005 (HY000): Can't create table test_db.acls (errno: 184 "Tablespace already exists")

3. 启动 MySQL 服务

sudo systemctl start mysql

🔁 三、在新服务器导入数据库

sudo mysql -u root -p < /home/admin/test_db.sql

如果 SQL 文件中未包含 CREATE DATABASE,可改用:

# 先手动创建数据库
mysql -u root -p -e "CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 然后导入数据
sudo mysql -u root -p test_db < /home/admin/test_db.sql

✅ 四、验证导入是否成功

登录数据库:

mysql -u root -p

执行:

SHOW DATABASES;
USE test_db;
SHOW TABLES;
SELECT * FROM users LIMIT 5;

⚠️ 注意事项

  • ❗ 如果旧服务器曾使用物理拷贝(直接复制 /var/lib/mysql/test_db/),必须删除 .ibd 文件,否则 InnoDB 引擎创建表时会报错。
  • ✅ 使用 mysqldump 是官方推荐方式,兼容性最好,适合不同版本间的迁移。
  • ⚠️ 不建议物理拷贝 mysql 系统数据库来迁移用户账号,推荐使用 GRANTmysqldump mysql user 来迁移权限。

📌 总结操作顺序(快速参考)

# 旧服务器
mysqldump -u root -p --databases test_db > test_db.sql
scp test_db.sql new_server:/home/admin/

# 新服务器
sudo systemctl stop mysql
sudo rm /var/lib/mysql/test_db/*.ibd      # 若拷贝过目录
sudo systemctl start mysql
sudo mysql -u root -p < /home/admin/test_db.sql

如遇报错 ERROR 1932: Table doesn't exist in engineerrno: 184 "Tablespace already exists",大多是 .ibd 文件未删除或导入顺序有误,请按以上流程清理后重新导入即可。


---

如需生成 HTML 版本或支持自动 TOC 插件的格式优化,也可以告诉我,我可为你微调适配 Typecho 的主题样式。
0

评论 (0)

取消