跳至正文
  • 225 views
  • 1 min read

mysql全量增量备份与还原

新浪微博 豆瓣 QQ 百度贴吧 QQ空间

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 来实现增量备份。以下是一个实现增量备份的步骤:

前提条件
  1. 确保MySQL的二进制日志功能已启用。在MySQL配置文件(通常是 my.cnf 或 my.ini)中添加或确保以下行存在:
    [mysqld]
    log-bin=mysql-bin
    server-id=1
  1. 重启MySQL服务以应用配置更改。
完整备份

首先,创建一个完整备份:

mysqldump -u username -p --all-databases --master-data=2 > full_backup.sql

这将创建一个完整的数据库备份,并在备份文件中包含二进制日志的位置。

增量备份

增量备份是基于二进制日志的。你需要定期备份二进制日志文件。以下是一个示例流程:

  1. 标记起点:记录当前二进制日志文件和位置。
    mysql -u username -p -e 'SHOW MASTER STATUS;'

输出示例:

    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
  1. 备份二进制日志文件
    mysqladmin -u username -p flush-logs

这将刷新当前的二进制日志文件,并开始一个新的文件。你可以将旧的二进制日志文件备份到安全的位置。

  1. 定期备份新的二进制日志文件:定期执行 flush-logs 命令并备份生成的二进制日志文件。
还原备份
  1. 还原完整备份
    mysql -u username -p < full_backup.sql
  1. 按顺序应用二进制日志文件
    mysqlbinlog mysql-bin.000001 mysql-bin.000002 | mysql -u username -p

确保按顺序应用二进制日志文件,从完整备份时记录的位置开始。

通过这种方式,你可以实现MySQL的增量备份和还原。

发表回复

联系站长