区别
- 全量备份是指备份整个数据库的所有数据。
- 增量备份是指仅备份自上次备份以来更改的数据。
全量备份
全量备份的主要方法是使用 mysqldump
工具进行逻辑备份,或直接复制 MySQL 数据目录进行物理备份。
使用 mysqldump
进行全量备份
1
| mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
|
示例:
1
| mysqldump -u root -p mydatabase > /path/to/backup/mydatabase_full_backup.sql
|
直接复制数据目录
- 停止 MySQL 服务:
1
| sudo systemctl stop mysql
|
- 复制数据目录:
1
| sudo cp -R /var/lib/mysql /path/to/backup/
|
- 启动 MySQL 服务:
1
| sudo systemctl start mysql
|
增量备份
增量备份通常依赖于 MySQL 的二进制日志(binlog),因为这些日志记录了所有对数据库进行更改的操作。通过备份这些日志文件,可以实现增量备份。
配置二进制日志
首先需要确保 MySQL 配置启用了二进制日志。在 MySQL 配置文件(通常是 /etc/my.cnf
或 /etc/mysql/my.cnf
)中添加或修改以下行:
1 2
| [mysqld] log-bin=mysql-bin
|
然后重启 MySQL 服务以应用更改:
1
| sudo systemctl restart mysql
|
全量备份与增量备份的组合使用
- 进行一次全量备份:
1
| mysqldump -u 用户名 -p --all-databases --flush-logs --master-data=2 > /path/to/backup/full_backup.sql
|
- 定期备份二进制日志:
将新的二进制日志文件复制到备份目录。例如,可以使用以下脚本定期复制二进制日志:
1 2 3 4 5
| #!/bin/bash BINLOG_DIR="/var/lib/mysql" BACKUP_DIR="/path/to/backup/binlogs"
cp $BINLOG_DIR/mysql-bin.* $BACKUP_DIR/
|
可以将该脚本添加到 cron 作业中,每天或每小时运行一次:
添加如下行以每小时运行一次增量备份脚本:
1
| 0 * * * * /path/to/backup/binlog_backup.sh
|
恢复数据
恢复全量备份
- 恢复全量备份文件:
1
| mysql -u 用户名 -p < /path/to/backup/full_backup.sql
|
恢复增量备份
- 确保已应用全量备份。
- 应用二进制日志文件:
1
| mysqlbinlog /path/to/backup/binlogs/mysql-bin.* | mysql -u 用户名 -p
|