在 Debian 上迁移 MySQL(或 MariaDB)数据,常见有 三种场景。下面按最常用 → 最安全的顺序给你完整步骤,并标注注意事项。
适用于:磁盘空间不足、换盘、调整目录结构。
sudo systemctl stop mysql
sudo cp -a /var/lib/mysql /new/path/mysql
-a保留权限、属主、SELinux 上下文(如有)
sudo chown -R mysql:mysql /new/path/mysql
编辑:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
修改:
datadir = /new/path/mysql
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
sudo nano /etc/apparmor.d/usr.sbin.mysqld
添加:
/new/path/mysql/ r,
/new/path/mysql/** rwk,
然后:
sudo systemctl reload apparmor
sudo systemctl start mysql
✅ 检查:
mysql -u root -p -e "SELECT @@datadir;"
mysqldump -u root -p --all-databases --routines --triggers --events > all.sql
scp all.sql user@new_server:/tmp/
mysql -u root -p < /tmp/all.sql
✅ 优点:
⚠️ 要求:
sudo systemctl stop mysql
tar czf mysql.tar.gz /var/lib/mysql
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
tar xzf mysql.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
journalctl -xe
ls -ld /var/lib/mysql
常见原因:
mysql:mysqlmysql 系统库未导出时会发生
✅ 用 --all-databases 可避免
建议:
mysqldump| 场景 | 推荐方式 |
|---|---|
| 小库 / 跨版本 | mysqldump |
| 大库 / 同版本 | 拷数据目录 |
| 换盘 / 调整目录 | 改 datadir |
| 云迁移 | mysqldump + scp |
如果你愿意,可以告诉我:
我可以给你一套完全贴合你环境的迁移方案。