前言:
目前小伙伴们对“mysql 大数据量备份”大约比较注意,同学们都想要分析一些“mysql 大数据量备份”的相关资讯。那么小编在网上网罗了一些关于“mysql 大数据量备份””的相关知识,希望姐妹们能喜欢,你们一起来学习一下吧!命令行输入3个参数:
参数1:要恢复的全量备份文件名
参数2:要恢复到的增量备份文件名
参数3(若数据库已存在,则再输入第三个参数:yes)
下面是shell脚本,已测试的demo
#!/bin/bash# 判断是否输入参数2个必要参数if [ $# -ne 2 -a $# -ne 3 ]; then echo -e "\033[31m 如需恢复数据请输入脚本加至少2个参数,即: sh $0 参数1:要恢复的全量备份文件名 参数2:要恢复到的增量备份文件名,(若数据库已存在,则再输入第三个参数:yes) \033[0m" echo -e "\033[31m 示例1:recover_data_from_fullinc_tj_test.sh test_backdb-0.sql.tar.gz mysql-bin.000100.tar.gz \033[0m" echo -e "\033[31m 示例2:recover_data_from_fullinc_tj_test.sh test_backdb-0.sql.tar.gz mysql-bin.000100.tar.gz yes \033[0m" exit -1fiecho "参数1:$1" echo "参数2:$2" echo "参数3:$3"#参数1if [ x"$1" = x ]; then #参数1 不存在 echo -e "\033[31m 缺少参数1,请输入参数 \033[0m" exit -2fi#参数2if [ x"$2" = x ]; then #参数2 不存在 echo -e "\033[31m 缺少参数2,请输入参数 \033[0m" exit -3fi#获取参数1 全量备份文件的名称ql_filename=$1#获取参数2 增量日志备份文件的名称zlrz_end_filename=$2#获取参数3 数据库存在,需要先删除数据库,再进行数据恢复flag_do=$3# 设置mysql的登录用户名和密码(根据实际情况填写)mysql_user="username"mysql_password="xxxxxx"mysql_host="127.0.0.1"mysql_port="3306"db_name="test"#恢复数据过程日志文件logFile=/data2/mysql_recovery_logs/bak.log# 判断mysql实例是否正常运行mysql_ps=`ps -ef |grep mysql |wc -l`mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo -e "\033[31m ERROR: MySQL is not running! please start the MySQL service first! \033[0m" exit -4else echo "MySQL is runing!"fi# 查看数据库是否存在mysql -u$mysql_user -p$mysql_password -h$mysql_host -e "use $db_name" 2>/dev/nullflag=`echo $?`if [ $flag -eq 0 -a x"$flag_do" != xyes ];then echo -e "\033[31m 数据库:$db_name,已存在,确定要使用该脚本进行恢复,则重新执行脚本并添加参数3:yes \033[0m" exit -5elif [ $flag -eq 0 -a x"$flag_do" = xyes ];then echo "now start to drop database $db_name" mysql -u$mysql_user -p$mysql_password -h$mysql_host -e "drop database $db_name" 2>/dev/null if [ $? -ne 0 ];then echo -e "\033[31m drop database $db_name fail,请手动删除数据库$db_name \033[0m" exit -55 fifi#nas全量数据备份目录qlbackupDir=/mnt/naswxgzh/mysql_bak#nas增量日志备份目录backupDir=/mnt/naswxgzh/mysqlbin_bak#获取参数1 全量备份文件的名称ql_filename=$1#获取参数2 增量日志备份文件的名称zlrz_end_filename=$2#全量备份文件的全目录+文件名ql_dir_filename=$qlbackupDir/$ql_filename#检测全量备份文件是否存在if [ ! -f $ql_dir_filename ]; then echo -e "\033[31m $ql_dir_filename 文件不存在,请核实! \033[0m" exit -6fi#zlrz备份文件的全目录+文件名zl_end_dir_filename=$backupDir/$zlrz_end_filename#检测zlrz备份文件是否存在if [ ! -f $zl_end_dir_filename ]; then echo -e "\033[31m $zl_end_dir_filename 文件不存在,请核实! \033[0m" exit -7fi#获取全量备份文件的最后修改时间-时间戳ql_modify_timestamp=`stat -c %Y $ql_dir_filename`#格式化时间戳为日期时间格式ql_modify_format=`date '+%Y-%m-%d %H:%M:%S' -d @$ql_modify_timestamp`#获取增量备份文件的最后修改时间-时间戳zlrz_modify_timestamp=`stat -c %Y $zl_end_dir_filename`#echo $zlrz_modify_timestamp#判断时间范围是否有效if [ $ql_modify_timestamp -ge $zlrz_modify_timestamp_after ]; then #不存在 可以恢复的备份日志文件 echo -e "\033[31m 脚本参数不合理,“参数2-增量日志备份文件的生成时间”要大于“参数1-全量备份文件的生成时间”,请核实参数! \033[0m" exit -8fi#时间延后10分钟zlrz_modify_timestamp_after=`expr $zlrz_modify_timestamp + 600` #格式化时间戳为日期时间格式zlrz_modify_format=`date '+%Y-%m-%d %H:%M:%S' -d @$zlrz_modify_timestamp_after`#echo "zlrz_modify_format:$zlrz_modify_format"#备份增量日志文件,开始时间zlrz_begin_filename_time=$ql_modify_format#echo "zlrz_begin_filename_time:$zlrz_begin_filename_time"#备份增量日志文件,结束时间zlrz_end_filename_time=$zlrz_modify_format#echo "zlrz_end_filename_time:$zlrz_end_filename_time"#进入nas增量日志备份目录cd $backupDir#查找这个时间范围内,增量日志备份文件zlrz_files=`find ./ -maxdepth 1 -name "mysql-bin.*.tar.gz" -type f -newermt "$zlrz_begin_filename_time" ! -newermt "$zlrz_end_filename_time" | sort`echo ${zlrz_files[*]}#所有增量日志文件zlrz_files_all=${zlrz_files[*]}now_date=`date +%Y%m%d%H%M%S`#恢复数据——全量备份文件解压后存放目录fixed_ql=/data2/mysql_recovery#恢复数据-增量备份文件解压后临时存放目录fixed_zlrz=/data2/mysqlbin_recovery#判断增量日志临时恢复目录是否存在if [ ! -d $fixed_zlrz/$now_date ]; then mkdir -p $fixed_zlrz/$now_datefi#遍历增量日志备份文件,解压到临时目录--/data2/mysqlbin_recoveryfor zlrz_file in $zlrz_files_all;do #解压日志备份文件到-临时目录 tar -zxvf $zlrz_file -C $fixed_zlrz/$now_date if [ $? -eq 0 ]; then echo "解压文件:$zlrz_file到$fixed_zlrz/$now_date目录,成功!" else echo -e "\033[31m 解压文件:$zlrz_file到$fixed_zlrz/$now_date目录,失败! \033[0m" exit -9 fidone#解压全量备份文件到-临时目录--/data2/mysql_recoveryif [ ! -d $fixed_zlrz ]; then mkdir -p $fixed_zlrzfitar -zxvf $ql_dir_filename -C $fixed_qlif [ $? -eq 0 ]; then echo "解压文件:$ql_dir_filename到$fixed_ql目录,成功!"else echo -e "\033[31m 解压文件:$ql_dir_filename到$fixed_ql目录,失败! \033[0m" exit -10fi#全量备份文件解压后文件名ql_name=${ql_filename/.tar.gz/}#恢复全量数据mysql -u$mysql_user -p$mysql_password -h$mysql_host -P$mysql_port < $fixed_ql/$ql_name 2>/dev/nullflag=`echo $?`#全量数据恢复成功if [ $flag == "0" ];then echo "ql data:$fixed_ql/$ql_name,recover success!" echo ql data:$fixed_ql/$ql_name,recover success! >> $logFile cd $fixed_zlrz/$now_date #当前目录下遍历增量日志文件,并恢复增量数据 for file_item in ./*;do if [ -f $file_item ]; then mysqlbinlog $file_item | mysql -u$mysql_user -p$mysql_password -h$mysql_host -P$mysql_port 2>/dev/null if [ $? -eq 0 ]; then echo "zlrz data:$file_item,recover success!" echo zlrz data:$file_item,recover success! >> $logFile else echo -e "\033[31m zlrz data:$file_item,recover fail! \033[0m" echo zlrz data:$file_item,recover fail! >> $logFile exit -11 fi fi doneelse echo -e "\033[31m ql data:$fixed_ql/$ql_name,recover fail! \033[0m" echo ql data:$fixed_ql/$ql_name,recover fail! >> $logFile exit -12fi
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。