lampabc.com,lamp学习本应更简单, 互帮 互助 共享 ~~~

定时备份MySQL数据库

先上代码:

#!/bin/bash
# Name:sh_bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysql_bak # 存放数据备份的目录,可以根据自己喜好新建
time="$(date +"%Y%m%d-%H%M%S")"
mysqldump -u dbuser -pdbpwd test  > $backupdir/name1$time.sql # 导出数据库
#
find $backupdir -name "name*.sql*" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1 # 清理7天前的数据

(文档前面3行是写shell文件的规范)

该处理方面中
1,导出数据库用的是 mysqldump工具,当然还会有其他方式
mysqldump命令格式:mysqldump -u [username] -p dbname [tablename]> filename
常用的也可以顺便压缩文件,如 mysqldump -u dbuser -pdbpwd test | gzip > $backupdir/name1$time.sql.gz
导出数据库结构 -d –add-drop-table
导出语言参数 –default-character-set=latin1 –set-charset=gbk

2,对清理数据的一些说明
代码中time=` date +%Y%m%d%H `也可以写为time="$(date +"%Y%m%d$H")"
其中`符号是TAB键上面的符号,不是ENTER左边的'符号,还有date后要有一个空格。
mysql_bin_dir:mysql的bin路径;
dataname:数据库名;
user:数据库用户名;
password:用户密码;
name:自定义备份文件前缀标识。
-type f    表示查找普通类型的文件,f表示普通文件。
-mtime +5   按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
-exec rm {} \;   表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
/dev/null 2>&1  把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行。

3,文件的执行
如果只是需要一次性运行,直接 sh /usr/sbin/bakmysql.sh 就可以。
如果是要定时执行的则
1) 为脚本添加执行权限
chmod +x /usr/sbin/bakmysql.sh
2)设置定时,一般使用crontab
修改/etc/crontab
vi /etc/crontab
在最后一行中加入:
00 4 * * * root /usr/sbin/bakmysql.sh
表示每天4点00分执行备份
注:crontab配置文件格式如下:
分 时 日 月 周 用户 命令

一般执行这2步就可以了,但网上有说,还要重启crontab(楼主的主机是centos7只需要以上2步及可),另附上重启crontab命令
/etc/rc.d/init.d/crond restart

4,数据恢复
非压缩备份文件恢复:
mysql -u root -p dataname < name2008010103.sql
从压缩文件直接恢复:
gzip < name.sql.gz | mysql -u root -p dataname # 报错则加上--binary-mode
或:zcat name.sql.gz  | mysql -u root -p dataname
如若上面2个命令不好使,另附上解压命令:
gunzip FileName.gz
或gzip -d FileName.gz