分类: NOSQL
2017-11-23 14:57:43
【摘要】
目前IT运维工作中,常用备份软件均能够支持针对常用的数据库如Oracle和MS SQL的备份,但是对于运维人员,针对MySQL尚没有很好的方案。本文主要介绍MySQL本地备份方案,通过mysqldump实现本地全备和增备。管理员可在此本地备份的基础上,再通过备份软件备份本地备份数据。
【正文】
1.在上述目录下创建全备脚本
vim Full_Backup.sh
#!/bin/bash
# 备份文件存放路径
FileDir=/DB_Backup
# 全备文件命名
fullbackup=$FileDir/dbfull-`date +%F`.sql
# MySQL安装路径
basedir=/usr/local/mysql
# 配置MySQL连接信息
# USER:MySQL用户,建议用root账号
# PASSWORD:账号对应的密码
# HOST:主机IP地址,特别是远程备份时必须写备份目标的IP地址
# PORT:MySQL服务的端口,默认3306,如果为3306则可以不写
#$HOST=
#$PORT=
$PASSWORD=password
$USER=root
# MySQL连接命令
Command_mysqldump=$basedir/bin/mysqldump -u$USER -p$PASSWORD
# 用mysqldump执行全备
# --all-database:备所有的数据库
# --master-data:记录CHANGE MASTER TO语句,2表示把这一行注释
# --flush-logs:锁定表之后执行flush logs命令,切换binlog文件
# --single-transaction:单个事物,保证备份时数据处于一致状态
# --events --ignore-table=mysql.events:如需备份事件表,加上该参数
$Command_mysqldump --all-databases --master-data=2 --flush-logs --single-transaction --default-character-set=utf8 > $fullbackup
# 创建一个全备文件存放位置的语句,增量备份时需要用到
tail -n 1 $fullbackup >> $FileDir/weeklybackup.time
# 清理前30天的备份文件
find $FileDir -mtime +30 -name "*.sql" -exec rm -rf {} \;
3.在上述创建的目录下创建增备脚本
vim Incre_Backup.sh
#!/bin/bash
# 备份文件存放路径
FileDir=/DB_Backup
# 备份文件命名
increbackup=$FileDir/dbincre-`date +%F%H%M%S`.sql
#MySQL安装路径
basedir=/usr/local/mysql
# 配置MySQL连接信息
# USER:MySQL用户,建议用root账号
# PASSWORD:账号对应的密码
# HOST:主机IP地址,特别是远程备份时必须写备份目标的IP地址
# PORT:MySQL服务的端口,默认3306,如果为3306则可以不写
#$HOST=
#$PORT=3306
$PASSWORD=password
$USER=root
# MySQL连接命令
Command_mysql=$basedir/bin/mysqldump -u$USER -p$PASSWORD
# 获取当前数据库使用的二进制文件
binlogfile=`$Command_mysql -e 'show master status' | grep 'bin' | awk '{print $1}'`
# 获取binlog日志文件路径
binlogdir=`$Command_mysql -e 'show variables like "datadir"' | grep datadir | awk '{print $2}'`
# 从最近一次全备文件中获取全备终止time
time=`cat $FileDir/weeklybackup.time | awk '{printf "%s %s\n",$5,$6}'`
# 通过mysqlbinlog对数据库进行差异备份
# --start-datetime 指明增量备份的起始时间,其值为全备的终止时间
/usr/local/mysql/bin/mysqlbinlog --start-datetime="$time" $binlogdir$binlogfile > $increbackup
# 清理前30天的备份文件
find $FileDir -mtime +30 -name "*.sql" -exec rm -rf {} \;
4. 修改备份脚本执行权限
chmod 755 /DB_Backup/Full_Backup.sh /DB_Backup/Incre_Backup.sh
制定计划任务定时执行脚本
# 执行全备脚本
00 22 * * 5 /bin/bash /DB_Backup/Full_Backup.sh
# 执行增备脚本
00 22 * * 1,2,3,4,6,7 /bin/bash /DB_Backup/Incre_Backup.sh