定时任务自动化热备份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
还没有评论,快来抢沙发!