本文记录如何从一台旧服务器将 MySQL 数据库 test_db
迁移到新服务器,适用于服务器更换、备份还原、数据同步等场景。
📦 一、在旧服务器导出数据库 SQL 文件
使用 mysqldump
工具导出整个数据库的结构和数据:
mysqldump -u root -p --databases test_db > test_db.sql
说明:
--databases
参数确保导出的 SQL 文件中包含CREATE DATABASE
和USE 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 tabletest_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
系统数据库来迁移用户账号,推荐使用GRANT
或mysqldump 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 engine
或 errno: 184 "Tablespace already exists"
,大多是 .ibd
文件未删除或导入顺序有误,请按以上流程清理后重新导入即可。
---
如需生成 HTML 版本或支持自动 TOC 插件的格式优化,也可以告诉我,我可为你微调适配 Typecho 的主题样式。
评论 (0)