Mysql企业级数据备份还原

一:全量备份

使用mysqldump 每天对数据进行定点全量备份,并且删除7天前的数据
实现方法,服务器crontab 定时执行备份shell;

#!/bin/bash  
baseDir="/home/backup/";  
cd "$baseDir";  
echo "开始备份数据库";  
echo `mysqldump -h 127.0.0.1 -uroot -p123456 --default-character-set=utf8  test> test_dump_$(date +%Y%m%d_%H%M%S).sql`;
echo "备份数据库test完成";
echo `mysqldump -h 127.0.0.1 -uroot -p123456 --default-character-set=utf8  test2> test2$(date +%Y%m%d_%H%M%S).sql`;
echo "备份数据test2完成";    
oldDate=`date --date='8 day ago' +%Y%m%d`;  
#删除当前日期-8的备份  
echo `rm -rf test_dump_$oldDate*`;
echo `rm -rf test2_dump_$oldDate*`;
echo "删除$oldDate的备份成功"  

上面shell 只要每天定时执行,即可全量备份对应的数据库数据,并且删除指定天数的备份数据,完成全量备份

crontab 添加下面的代码,每天凌晨2点执行sql_back.sh

1 2 * * * sh /home/backup/sql_back.sh

二:日志备份还原

全量备份只能备份前天数据,并且一般是在凌晨完成,那对当天数据则需要用日志备份;
1:日志备份设置
找到mysql的配置文件my.conf,修改或在添加下面的配置

binlog_format=mixed //日志模式,必须调成mixed,row 模式用mysqlbinlog 还原的sql是无法直接执行恢复的!!
datadir = /www/server/data  //数据存储文件,包括bin-log
log-bin=mysql-bin  //开启log-bin 前缀名称叫mysql-bin 目录位置在上面配置
expire_logs_days=7  //设置biglog保留时间为7天
max_binlog_size  = 100M    //超过max_binlog_size或超过6小时会切换到下一序号文件

注意:binlog_format 一定要调成mixed 才能还原sql

2:还原日志
在误操作后第一时间应该停止数据库访问,并记录当前时间点,并执行下面sql使日志文件分割保存

flush logs

通过mysqlbinlog工具进行日志还原

查找mysqlbinlog 位置,然后cd 到对应位置

find / -name mysqlbinlog

根据时间点在日志文件夹把需要还原的日志备份出来,然后通过下面命令逐个恢复日志sql

/www/server/mysql/bin/mysqlbinlog -v --base64-output=decode-rows --skip-gtids=true mysql-bin.000013 --database=test_db --start-datetime=‘2016-07-20 00:00:01’ --stop-datetime=‘2016-07-24 23:59:59’ > binglog000013.sql

最后先通过整体备份的sql还原数据库,然后执行日志文件还原的sql,这里对应的时间点应该注意,把对应错误操作要去除

猜你喜欢

转载自blog.csdn.net/lqb3732842/article/details/106719206