有时候,自己搞一个博客、小型论坛再或者一个小型的项目,如果又不想选择xtrabackup或者自己写个小程序备份的话,这里有一个很不错的小方案可以选择哟!
前言
我的Linux系统是centos,是最新版本的7.4,64bit,系统内核版本(可通过uname -a命令查看系统内核版本)3.10.0-693.2.2.el7.x86_64。这里会用到mysql自带的mysqldump工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| shell脚本内容 #!/bin/sh #mysql账户 mysql_user="leo" #mysql密码 mysql_password="leo123456789" #mysql自带的可执行文件目录 mysql_dir=/usr/local/mysql/bin #要导出的数据库名称,多个用半角逗号隔开 mysql_databases="leo" #备份目录,一定要事先创建好 backup_dir=/data/backup/mysql/leo #导出数据库文件前缀 today=$(date +%Y%m%d_%H%M%S) #日志目录 也要提前创建 log_dir=/data/logs/mysql/leo #日志名称 log_file=backup.log #追加开始备份的提示文字到日志文件 echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"备份开始\n" >> $log_dir/$log_file #使用mysqldump导出数据 $mysql_dir/mysqldump -u$mysql_user -p$mysql_password --apply-slave-statements --hex-blob --routines --single-transaction --databases $mysql_databases | gzip > $backup_dir/$today.sql.gz #追加删除旧备份数据的提示文字到日志 echo -e '['$(date +"%Y-%m-%d %H:%M:%S")'] - '$mysql_databases' - '"删除以前的备份\n" >> $log_dir/$log_file #保留多少天内的备份 days=3 #查找应该删除的数据 并删除 find $full_backup_dir -mtime +$days -name "*.sql.gz" -exec rm -f {} \; #休息一下 sleep 600
|
我们把上面的脚本内容保存成backup.sh文件,保存在/data目录(即,文件地址是/data/backup.sh)。注意转换编码,不然会报错,提示找不到/bin/sh,最好在Linux或者类Unix系统下面保存成文件。
定时执行脚本
执行上面的命令,进入编辑定时任务模式。按一下“i”,把下面的内容放到新的一行。每6小时执行一次。
1
| 1 */6 * * * /data/backup.sh >> /dev/null
|
按一下“Esc”键,输入:wq!,按一下回车键保存。
如果害怕搞错,可以直接使用echo命令追加内容到定时任务文件里面!
1
| echo '1 */6 * * * /data/backup.sh >> /dev/null' >> /var/spool/cron/root
|
centos系统的定时任务文件对应的目录是 /var/spool/cron,文件以用户名命名!
拓展一下
如果觉得还是不够6,可以参考一下《利用inotify+rsync实时同步数据到远程服务器之二》,把备份出来的数据实时同步到其他服务器上面!不费力,也很稳定,小型数据库,足矣!