温馨提示×

Debian怎么迁移MySQL数据

小樊
75
2026-07-02 06:55:14
栏目: 云计算

在 Debian 上迁移 MySQL(或 MariaDB)数据,常见有 三种场景。下面按最常用 → 最安全的顺序给你完整步骤,并标注注意事项。


一、同机迁移数据目录(更改 datadir)

适用于:磁盘空间不足、换盘、调整目录结构。

1. 停止 MySQL

sudo systemctl stop mysql

2. 复制数据目录(不要直接 mv)

sudo cp -a /var/lib/mysql /new/path/mysql

-a 保留权限、属主、SELinux 上下文(如有)

3. 修改权限(非常重要)

sudo chown -R mysql:mysql /new/path/mysql

4. 修改配置文件

编辑:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

修改:

datadir = /new/path/mysql

5. 如果是 MariaDB,还需检查

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

6. AppArmor(Debian 常见坑)

sudo nano /etc/apparmor.d/usr.sbin.mysqld

添加:

/new/path/mysql/ r,
/new/path/mysql/** rwk,

然后:

sudo systemctl reload apparmor

7. 启动 MySQL

sudo systemctl start mysql

✅ 检查:

mysql -u root -p -e "SELECT @@datadir;"

二、迁移到另一台 Debian 服务器(推荐方式)

✅ 方法 1:mysqldump(最安全,推荐)

1. 原服务器导出

mysqldump -u root -p --all-databases --routines --triggers --events > all.sql

2. 传输到新服务器

scp all.sql user@new_server:/tmp/

3. 新服务器导入

mysql -u root -p < /tmp/all.sql

✅ 优点:

  • 不依赖版本
  • 可跨系统
  • 最稳定

✅ 方法 2:直接拷贝数据目录(适合大库)

⚠️ 要求:

  • MySQL 版本一致
  • 停止服务
  • 引擎为 InnoDB(MyISAM 风险更高)

原服务器

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

四、迁移后常见问题

1. 无法启动

journalctl -xe
ls -ld /var/lib/mysql

常见原因:

  • 权限不是 mysql:mysql
  • AppArmor 未放行
  • 配置文件路径错误

2. 用户丢失

mysql 系统库未导出时会发生
✅ 用 --all-databases 可避免


3. 版本不一致

建议:

  • 先升级旧服务器
  • 或只用 mysqldump

五、推荐方案总结

场景 推荐方式
小库 / 跨版本 mysqldump
大库 / 同版本 拷数据目录
换盘 / 调整目录 改 datadir
云迁移 mysqldump + scp

如果你愿意,可以告诉我:

  • MySQL 还是 MariaDB?
  • 同机还是跨服务器?
  • 数据量大概多大?

我可以给你一套完全贴合你环境的迁移方案

0