对于数据库的备份和恢复是DBA的主要责任,而如何才能有效的备份数据库,并且能在数据库崩溃的时候及时恢复便变的相当重要了,如果在Linux上纯手动的备份数据库,将会带来很大的麻烦,所有我就写了个脚本,把脚本加入到定期任务列表中,定期执行数据备份,这就变得更加容易管理数据库了,我这里是一个简单的小脚本,当然在实际引用中还要修改,比如添加用户和密码,可以根据自己的需要在做修改。
下面简单的介绍一下这个脚本,这个脚本执行的时候有四个参数:
/PATH/mysqlbak.sh -f //完全备份,这个可以根据自己数据库变动的情况设置多长时间执行一次,加入一个月执行一次吧!
/PATH/mysqlbak.sh -d //这个是从最后一次完全备份到目前的时间的一次差异备份,这样就减少了备份数据库的时间。
/PATH/mysqlbak.sh -i //这个参数可以实现增量备份,也就是上一次备份和这次备份之间数据库的变动,这个时间可以短一点,这样可以在数据库崩溃的时候减少损失,可以一个小时一次。
/PATH/mysqlbak.sh -h //这个是帮助信息
把这些都加入到定期执行计划中,就可以实现自动执行脚本了,不用管理员手动进行备份了。
#!/bin/bash
#
function HELPTXT {
echo "/PATH/mysqlbak.sh -f: You can backup all databases" echo "/PATH/mysqlbak.sh -i: Just backup the exter change from the last backup" echo "/PATH/mysqlbak.sh -d: Backup from the last full-backup to the current time" }
DATE=`date "+%F-%H-%M-%S"`
mysql -e "FLUSH TABLES WITH READ LOCK;" mysql -e "SHOW MASTER STATUS;">/dev/null startfile=/tmp/startposition exterfile=/tmp/exterposition
while getopts "fdih" OPTS;do
case $OPTS in f) mysqldump --all-databases >/mybackup/db.$DATE STARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$startfile` ESTARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$exterfile` cd /mybackup tar -cjf /root/bakmysql/db.$DATE.tar.gz2 db.$DATE >/dev/null ;; d) mysql -e "FLUSH TABLES WITH READ LOCK;" mysql -e "SHOW MASTER STATUS;">/dev/null FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'` STARTPOSITION=`cat $startfile` ENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'` mysqlbinlog --start-position $STARTPOSITION --stop-position $ENDPOSITION /mydata/data/$FILE >/mybackup/incre.$DATE cd /mybackup tar -cjf /root/bakmysql/incre.$DATE.tar.gz2 incre.$DATE >/dev/null ;; i) mysql -e "FLUSH TABLES WITH READ LOCK;" mysql -e "SHOW MASTER STATUS;">/dev/null FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'` EENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}' >>$exterfile` ESTARTPOSITION=`tail -n 2 $exterfile | head -n 1` Exendposition=`tail -n 1 $exterfile` mysqlbinlog --start-position $ESTARTPOSITION --stop-position $Exendposition /mydata/data/$FILE >/mybackup/exter.$DATE cd /mybackup tar -cjf /root/bakmysql/exter.$DATE.tar.gz2 exter.$DATE >/dev/null ;; h) HELPTXT ;; esac done
在crontab -e中添加任务计划,就能实现自动备份数据库了!!
(责任编辑:IT) |