定时任务自动化热备份mysql数据库实现自动化运维,脚本如下:
说明:
脚本里举例数据库为database_1、database_2、database_3、database_n
最终保存好的格式为database_1_20131111.sql

#!/bin/bash

file_name=`date +%Y%m%d`.sql
backup_dir=/data/backup/
for i in  database1  database_2  database_3  database_n
/usr/local/mysql/bin/mysqldump -uuserneme -ppassword --opt -B $1 >  $backup_dir$i_$file_name
#过期用户:database4

当不需要继续备份数据库时,可以删除i里面的内容,比如上面过期database4,方便运维工程师管理。
把脚本添加到crontab里面,选择每天晚上00:00备份,这边复习一下五颗星

[root@localhost ~]# crontab -l
00 00 * * * sh -x /root/work/mysql_backup.sh

*  *  *  *  *  依次是分时日月周
这个是简单的自动化,我觉得不需要太复杂,因为参数在那摆着 --opt
--opt
如果运行mysqldump没有--quick或--opt选项,假如你正在导出一个很大的数据库,那么mysqldump将在导出结果前装载整个结果集到内存中,问题就很大了。

下面附上比较复杂点的自动化mysql备份脚本

#!/bin/bash
#数据库信息  
db_user=******  
db_passwd=******  
db_host=localhost
#文件名  
file_name=`date +%Y%m%d`.sql
backup_dir=/data/backup/
#mysql编译后命令所在位置  
mysql=/usr/local/mysql/bin/mysql  
mysqldump=/usr/local/mysql/bin/mysqldump 

#测试备份目录是否可写,如果不可写就报错退出  
test ! -w $backup_dir && echo "Error: $backup_dir is unwrite." && exit 0  
  
#测试备份目录中最新备份文件夹是否存在,如果不在就创建  
test ! -d "$backup_dir/backup.1/" && mkdir "$backup_dir/backup.1"  
  
#制定要备份的数据库  
for db in database_1 database_2 database_3 database_n  
do  
    $mysqldump -u $db_user -h $db_host -p$db_passwd --opt -B $db | gzip -6 > "$backup_dir/backup.1/$db.$file_name.gz"
done  
  
#检测最旧的备份数据库是否存在,如果在就删掉  
test -d "$backup_dir/backup.7/" && rm -rf "$backup_dir/backup.7"  
  
#循环修改备份数据库目录的编号,记录新旧程度  
for i in 6 5 4 3 2 1 0
do  
    if(test -d "$backup_dir"/backup."$int")  
    then  
        next_i=`expr $i + 1`  
        mv "$backup_dir"/backup."$i" "$backup_dir"/backup."$next_i"  
    fi  
done  
exit 0;


#过期用户:database4