canway01<em></em 阅读(37) 评论(0)

【摘要】


目前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