今天遇到一个很傻逼的问题,有人登上开发服务器,不知是有意仍是无意;把mysql里面的库所有删除了。。。那我的结果如何,咱们就不做讨论了。。。没办法我只能写个shell脚本,用crontab跑下定时;作些简单的数据备份了,顺便写个笔记
其实很简单mysql
这里有几个问题须要注意的:linux
固然数据备份,你能够选择对应的时间段,按照对应的业务的状况定义备份的周期,又或者若是 mysql服务器上库多,根据不一样业业务,不一样时间段备份;这也是能够的。。。看具体业务状况咯!web
由于个人只是开发和测试用,数据量不会很大,因此影响就能够忽略了,只要在你们都下班了后备份就不要紧了(因此我定的是:天天深夜12点备份,一个月后吧上个月的清理了)sql
mysqldump 所须要的权限说明:shell
下面是用户建立预计(有不懂的能够另行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';
#!/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[=#] google
在备份导出的文件里追加二进制binlog文件的位置和名称
若是值等于1,就会添加一个CHANGE MASTER语句
若是值等于2,就会在CHAGE MASTER语句前添加注释(不起做用了呗~)
这个参数会--lock-all-tables锁表,除非你指定了--single-transaction
这种状况下,锁表只会在dump开始的时候持续一小段时间,照理说 在dump的时候,任何动做都会影响到binlog文件 dump结束以后,选项会自动关闭锁表功能code
--single-transactioncrontab
以事务的形式执行
#!/bin/sh find /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;
说明:
crontab -e
0 0 * * * /home/sh/mysql-backups/dump.sh 0 0 1 * * /home/sh/mysql-backups/del.sh