shell脚本实现mysql数据备份
mysql数据备份今天遇到一个很傻逼的问题,有人登上开发服务器,不知是有意还是无心;把mysql里面的库全部删除了。。。那个人结果如何,我们就不作讨论了。。。没办法我只能写个shell脚本,用crontab跑下定时;做些简单的数据备份了,顺便写个笔记 思路其实很简单
注意这里有几个问题需要注意的:
当然数据备份,你可以选择对应的时间段,按照对应的业务的情况定义备份的周期,又或者如果 mysql服务器上库多,根据不同业业务,不同时间段备份;这也是可以的。。。看具体业务情况咯! 因为我的只是开发和测试用,数据量不会很大,所以影响就可以忽略了,只要在大家都下班了后备份就没关系了(所以我定的是:每天深夜12点备份,一个月后吧上个月的清理了) 正题1.mysqldump的权限说明mysqldump 所需要的权限说明:
下面是用户创建预计(有不懂的可以另行google,就不多展开了): create user dumper@'127.0.0.1'; grant select on tempdb.* to dumper@'127.0.0.1'; grant show view on tempdb.* to dumper@'127.0.0.1'; grant lock tables on tempdb.* to dumper@'127.0.0.1'; grant trigger on tempdb.* to dumper@'127.0.0.1'; 2.shell脚本(导出数据sql)#!/bin/sh # Database info DB_USER="dumper" DB_PASS="..." DB_HOST="..." # Database array DB_NAME=("hotel" "food" "foodweb") # Others vars BIN_DIR="/usr/bin" #the mysql bin path BCK_DIR="/home/mysql-backups" #the backup file directory DATE=`date +%F` # create file mkdir $BCK_DIR/$DATE # TODO # /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql for var in ${DB_NAME[@]}; do $BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/$DATE/db_$var.sql done 参数说明: --master-data[=#] 在备份导出的文件里追加二进制binlog文件的位置和名称 --single-transaction 以事务的形式执行 3.shell脚本(按时批量清除N天前脚本)#!/bin/sh find /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} ; 说明:
4.crontab定时启动脚本crontab -e 0 0 * * * /home/sh/mysql-backups/dump.sh 0 0 1 * * /home/sh/mysql-backups/del.sh (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |