用脚本对mysql5.7 做xtrabackup的物理备份, 一直报下面的错误。搞了半天搞不定。 关键是另外一个服务器同样的环境就可以执行。哪位大神帮忙看下 报错如下: [root@localhost bin]# /bin/bash -x backup.sh >> /opt/xtrabackup/backup/log/exec.log ++ dirname backup.sh + program_dir=./.. + conf_file=./../conf/backup.conf ++ sed '/^user=/!d;s/.*=//' ./../conf/backup.conf + user=backup ++ sed '/^password=/!d;s/.*=//' ./../conf/backup.conf + password=qwerasdf_@ ++ sed '/^backup_dir=/!d;s/.*=//' ./../conf/backup.conf + backup_dir=/home/backups ++ sed '/^gzip_dir=/!d;s/.*=//' ./../conf/backup.conf + gzip_dir=/home/backups/backup_gzip ++ sed '/^xtrabackup_bin=/!d;s/.*=//' ./../conf/backup.conf + xtrabackup_bin=/opt/xtrabackup/bin/xtrabackup ++ sed '/^full_backup_prefix=/!d;s/.*=//' ./../conf/backup.conf + full_backup_prefix=full ++ sed '/^increment_prefix=/!d;s/.*=//' ./../conf/backup.conf + increment_prefix=incr ++ sed '/^error_log=/!d;s/.*=//' ./../conf/backup.conf + error_log=./../var/mysql_increment_hot_backup.err ++ sed '/^index_file=/!d;s/.*=//' ./../conf/backup.conf + index_file=./../var/mysql_increment_hot_backup.index ++ date +%F + backup_date=2023-05-30 ++ date +%H-%M-%S + backup_time=15-34-49 ++ date +%u + backup_week_day=2 + log_dir=./../log/backup + var_dir=./../var + mkdir -p /home/backups + mkdir -p ./../log/backup + mkdir -p ./../var + mkdir -p /home/backups/backup_gzip + main + test_conf_file + '[' '!' -n backup ']' + '[' '!' -n qwerasdf_@ ']' + '[' '!' -n /home/backups ']' + '[' '!' -n /home/backups/backup_gzip ']' + '[' '!' -n full ']' + '[' '!' -n incr ']' + '[' '!' -n ./../var/mysql_increment_hot_backup.err ']' + '[' '!' -n ./../var/mysql_increment_hot_backup.index ']' + get_backup_type + backup_type=0 ++ date +%H + '[' 1 -eq 15 ']' + backup_type=1 + touch ./../var/mysql_increment_hot_backup.index ++ cat ./../var/mysql_increment_hot_backup.index + '[' '!' -n '{week_day:4, dir:full_2023-05-25_01-06-01_4, type:full, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_02-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_03-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_04-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_05-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_06-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_07-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_08-06-02_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_09-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_10-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_11-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_12-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_13-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_14-06-01_4, type:incr, date:2023-05-25} {week_day:4, dir:incr_2023-05-25_15-06-01_4, type:incr, date:2023-05-25}' ']' + return 1 + backup_type=1 + case $backup_type in + increment_backup + backup_folder=incr_2023-05-30_15-34-49_2 ++ sed -n '$p' ./../var/mysql_increment_hot_backup.index ++ awk -F '[, {}]*' '{print $3}' ++ awk -F : '{print $2}' + incr_base_folder=incr_2023-05-25_15-06-01_4 + mkdir -p /home/backups/incr_2023-05-30_15-34-49_2 + /opt/xtrabackup/bin/xtrabackup --user=backup --password=qwerasdf_@ --backup --target-dir=/home/backups/incr_2023-05-30_15-34-49_2 --incremental-basedir=/home/backups/incr_2023-05-25_15-06-01_4 + return 1 + backup_ok=1 + '[' 1 -eq 0 ']' + rm -rf /home/backups/incr_2023-05-30_15-34-49_2 + logging_backup_err incr + echo '{week_day:2, dir:incr_2023-05-30_15-34-49_2, type:incr, date:2023-05-30}' mysql用来备份的账号 root@mysqldb 15:33: [(none)]> SHOW GRANTS FOR 'backup'@'localhost'; +----------------------------------------------------------------------------------------------------------+ | Grants for backup@localhost | +----------------------------------------------------------------------------------------------------------+ | GRANT SELECT, RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW ON *.* TO 'backup'@'localhost' | +----------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 备份脚本 [root@localhost bin]# cat backup.sh #!/bin/bash # 获得程序路径名 program_dir=`dirname $0`/.. # 读取配置文件中的所有变量值, 设置为全局变量 # 配置文件 conf_file="$program_dir/conf/backup.conf" # mysql 用户 user=`sed '/^user=/!d;s/.*=//' $conf_file` # mysql 密码 password=`sed '/^password=/!d;s/.*=//' $conf_file` # mysql 备份目录 backup_dir=`sed '/^backup_dir=/!d;s/.*=//' $conf_file` # mysql 备份压缩打包目录 gzip_dir=`sed '/^gzip_dir=/!d;s/.*=//' $conf_file` # percona-xtrabackup命令xtrabackup路径 xtrabackup_bin=`sed '/^xtrabackup_bin=/!d;s/.*=//' $conf_file` # mysql 全备前缀标识 full_backup_prefix=`sed '/^full_backup_prefix=/!d;s/.*=//' $conf_file` # mysql 增量备前缀标识 increment_prefix=`sed '/^increment_prefix=/!d;s/.*=//' $conf_file` # 备份错误日志文件 error_log=$program_dir/var/`sed '/^error_log=/!d;s/.*=//' $conf_file` # 备份索引文件 index_file=$program_dir/var/`sed '/^index_file=/!d;s/.*=//' $conf_file` # 备份日期 backup_date=`date +%F` # 备份时间 backup_time=`date +%H-%M-%S` # 备份时的周几 backup_week_day=`date +%u` # 创建相关目录 log_dir=$program_dir/log/backup var_dir=$program_dir/var mkdir -p $backup_dir mkdir -p $log_dir mkdir -p $var_dir mkdir -p $gzip_dir # 全量备份 function full_backup() { backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day} mkdir -p $backup_dir/$backup_folder $xtrabackup_bin \ --user=$user \ --password=$password \ --backup \ --target-dir=$backup_dir/$backup_folder > $log_dir/${backup_folder}.log 2>&1 return $? } # 增量备份 function increment_backup() { backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day} incr_base_folder=`sed -n '$p' $index_file | \ awk -F '[, {}]*' '{print $3}' | \ awk -F ':' '{print $2}'` mkdir -p $backup_dir/$backup_folder $xtrabackup_bin \ --user=$user \ --password=$password \ --backup \ --target-dir=$backup_dir/$backup_folder \ --incremental-basedir=$backup_dir/$incr_base_folder > $log_dir/${backup_folder}.log 2>&1 return $? } # 删除之前的备份(一般在全备完成后使用) function delete_before_backup() { cat $index_file | awk -F '[, {}]*' '{print $3}' | \ awk -v backup_dir=$backup_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", backup_dir, $2)}}' | \ /bin/bash cat $index_file | awk -F '[, {}]*' '{print $3}' | \ awk -v gzip_dir=$gzip_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", gzip_dir, $2)}}' | \ /bin/bash cat $index_file | awk -F '[, {}]*' '{print $3}' | \ awk -v log_dir=$log_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s.log\n", log_dir, $2)}}' | \ /bin/bash } # 备份索引文件 function backup_index_file() { cp $index_file ${index_file}_$(date -d "1 day ago" +%F) } # 备份索引文件 function send_index_file_to_remote() { ./expect_scp 192.168.3.1118 root k8s90-=uiop ${index_file} /home/backup/index/ echo 'send index file ok' } # 添加索引, 索引记录了当前最新的备份 function append_index_to_file() { echo "{week_day: $backup_week_day, \ dir: ${1}_${backup_date}_${backup_time}_${backup_week_day}, \ type: ${1}, \ date: ${backup_date}}" >> $index_file } # 记录错误消息到文件 function logging_backup_err() { echo "{week_day: $backup_week_day, \ dir: ${1}_${backup_date}_${backup_time}_${backup_week_day}, \ type: ${1}, \ date: ${backup_date}}" >> $error_log } # 清空索引 function purge_index_from_file() { > $index_file } # 清空错误日志信息 function purge_err_log() { > $error_log } # 打包备份 function tar_backup_file() { cd $backup_dir tar -jcf ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 \ ${1}_${backup_date}_${backup_time}_${backup_week_day} cd - > /dev/null #rm -rf ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day} } # 发送备份到远程 function send_backup_to_remote() { ./expect_scp 192.168.3.118 root k8s90-=uiop ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 /home/backup/ echo "send $1 remote ok" } # 判断是应该全备还是增量备份 # 0:full, 1:incr function get_backup_type() { backup_type=0 if [ 1 -eq `date +%H` ]; then backup_type=0 else backup_type=1 fi touch $index_file if [ ! -n "`cat $index_file`" ]; then backup_type=0 fi return $backup_type } # 测试配置文件正确性 function test_conf_file() { # 判断每个变量是否在配置文件中有配置,没有则退出程序 if [ ! -n "$user" ]; then echo 'fail: configure file user not set'; exit 2; fi if [ ! -n "$password" ]; then echo 'fail: configure file password not set'; exit 2; fi if [ ! -n "$backup_dir" ]; then echo 'fail: configure file backup_dir not set'; exit 2; fi if [ ! -n "$gzip_dir" ]; then echo 'fail: configure file backup_dir not set'; exit 2; fi if [ ! -n "$full_backup_prefix" ]; then echo 'fail: configure file full_backup_prefix not set'; exit 2; fi if [ ! -n "$increment_prefix" ]; then echo 'fail: configure file increment_prefix not set'; exit 2; fi if [ ! -n "$error_log" ]; then echo 'fail: configure file error_log not set'; exit 2; fi if [ ! -n "$index_file" ]; then echo 'fail: configure file index_file not set'; exit 2; fi } # 执行 function main() { # 检测配置文件值 test_conf_file # 判断是执行全备还是增量备份 get_backup_type backup_type=$? case $backup_type in 0 ) # 全量备份 full_backup backup_ok=$? if [ 0 -eq "$backup_ok" ]; then # 全备成功 # 打包最新备份 tar_backup_file $full_backup_prefix # # 将tar备份发送到远程 send_backup_to_remote $full_backup_prefix # 备份索引文件 backup_index_file # 清除之前的备份 delete_before_backup # 清除索引文件 purge_index_from_file # 添加索引, 索引记录了当前最新的备份 append_index_to_file $full_backup_prefix # 发送索引文件到远程 send_index_file_to_remote else # 全备失败 # 删除备份目录 rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day} # 记录错误日志 logging_backup_err $full_backup_prefix fi ;; 1 ) # 增量备份 increment_backup backup_ok=$? if [ "$backup_ok" -eq 0 ]; then # 增量备份成功 # 打包最新备份 tar_backup_file $increment_prefix # # 将tar备份发送到远程 send_backup_to_remote $increment_prefix # 添加索引, 索引记录了当前最新的备份 append_index_to_file $increment_prefix # # 发送索引文件到远程 send_index_file_to_remote else # 增量备份失败 # 删除备份目录 rm -rf ${backup_dir}/${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day} # 记录错误日志 logging_backup_err $increment_prefix fi ;; esac } main 配置参数 [root@localhost bin]# cat /opt/xtrabackup/backup/conf/backup.conf # mysql 用户名 user=backup # mysql 密码 password=qwerasdf_@ # 备份路径 backup_dir=/home/backups # 备份压缩打包目录 gzip_dir=/home/backups/backup_gzip # innobackupex 命令路径 xtrabackup_bin=/opt/xtrabackup/bin/xtrabackup # 全量备信息名称 前缀 full_backup_prefix=full # 增量备信息名称 前缀 increment_prefix=incr # 错误日志文件(根据此文件知道备份是否成功) # format: # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30} error_log=mysql_increment_hot_backup.err # 索引文件 # format: # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30} index_file=mysql_increment_hot_backup.index |
天涯083
2023-5-31 09:34:38
| ||
天涯083
2023-5-31 09:35:47
| ||
ShowMaker
2023-5-31 16:34:44
| ||
天涯083
2023-5-31 16:40:44
| ||
天涯083
2023-5-31 16:43:06
| ||
ShowMaker
2023-5-31 16:54:04
| ||
天涯083
2023-6-1 10:06:04
| ||
天涯083
2023-6-1 10:06:41
| ||
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com