思路

其实很简单

写一个shell脚本通过mysql的mysqldump,将数据导出成对应的sql文件;使用linux的crontab定时运行对应脚本,将sql,文件保存到对应的目录下;可想而知,随着数据量的增加和备份的频率都会导致备份服务器的硬盘资源使用率也会直线攀升;为了解决这个问题,我们就需要,定时清理备份内容;而我还是简单的使用了个shell脚本,通过crontab定时去清理; 注意

这里有几个问题需要注意的:

通过mysqldump来导出对应的库表的sql,这样必然会造成mysql服务器的资源消耗(cup,内存,io等); mysqldump默认的方式会造成锁表,这个很恐怖,会导致线上的服务的中断,也许时间是短暂的,但是这是致命的;(可以通过配置改成事务形式,不锁表)随着数据量的增大,mysqldump导出sql的时间也会增长;

当然数据备份,你可以选择对应的时间段,按照对应的业务的情况定义备份的周期,又或者如果 mysql服务器上库多,根据不同业业务,不同时间段备份;这也是可以的。。。看具体业务情况咯!

因为我的只是开发和测试用,数据量不会很大,所以影响就可以忽略了,只要在大家都下班了后备份就没关系了(所以我定的是:每天深夜12点备份,一个月后吧上个月的清理了)

1.mysqldump的权限说明

mysqldump 所需要的权限说明:

对于table 来说mysqldump 最少要有select 权限。对于view 来说mysqldump 要有show view 权限。对于trrigger 来说mysqldump 要有trriger 权限。如果要产生一份一致的备份 mysqldump 要有lock tables 权限。

下面是用户创建预计(有不懂的可以另行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 infoDB_USER="dumper"DB_PASS="..."DB_HOST="..."# Database arrayDB_NAME=("hotel" "food" "foodweb")# Others varsBIN_DIR="/usr/bin"      #the mysql bin pathBCK_DIR="/home/mysql-backups"  #the backup file directoryDATE=`date +%F`# create filemkdir $BCK_DIR/$DATE# TODO# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sqlfor 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.sqldone

--master-data[=#]

在备份导出的文件里追加二进制binlog文件的位置和名称
如果值等于1,就会添加一个CHANGE MASTER语句
如果值等于2,就会在CHAGE MASTER语句前添加注释(不起作用了呗~)
这个参数会--lock-all-tables锁表,除非你指定了--single-transaction
这种情况下,锁表只会在dump开始的时候持续一小段时间,照理说 在dump的时候,任何动作都会影响到binlog文件 dump结束之后,选项会自动关闭锁表功能

--single-transaction

以事务的形式执行

3.shell脚本(按时批量清除N天前脚本)

#!/bin/shfind /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;

/home/lifeccp/dicom/studies :准备要进行清理的任意目录 -mtime:标准语句写法+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件 ".":希望查找的数据类型,".jpg"表示查找扩展名为jpg的所有文件,""表示查找所有文件 -exec:固定写法 rm -rf:强制删除文件,包括目录 {} ; :将find的结果放到里面 4.crontab定时启动脚本

crontab -e0 0 * * * /home/sh/mysql-backups/dump.sh0 0 1 * * /home/sh/mysql-backups/del.sh

更多相关文章

  1. 基于MQTT实现Android消息推送(Push)
  2. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  3. Android(安卓)ROM的创建和烧录
  4. Android(安卓)ASE 脚本环境
  5. Android实现圆角弹框功能
  6. android实现静默安装demo
  7. android WebView解析 调用html5页面
  8. Android(安卓)SDK源码提取Python脚本(4.0SDK源码下载地址)
  9. Android中间键开发

随机推荐

  1. 用c程序实现的算法必须要有输入个输出操
  2. 0基础学c语言看什么书?
  3. c语言主函数名是什么?
  4. c语言源程序的基本单位是什么
  5. c语言system函数用法
  6. c++源程序文件的扩展名是什么
  7. 一个c语言程序由什么组成
  8. vb.net和vb的区别是什么?
  9. c语言可以直接对硬件进行操作吗
  10. 汇编语言和c语言之间有什么区别?