在 Ubuntu 上恢复 MySQL 数据,常见场景和做法如下,你可以按实际情况选择。
.sql 备份文件恢复如果你之前用 mysqldump 备份过:
mysql -u root -p 数据库名 < /path/to/backup.sql
恢复所有数据库:
mysql -u root -p < /path/to/all_databases.sql
gunzip < backup.sql.gz | mysql -u root -p 数据库名
适用于:服务器坏了,但数据目录还在
原数据目录一般是:
/var/lib/mysql
步骤:
sudo systemctl stop mysql
sudo cp -r /var/lib/mysql /var/lib/mysql_bak
sudo cp -r /old/mysql /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
⚠️ 注意:MySQL 版本尽量一致,否则可能起不来。
适用于 InnoDB + innodb_file_per_table=ON
CREATE TABLE 表名 (...);
ALTER TABLE 表名 DISCARD TABLESPACE;
.ibd 文件sudo cp 表名.ibd /var/lib/mysql/数据库名/
sudo chown mysql:mysql /var/lib/mysql/数据库名/表名.ibd
ALTER TABLE 表名 IMPORT TABLESPACE;
如果你开启了 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';
sudo systemctl stop mysql
/var/lib/mysqlundrop-for-innodb 等工具(高级)mysqldump -u root -p --all-databases > all.sql
或自动备份:
0 3 * * * mysqldump -u root -p密码 数据库 | gzip > /backup/db.sql.gz
如果你能告诉我:
我可以给你更精确的恢复步骤。