温馨提示×

ubuntu mysql怎样恢复数据

小樊
33
2026-09-10 01:44:11
栏目: 云计算

在 Ubuntu 上恢复 MySQL 数据,常见场景和做法如下,你可以按实际情况选择。


一、通过备份文件恢复(最常用)

1. 使用 .sql 备份文件恢复

如果你之前用 mysqldump 备份过:

mysql -u root -p 数据库名 < /path/to/backup.sql

恢复所有数据库:

mysql -u root -p < /path/to/all_databases.sql

2. 使用压缩备份恢复

gunzip < backup.sql.gz | mysql -u root -p 数据库名

二、通过物理数据文件恢复(ibd / datadir)

适用于:服务器坏了,但数据目录还在

情况 A:直接复制整个 MySQL 数据目录

原数据目录一般是:

/var/lib/mysql

步骤:

  1. 停止 MySQL
sudo systemctl stop mysql
  1. 备份当前数据(防万一)
sudo cp -r /var/lib/mysql /var/lib/mysql_bak
  1. 拷贝旧数据
sudo cp -r /old/mysql /var/lib/mysql
  1. 修改权限
sudo chown -R mysql:mysql /var/lib/mysql
  1. 启动 MySQL
sudo systemctl start mysql

⚠️ 注意:MySQL 版本尽量一致,否则可能起不来。


情况 B:只恢复某个表(ibd 文件)

适用于 InnoDB + innodb_file_per_table=ON

  1. 在新库建同名表
CREATE TABLE 表名 (...);
  1. 丢弃原表空间
ALTER TABLE 表名 DISCARD TABLESPACE;
  1. 拷贝 .ibd 文件
sudo cp 表名.ibd /var/lib/mysql/数据库名/
sudo chown mysql:mysql /var/lib/mysql/数据库名/表名.ibd
  1. 导入表空间
ALTER TABLE 表名 IMPORT TABLESPACE;

三、使用 binlog 恢复(误删数据)

如果你开启了 binlog:

mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p

恢复到某个时间点:

mysqlbinlog --stop-datetime="2024-01-01 10:00:00" mysql-bin.000001 | mysql -u root -p

查看是否开启:

SHOW VARIABLES LIKE 'log_bin';

四、误删库/表后的紧急恢复建议

  1. 立刻停止 MySQL 写入
sudo systemctl stop mysql
  1. 不要动 /var/lib/mysql
  2. 用备份或 binlog 恢复
  3. 若无备份,可尝试 undrop-for-innodb 等工具(高级)

五、推荐日常备份方式

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

或自动备份:

0 3 * * * mysqldump -u root -p密码 数据库 | gzip > /backup/db.sql.gz

如果你能告诉我:

  • 是否有备份?
  • 是整库还是单表?
  • 数据怎么丢的(误删 / 服务器坏 / 升级失败)?

我可以给你更精确的恢复步骤

0