区别

  • 全量备份是指备份整个数据库的所有数据。
  • 增量备份是指仅备份自上次备份以来更改的数据。

全量备份

全量备份的主要方法是使用 mysqldump 工具进行逻辑备份,或直接复制 MySQL 数据目录进行物理备份。

使用 mysqldump 进行全量备份

mysqldump -u 用户名 -p 数据库名 > 备份文件.sql

示例:

mysqldump -u root -p mydatabase > /path/to/backup/mydatabase_full_backup.sql

直接复制数据目录

  1. 停止 MySQL 服务:
sudo systemctl stop mysql
  1. 复制数据目录:
sudo cp -R /var/lib/mysql /path/to/backup/
  1. 启动 MySQL 服务:
sudo systemctl start mysql

增量备份

增量备份通常依赖于 MySQL 的二进制日志(binlog),因为这些日志记录了所有对数据库进行更改的操作。通过备份这些日志文件,可以实现增量备份。

配置二进制日志

首先需要确保 MySQL 配置启用了二进制日志。在 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf)中添加或修改以下行:

[mysqld]
log-bin=mysql-bin

然后重启 MySQL 服务以应用更改:

sudo systemctl restart mysql

全量备份与增量备份的组合使用

  1. 进行一次全量备份:
mysqldump -u 用户名 -p --all-databases --flush-logs --master-data=2 > /path/to/backup/full_backup.sql
  1. 定期备份二进制日志:
    将新的二进制日志文件复制到备份目录。例如,可以使用以下脚本定期复制二进制日志:
#!/bin/bash
BINLOG_DIR="/var/lib/mysql"
BACKUP_DIR="/path/to/backup/binlogs"

cp $BINLOG_DIR/mysql-bin.* $BACKUP_DIR/

可以将该脚本添加到 cron 作业中,每天或每小时运行一次:

crontab -e

添加如下行以每小时运行一次增量备份脚本:

0 * * * * /path/to/backup/binlog_backup.sh

恢复数据

恢复全量备份

  1. 恢复全量备份文件:
mysql -u 用户名 -p < /path/to/backup/full_backup.sql

恢复增量备份

  1. 确保已应用全量备份。
  2. 应用二进制日志文件:
mysqlbinlog /path/to/backup/binlogs/mysql-bin.* | mysql -u 用户名 -p