一:全量备份
使用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 -x 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 -x 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 只要每天定时执行,即可全量备份对应的数据库数据,并且删除指定天数的备份数据,完成全量备份(这里最好用root 账号,其他账号也可以就是可能有些权限不够,根据错误信息对应给就可以)
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,这里对应的时间点应该注意,把对应错误操作要去除