说明 使用shell实现mysql全量,增量备份。增量备份脚本在周一-周六凌晨3点执行,会复制mater_bin.00000*到指定目录;全量备份脚本则使用mysqldump将所有的数据库导出,每周日凌晨3点执行,并删除上周留下的master_bin.00000*。然后对mysql的备份操作会保留在bak.log文件中 1、编写mysql数据库全备份脚本 shell>vim dbfullbak.sh #!/bin/bash #Program # use mysqldump to Fully backup mysql dataper week! #History # 2014-06-26 dinglei first # Path # .... bakdir=/mysqldb_bak logfile=/mysqldb_bak/backup.log username=root pass=111111 date=`date+%Y-%m-%d` start=`date"+%Y-%m-%d %H:%M:%S"` cd$bakdir filename=full_bak /usr/local/mysql/bin/mysqldump--default-character-set=utf8 --opt --extended-insert=false --triggers -R--hex-blob --single-transaction --quick --all-databases -u$username -p$pass | gzip > $filename-$date.sql.gz end=`date"+%Y-%m-%d %H:%M:%S"` startutc=`date+%s -d "$start"` endutc=`date+%s -d "$end"` interval=$(($endutc-$startutc)) echo"Start:$start End:$end $filename-$date.sql.gz is backupsucc,Interval:$interval;" >> $logfile cd$bakdir/daily rm -f * mysqldump使用参数说明: --default-character-set=utf8:指定导出数据时采用何种字符集,如果数据表不是采用默认的latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。 --opt :这只是一个快捷选项,等同于同时添加--add-drop-tables --add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用--skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。 --extended-insert=false:默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。 --triggers:同时导出触发器。该选项默认启用,用--skip-triggers 禁用它。 -R :导出存储过程以及自定义函数。 --hex-blob:使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。 --single-transaction:该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如InnoDB 和 BDB。本选项和 --lock-tables选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。 --quick :该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。 --all-databases :导出所有库。 2、编写增量备份脚本 shell>vim dbdailybak.sh #!/bin/bash # Program # use cp tobackup mysql data everyday! # History # 2014-06-26dinglei first # Path # .... bakdir=/mysqldb_bak/daily bindir=/data/mysqlbinlog logfile=/mysqldb_bak/backup.log binfile=/data/mysqlbinlog/master_bin.index username=root pass=111111 /usr/local/mysql/bin/mysqladmin -u$username -p$passflush-logs counter=`wc -l $binfile |awk '{print $1}'` nextnum=0 for file in `cat $binfile` do base=`basename $file` nextnum=`expr $nextnum + 1` if [$nextnum -eq $counter ] then echo $base skip! >>$logfile else dest=$bakdir/$base if(test -e $dest) then echo $base exist! >>$logfile else cp $bindir/$base $bakdir echo $base copying >> $logfile fi fi done echo `date "+%Y-%m-%d %H:%M:%S"` there are`expr $nextnum - 1`\'s bin-file backup is succ! >> $logfile 3、设置crontab,每天执行备份脚本 shell>crontab –e MAILTO=”” #每个星期日凌晨3:00执行完全备份脚本 0 3 * * 0 /root/dbfullbak.sh >/dev/null2>&1 #周一到周六凌晨3:00做增量备份 0 3* * 1-6 /root/dbdailybak.sh >/dev/null 2>&1
mysql全备份+二进制增量备份
原创
©著作权归作者所有:来自51CTO博客作者verycici的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MySQL5.7.36安装-二进制(源码)版本
MySQL5.7.36安装-二进制(源码)版本
mysql MySQL sed -
mysql二进制增量备份
mysql二进制增量备份
mysql mysql备份 mysql增量备份 -
MySQL xtrabackup全量备份+增量备份+二进制日志恢复实战
做增量备份前,首先要进行一次全量备份。
mysql 增量备份 数据 -
使用二进制日记进行mysql增量备份
在使用增量备份之前,先使用mysqldump进行完全备份,后使用二进制日记进行增量备份。
mysql 日记 service 二进制