mysql数据库备份(完整+增量)

  1. main.yml
[admin@ansible-001 mysql-backup]$cat  tasks/main.yml 
- name: Copy Backup Scripts
  copy:
    src: "{{ item }}"
    dest: /home/app/shell/
    owner: root
    group: root
    mode: 0600
  loop:
    - Mysql_FullBak.sh
    - Mysql_DailyBak.sh

- name: Touch DB Passwd.txt
  copy:
    content: 'Sdaa@12345'
    dest: /home/app/shell/.pw.txt
    owner: root
    group: root
    mode: 0600

- name: Add Cron Mysql Full Backup
  cron: 
    name: Mysql Full Backup
    weekday: "7"
    minute: "0"
    hour: "2"
    job: sh /home/app/shell/Mysql_FullBak.sh
    user: root
    
- name: Add Cron Mysql Daily Backup
  cron:
    name: Mysql Daily Backup
    weekday: "1-6"
    minute: "0"
    hour: "3"
    job: sh /home/app/shell/Mysql_DailyBak.sh
    user: root
  1. Mysql_FullBak.sh
[admin@ansible-001 files]$cat Mysql_FullBak.sh
#!/bin/bash

DBUser="root"
DBPass=$(cat /home/app/shell/.pw.txt)
FileDate=$(date +%Y%m%d)
BakDir=/Backup
FileName=${FileDate}.sql
LogFile=${BakDir}/bak.log

if [ ! -d ${BakDir} ];then
  mkdir -p ${BakDir}
fi

Begin=$(date +"%Y-%m-%d %H:%M:%S")

/home/app/mysql/bin/mysqldump -u${DBUser} -p${DBPass} --quick --events --routines --triggers --flush-logs --master-data=2 --all-databases | pigz -p 8 > ${BakDir}/${FileName} && BakState=$(echo OK) || BakState=$(echo Failure) 

End=$(date +"%Y-%m-%d %H:%M:%S")

cat >> ${LogFile} << EOF
--------xxcar mysql full bakcup --------------
Start Time:${Begin}
End   Time: ${End}
Back State: ${BakState}

EOF

3.Mysql_DailyBak.sh

[zhaowei@ansible-001 files]$cat Mysql_DailyBak.sh
#!/bin/bash

DBUser="usopp"
DBPass=$(cat /home/app/shell/.pw.txt)
MysqlDir=/home/app/mysql
DataDir=${MysqlDir}/data
BinDir=${MysqlDir}/bin
BinIndex=${DataDir}/mysql-bin.index
BakDir=/Backup
BakDirDaily=${BakDir}/daily
LogFile=${BakDir}/bak.log

${BinDir}/mysqladmin -u${DBUser} -p${DBPass} flush-logs
Counter=$(wc -l ${BinIndex} | awk '{print $1}')
NextNum=0
Incre=()

if [ ! -d ${BakDirDaily} ];then
  mkdir ${BakDirDaily}
fi
   

for i in `cat ${BinIndex}`
do 
  base=`basename $i`
  NextNum=`expr $NextNum + 1`
  if [ $NextNum -lt $Counter ];then
    dest=${BakDirDaily}/$base
    if ( ! test -e $dest );then
       cp ${DataDir}/$base ${BakDirDaily}
       Incre[${#Incre[@]}]=$base
    fi
   fi
done

echo -e "\n---xxcar mysql Incremental Backup ---" >> $LogFile
for i in ${Incre[@]}
do
 echo $i >> $LogFile
done
echo  backup time:`date +"%Y-%m-%d %H:%M:%S"`  >> $LogFile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库增量备份是一种备份策略,只备份自上次全量备份以来的数据变化。下面是一种常见的实现方法: 1. 首先,执行一次全量备份,将整个数据库备份到一个文件中。 ``` mysqldump -u <username> -p<password> --single-transaction --flush-logs --master-data=2 --all-databases > full_backup.sql ``` 这个命令会生成一个名为 `full_backup.sql` 的文件,其中包含了所有数据库的数据和结构。 2. 然后,将MySQL日志文件复制到备份目录中。MySQL的日志文件包括二进制日志文件(binary log)和错误日志文件(error log),其中二进制日志文件记录了所有数据更改的详细信息。 3. 每次进行增量备份时,首先确定上次备份结束后的二进制日志文件名和位置。可以通过查询MySQL的变量 `show master status` 获取到当前正在使用的二进制日志文件名和位置。 4. 将上次备份之后的新的二进制日志文件拷贝到备份目录中。如果有多个新的二进制日志文件,需要全部拷贝。 5. 使用 `mysqlbinlog` 工具解析这些新的二进制日志文件,并将其中的SQL语句保存到一个新的文件中。 ``` mysqlbinlog <binary_log_file> > incremental_backup.sql ``` 这个命令会生成一个名为 `incremental_backup.sql` 的文件,其中包含了所有新的数据变更操作语句。 6. 将全量备份文件和增量备份文件按需恢复到目标MySQL服务器上。可以使用 `mysql` 命令执行这些SQL文件。 ``` mysql -u <username> -p<password> < full_backup.sql mysql -u <username> -p<password> < incremental_backup.sql ``` 通过以上步骤,你可以实现MySQL数据库增量备份。每次备份只需要备份变化的数据,可以减少备份时间和存储空间的占用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值