mysql数据库全量和增量备份,以及还原步骤。
一、完整备份
备份所有数据库
备份:
docker exec -i zabbix-mysql /usr/bin/mysql -uroot -p"xxxxxx" --single-transaction --all-databases |gzip -d < mysql.sql.gz
还原:
gzip -d < mysql.sql.gz | docker exec -i zabbix-mysql /usr/bin/mysql -uroot -p"xxxxxxx"
或者
gzip -cd mysql.sql.gz | docker exec -i zabbix-mysql /usr/bin/mysql -uroot -p"xxxxxxx"
备份指定数据库
其中wordpress加mysql database的名称。
备份:
docker exec -i zabbix-mysql /usr/bin/mysql -uroot -p"xxxxxx" wordpress |gzip -d < blog.sql.gz
还原:
gzip -d < blog.sql.gz | docker exec -i zabbix-mysql /usr/bin/mysql -uroot -p"xxxxxxx" wordpress
二、增量备份:
MySQL本身不直接支持增量备份,但你可以通过结合二进制日志(binlog)和 mysqldump
来实现增量备份。以下是一个实现增量备份的步骤:
前提条件
- 确保MySQL的二进制日志功能已启用。在MySQL配置文件(通常是
my.cnf
或my.ini
)中添加或确保以下行存在:
[mysqld]
log-bin=mysql-bin
server-id=1
- 重启MySQL服务以应用配置更改。
完整备份
首先,创建一个完整备份:
mysqldump -u username -p --all-databases --master-data=2 > full_backup.sql
这将创建一个完整的数据库备份,并在备份文件中包含二进制日志的位置。
增量备份
增量备份是基于二进制日志的。你需要定期备份二进制日志文件。以下是一个示例流程:
- 标记起点:记录当前二进制日志文件和位置。
mysql -u username -p -e 'SHOW MASTER STATUS;'
输出示例:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
- 备份二进制日志文件:
mysqladmin -u username -p flush-logs
这将刷新当前的二进制日志文件,并开始一个新的文件。你可以将旧的二进制日志文件备份到安全的位置。
- 定期备份新的二进制日志文件:定期执行
flush-logs
命令并备份生成的二进制日志文件。
还原备份
- 还原完整备份:
mysql -u username -p < full_backup.sql
- 按顺序应用二进制日志文件:
mysqlbinlog mysql-bin.000001 mysql-bin.000002 | mysql -u username -p
确保按顺序应用二进制日志文件,从完整备份时记录的位置开始。
通过这种方式,你可以实现MySQL的增量备份和还原。