问题描述:
升级配置文件配置错误,kafka地址指向的是测试环境,同步脚本拉取测试环境数据把线上环境的topic和flume相关信息删除。系统没有全备份但是二进制日志是全的;
问题定位:
1、mysql没有general log
2、查看前一个binlog文件,有删除语句
3、 查看是否为程序删除,找到对应语句,通过日志关键字在程序中查找
grep /runtime/log/201812/10.log "DELETE FROM `rtime_flume_info`"
分析代码和日志url地址,确定为同步时接口地址配置出错,查看当前配置文件,果然配置出错,修改为正确的配置。
解决步骤:
1、全量备份当前数据库状态,用于修改出错恢复到当前状态。
mysqldump -uroot -p dbname > dbname_20181211.sql
2、查看binlog文件是否完整
mysqlbinlog --no-defaults mysql-bin.000001 > 01.sql
可以找到create db 语句
mysqlbinlog --no-defaults mysql-bin.000010 > 10.sql
mysql-bin.000010 为最后的一个binlog文件,找到删除操作对应的pos位置为 51313959,所以通过执行一遍binlog文件可以恢复到删除操作之前的数据库状态
3、在测试环境起一个mysql服务
yum install mysql-community-server
yum install mysql-community-client
修改mysql配置文件,开启binlog
[mysqld] 下面增加两行
log-bin=mysql-bin
binlog_format=MIXED
启动mysql
service mysqld start
将线上环境的binlog文件拷贝到测试环境(测试环境和线上环境网络不通 否则也可不用拷贝过去)
mysqlbinlog -d dbname --stop-position=51313959 mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.000004 mysql-bin.000005 mysql-bin.000006 mysql-bin.000007 mysql-bin.000008 mysql-bin.000009 mysql-bin.000010 | mysql -uroot -p
4、查看测试环境被删除的topic和flume是否恢复
mysqldump -uroot -p db_yuntu.tb1 > tb1.sql
mysqldump -uroot -p db_yuntu.tb2 > tb2.sql
将sql文件拷贝到线上环境
truncate table tb1
truncate table tb2
source tb1.sql
source tb2.sql
优化:
1、优化 升级需要停止同步脚本 配置文件要仔细检查
2、增加定期全量备份和增量备份 mysqldump、xtrabackup,xtrabackup恢复性能更好
3、binlog 设置优化
my.cnf 中增加
expire_logs_days = 7
max_binlog_size = 1G
[mysqldump]:
全量备份脚本:
#!/bin/bash
#use mysqldump to fully backup mysql data
bakdir=/var/backup/mysql/full
logfile=/var/backup/mysql/full/bak.log
date=`date +%Y%m%d`
begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd ${bakdir}
dumpfile=${date}.sql
tgzdumpfile=${dumpfile}.tgz
#--all-databases 备份所有库
#--lock-all-tables 为所有表加锁
#--routinge 存储过程与函数
#--triggers 触发器
#--events 记录事件
#--master-data=2 在备份文件记录当前二进制日志的位置,并且为注释的,1是不注释的,在主从复制中才有意义
#--flush-logs 日志滚动一次
mysqldump -uroot -p123456 --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs > ${dumpfile}
tar -czvf ${tgzdumpfile} ${dumpfile}
rm ${dumpfile}
end=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 开始: ${begin} 结束: ${end}" "${tgzdumpfile} 完成 >> ${logfile}
增量备份脚本:
#!/bin/bash
#mysql binlog 增量备份
bakdir=/var/backup/mysql/daily
bindir=/var/lib/mysql
logfile=/var/backup/mysql/daily/bak.log
binfile=/var/lib/mysql/mysql-bin.index
mysqladmin -uroot -p123456 flush-logs
count=`wc -l ${binfile} | awk '{print $1}'`
next=0
for file in `cat ${binfile}`
do
basename=`basename ${file}`
next=`expr ${next} + 1`
if [ ${next} -eq ${count} ]
then
echo ${basename} skip! >> ${logfile}
else
dest=${bakdir}/${basename}
if (test -e ${dest})
then
echo ${basename} exist! >> ${logfile}
else
cp ${bindir}/${basename} ${bakdir}/
echo ${basename} copying >> ${logfile}
fi
fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` ${next} backup 完成 >> ${logfile}
[xtrabackup]
http://www.cnblogs.com/zhoujinyi/p/4088866.html
需要依赖 perl-dbd-mysql
perl-DBD-MYSQL 下载地址
http://rpm.pbone.net/index.php3/stat/4/idpl/26645737/dir/centos_7com/perl-DBD-MySQL-4.023-5.el7.x86_64.rpm.html