MySql的备份策略

手动备份数据库(全备份)

mysqldump -u用户名 -p密码 数据库名称 [表名1, 表名2] > 文件路径

--比如,将tmp数据库备份到d盘
mysqldump -uroot -proot tmp > d:\mysql\tmp.bak

-- 备份tm数据库的几张表
mysqldump -uroot -proot tmp dept,user > d:\mysql\tmp.bak

-- 使用备份文件恢复数据,在mysql控制台执行
source d:\tmp\tmp.back

增量备份

定义:mysql数据库会以二进制的形式,将用户对数据库的操作记录到问文件中;当需要恢复时,可以使用备份文件恢复数据。

注意:增量备份,会记录增删改操作,不会记录查。

主要记录了:

  1. 操作本身

  2. 操作时间

  3. position

进行增量备份、恢复

5.1 支持

1 配置 mysql.ini/cnf 文件,启用二进制备份

# 定义二进制日志存储的位置
log-bin=d:/binlog/mylog

生成的日志文件:

mylog.index: 一个索引文件,记录了有哪些增量备份文件

mylog.00000x: 多个日志文件,以 000001, 000002等结尾,该文件是个二进制文件,无法直接查看

使用mysqlbinlog查看备份文件

mysqlbinlog位于mysql bin 目录下。

mysqlbinlog 备份文件路径;

增量备份需要根据位置和时间进行备份恢复。

根据时间恢复

# 恢复指定时间开始的备份
mysqlbinlog --start-datetime='时间' binlog文件的位置 | mysql -uroot -p
# 恢复指定时间之前的备份
mysqlbinlog --stop-date='时间' binlog文件的位置 | mysql -uroot -p

根据位置恢复

mysqlbinlog --start-position='位置' binlog文件的位置 | mysql -uroot -p
mysqlbinlog --stop-position='位置' binlog文件的位置 | mysql -uroot -p

需要程序,定时将binlog文件备份到ftp服务器。

清理日志:如果每天都会产生大量的二进制日志,并且这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费。

  1. 在 mysql控制台使用reset master 命令清理日志。

  2. 增加配置(my.cnfs):-expire_logs-days 设置日志天数,过期日志将会被删除

如果每周有一次全备份,可以设置日志过期天数为7.

如果出现意外,可以先回复前备份,再恢复期间的增量备份即可。

备份推荐策略

  1. 每周一进行一次全备份

  2. 启用增量备份,过期时间设置为>7,最好大一点

  3. 如果出现数据库崩溃

    如果完全丢失:根据时间 先恢复全备份,再恢复增量备份

最后更新于