在 Debian 上迁移 MySQL 数据,常见有几种方式,取决于你的场景(同机迁移、跨服务器、升级版本等)。下面按 最常用、最安全 的方式给你完整说明。
mysql --version
sudo systemctl stop mysql
mysqldump(✅ 推荐,最安全)适合:
mysqldump -u root -p --all-databases --single-transaction --routines --triggers --events > all.sql
参数说明:
--single-transaction:InnoDB 不锁表--routines:存储过程--triggers:触发器--events:事件scp all.sql user@new_server:/tmp/
mysql -u root -p < /tmp/all.sql
✅ 优点:兼容性好
❌ 缺点:数据大时慢
适合:
默认路径:
/var/lib/mysql
打包:
sudo tar czvf mysql-data.tar.gz /var/lib/mysql
scp mysql-data.tar.gz user@new_server:/tmp/
sudo systemctl stop mysql
sudo mv /var/lib/mysql /var/lib/mysql.bak
sudo tar xzvf /tmp/mysql-data.tar.gz -C /var/lib/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
✅ 优点:速度快
❌ 缺点:版本不一致可能启动失败
mysqldump -u root -p db_name > db_name.sql
mysql -u root -p db_name < db_name.sql
或先建库:
CREATE DATABASE db_name;
mysql -u root -p
SHOW DATABASES;
USE db_name;
SHOW TABLES;
sudo journalctl -xe
sudo cat /var/log/mysql/error.log
sudo chown -R mysql:mysql /var/lib/mysql
sudo nano /etc/apparmor.d/usr.sbin.mysqld
添加新数据目录权限后:
sudo systemctl reload apparmor
| 场景 | 推荐方式 |
|---|---|
| 不同服务器 | mysqldump |
| 同版本、大数据 | 数据目录迁移 |
| 单库迁移 | mysqldump 单库 |
| 升级 MySQL | mysqldump |
如果你愿意,可以告诉我:
我可以给你 精确到命令级别 的迁移方案。