Ubuntu系统下MySQL数据库恢复方法
适用场景:有通过mysqldump工具创建的逻辑备份文件(.sql或.sql.gz格式)。
操作步骤:
sudo systemctl start mysql。mysqldump -u root -p --all-databases > full_backup.sql备份所有数据库。mysql -u [用户名] -p [目标数据库名] < [备份文件路径](如mysql -u root -p mydatabase < /home/user/mydatabase_backup.sql)。mysql -u root -p),选择目标数据库(USE mydatabase;),查看表是否存在(SHOW TABLES;)。适用场景:有数据库目录的物理备份(包含.ibd、.frm、.MYD等文件)。
操作步骤:
sudo systemctl stop mysql,避免数据写入冲突。/var/lib/mysql)重命名为mysql_old(sudo mv /var/lib/mysql /var/lib/mysql_old)。sudo mkdir /var/lib/mysql),将物理备份文件复制到新目录(sudo cp -R /path/to/backup/mysql/* /var/lib/mysql/)。sudo chown -R mysql:mysql /var/lib/mysql。sudo systemctl start mysql),运行sudo mysqlcheck -u root -p --all-databases --auto-repair修复可能的表错误。适用场景:误删除数据、误执行SQL语句,且有开启二进制日志(log_bin=ON)。
操作步骤:
SHOW VARIABLES LIKE 'log_bin';,若结果为ON则表示已开启。SHOW BINARY LOGS;查看日志文件列表(如mysql-bin.000001、mysql-bin.000002)。mysqlbinlog工具解析日志(指定时间范围或文件),并将结果导入MySQL。例如恢复2025-01-01 00:00:00至2025-01-02 00:00:00的数据:mysqlbinlog --start-datetime="2025-01-01 00:00:00" --stop-datetime="2025-01-02 00:00:00" /var/log/mysql/mysql-bin.000001 | mysql -u root -p。适用场景:需要快速恢复大型InnoDB数据库,支持热备份(无需停止MySQL服务)。
操作步骤:
sudo apt-get install percona-xtrabackup-24(Ubuntu 22.04+)。sudo xtrabackup --prepare --target-dir=/path/to/backup(如/path/to/backup/full),应用日志使备份一致。sudo xtrabackup --copy-back --target-dir=/path/to/backup --datadir=/var/lib/mysql。sudo chown -R mysql:mysql /var/lib/mysql,然后启动MySQL(sudo systemctl start mysql)。适用场景:有另一台运行相同MySQL版本的服务器,可直接复制其数据目录。
操作步骤:
sudo systemctl stop mysql。rsync或scp将源服务器的/var/lib/mysql目录复制到目标服务器(如sudo rsync -avz user@remote_host:/var/lib/mysql/ /var/lib/mysql/)。sudo chown -R mysql:mysql /var/lib/mysql,确保数据目录归属正确。sudo systemctl start mysql,并验证数据完整性。root用户或具有sudo权限的用户执行,确保MySQL用户对数据目录有读写权限。/var/log/mysql/error.log)定位具体原因。