在 Linux 上的 MariaDB 中恢复误删的表,常见方法取决于你有没有备份或开启了二进制日志(binlog)。下面按可行程度从高到低说明。
如果你之前用 mysqldump 导出的 SQL 文件:
mysql -u root -p dbname < backup.sql
如果只恢复某一张表:
mysql -u root -p dbname < table_backup.sql
如果是 Percona XtraBackup:
innobackupex --copy-back /backup/path
chown -R mysql:mysql /var/lib/mysql
systemctl restart mariadb
SHOW VARIABLES LIKE 'log_bin';
如果为 ON,可以继续。
查看 binlog 文件:
ls -lh /var/lib/mysql/
通常文件名类似:
mysql-bin.000001
查看内容:
mysqlbinlog /var/lib/mysql/mysql-bin.000001 | grep -i "DROP TABLE"
假设删除发生在 position=12345:
mysqlbinlog --stop-position=12345 \
/var/lib/mysql/mysql-bin.000001 | mysql -u root -p dbname
或按时间:
mysqlbinlog --stop-datetime="2026-01-21 10:00:00" \
/var/lib/mysql/mysql-bin.000001 | mysql -u root -p dbname
不推荐普通人操作,仅极端情况
undrop-for-innodb 工具恢复这种情况 MariaDB 无法原生恢复,只能:
/etc/my.cnf:
[mysqld]
log-bin=mysql-bin
binlog_format=row
mysqldump -u root -p --all-databases > backup.sql
RENAME TABLE user TO user_del_20260121;
如果你愿意,可以告诉我:
我可以帮你给出具体恢复命令。