mysql数据备份今天遇到一个很蠢的问题。有人登录到开发服务器。不知道是有意还是无意;我删除了mysql中的所有库。..那个人后来怎么样了,我们就不讨论了。..没办法,只好自己写一个shell脚本,用crontab来计时;做一些简单的数据备份,顺便写个笔记。这个想法其实很简单。编写shell脚本,通过mysql的mysqldump将数据导出到对应的sql文件中;使用linux的crontab定时运行相应的脚本,并将sql和文件保存在相应的目录下;可以想象,随着数据量的增加和备份频率的增加,备份服务器的硬盘资源利用率也会直线上升;为了解决这个问题,我们需要定期清理备份内容;而我只是简单地使用一个shell脚本通过crontab定时清理;注意,这里有几个问题需要注意:通过mysqldump导出对应数据库表的sql,这必然会造成mysql服务器的资源消耗(cup、内存、io等);mysqldump默认的方法会造成表锁,很可怕,会导致在线服务中断。也许时间很短,但这是致命的;(可以通过配置改为事务形式,不用锁表)随着数据量的增加,mysqldump导出sql的时间也会增加;当然,对于数据的备份,可以选择相应的时间段,根据相应的业务需求情况来定义备份周期,或者如果mysql服务器上的数据库比较多,可以根据不同的行业在不同的时间段进行备份和企业;这也是可能的。..看具体的业务情况!因为我的只是开发测试,数据量不会很大,所以影响可以忽略,只要大家下班后备份就无所谓了(所以我设置:12点备份每天晚上,一个月后上个月清理完)题目一、mysqldump权限说明mysqldump需要的权限说明:对于一个表,mysqldump至少要有select权限。对于查看,mysqldump必须具有显示查看权限。对于trigger,mysqldump必须有tririger权限。如果要生成一致的备份,mysqldump必须有锁定表的权限。下面是创建用户估计(不明白可以单独google,我就不展开了):createuserdumper@'127.0.0.1';grantselectontempdb.*todumper@'127.0.0.1';grantshowviewontempdb.*todumper@'127.0.0.1';将tempdb.*上的锁表授予dumper@'127.0.0.1';将tempdb.*上的触发器授予dumper@'127.0.0.1';2.shell脚本(导出数据sql)#!/bin/sh#DatabaseinfoDB_USER="dumper"DB_PASS="..."DB_HOST="..."#DatabasearrayDB_NAME=("hotel""food""foodweb")#OthersvarsBIN_DIR="/usr/bin"#mysqlbin路径BCK_DIR="/home/mysql-backups"#备份文件目录DATE=`date+%F`#createfilemkdir$BCK_DIR/$DATE#TODO#/usr/bin/mysqldump--opt-ubatsing-pbatsingpw-hlocalhosttimepusher>/mnt/mysqlBackup/db_`date+%F`.sqlforvarin${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.sqldone参数说明:--master-data[=#]附加二进制文件binlog文件到备份导出的文件如果值等于1,会增加一条CHANGEMASTER语句如果值等于2,会在CHAGEMAST在ER语句前加注释(不行~)这个参数会--lock-all-tables锁表,除非你指定--single-transaction,这种情况下锁表只会持续到dump的时候starts一小段时间,按理说dump期间,任何动作都会影响到binlog文件。dump结束后,选项会自动关闭锁表功能--single-transaction以事务的形式执行3.shell脚本(及时批量清除N天前的脚本)#!/bin/shfind/home/mysql-backups-mtime+30-name"*.*"-execrm-Rf{}\;说明:/home/lifeccp/dicom/studies:准备清理任意目录-mtime:标准句写法+10:搜索10天前的文件,这里用数字表示天数,+30表示搜索files30daysago".":要查找的数据类型,".jpg"表示查找后缀为jpg的所有文件,""表示查找所有文件-exec:固??定写法rm-rf:强制删除文件,包括目录{};:把find的结果放进去4.crontab定时启动脚本crontab-e00***/home/sh/mysql-backups/dump.sh001**/home/sh/mysql-backups/del.sh
