MySQL全量备份和增量备份的脚本实现定时计划任务,以及分库备份脚本

全量备份脚本

注:有些路径可根据自己的实际情况加以修改 

[root@centos7 ~/mysqlbakup]#vim quanbei.sh 
#! /bin/bash

STORE_NAME=`date +%m%d`
STORE_DIR='/data/mysqlbackup'        #定义备份的目录
exec 1>/data/mysqlbackup/bak.log 2>&1

echo mysqlbak begin at `date`
[ ! -d $STORE_DIR ] && mkdir -p $STORE_DIR

/usr/local/mysql/bin/mysqldump -uroot -plixia@2020 --port=5934 -A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob lx_wgsj | gzip > $STORE_DIR/mysql-$STORE_NAME.sql.gz              #定义mysqldump命令路径(可用which mysqldump进行路径查询)以及账号密码等指定一系列参数值

find $STORE_DIR -mtime +7 -name '*.sql.gz' |xargs rm -f           #自动删除7天以前的备份文件
echo mysqlbak finish at `date`

 

加执行权限、执行脚本

[root@centos7 ~/mysqlbakup]#chmod +x mysqlbackup
[root@centos7 ~/mysqlbakup]#sh mysqlbackup
[root@centos7 ~/mysqlbakup]#ll
-rw-r--r--. 1 root root 140782 Aug 8 22:34 mysql-0808.sql.gz

 


解压缩并导入恢复

[root@centos7 ~/mysqlbakup]# gzip -d mysql-0808.sql.gz
[root@centos7 ~/mysqlbakup]# mysql < mysql-0808.sql

 


任务计划
每周天的凌晨1点实行备份

echo "0 1 * * 0 /data/mysqlbackup/mysqlbackup.sh" >>/var/spool/cron/root

 

 

 

增量备份脚本

vim /etc/my.cnf
在[mysqld]下添加
max_binlog_size = 1024000 //二进制日志最大1M

要进行mysql的增量备份,首先要开启二进制日志功能
默认存放在数据库目录文件下,也可以log-bin=/data/mysql自定义指定存放目录
在/etc/my.cnf文件中的[mysqld]下,添加
log-bin

 

编写脚本

提前在自己备份的目录下创建日志文件:touch /data/mysqlbackup/zengbei/b.log

[root@centos7 ~/mysqlbakup]#vim zengbei.sh 
#!/bin/bash
#MYSQL数据库增量备份脚本。
MY_USER="root"
MY_PASS="123456"
MY_HOST="192.168.239.17"
MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"
#定义备份路径、工具、二进制日志前缀、二进制日志存放路径
exec 1>/data/mysqlbackup/zengbei/b.log 2>&1 #将日志文件写进b.log 需创建touch b.log
echo mysqlbak begin at `date` #打印执行时间
BF_TIME="$(date +%Y%m%d)"
BF_DIR="/data/mysqlbackup/zengbei/bin_log.$BF_TIME"
CMD="/usr/local/mysql/bin/mysqladmin"   #根据自己的路径
QZ="bin"
LOG_DIR="/usr/local/data"
#拷贝二进制日志
[ -d $BF_DIR ] || mkdir -p $BF_DIR
$CMD $MY_CONN flush-logs
/bin/cp -p $(ls $LOG_DIR/$QZ.* | awk -v RS="" '{print $(NF-2)}') $BF_DIR

find $BF_DIR  -mtime +15 -name 'bin_log.*' |xargs rm -rf   #自动删除15天以前的备份文件

 

 

任务计划
每天的凌晨1点实行增量备份

echo "0 1 * * * /data/mysqlbackup/mysqlbackup.sh" >>/var/spool/cron/root 

 

 

 

mysql增量恢复的方法:
一般恢复:
mysqlbinlog [--no-defaults] 增量备份文件 | mysql -uroot -p密码


基于时间点的恢复:
从日志开头截止到某个时间点的恢复:
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -uroot -p密码


从某个时间点到日志结尾的恢复:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -uroot -p密码


从某个时间点到某个时间的恢复:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日 小时:分钟:秒 二进制日志 | mysql -uroot -p密码

 

基于位置的恢复:
mysqlbinlog --stop-position='操作id' 二进制日志 | mysql -uroot -p密码
mysqlbinlog --start-position='操作id' 二进制日志 | mysql -uroot -p密码

 

 

 

分库备份脚本:

两种都可以实现-直接在命令行执行

1)、for db in `mysql -e 'show databases' |grep -Ev '^(Database|information_schema|performance_schema)$'`;do mysqldump -B $db|gzip > $db`date +%F`.sql.gz;done

2)、mysql -e 'show databases' |grep -Ev '^(Database|information_schema|performance_schema)$'|sed -r 's/(.*)/mysqldump -B \1 |gzip > \/data\/\1.sql.gz/' |bash

 

 

 

如有疑问欢迎留言^^

 

posted @ 2020-08-18 15:44  N37_shiguoqing  阅读(295)  评论(0)    收藏  举报