背景
目前系统中对于业务数据做了备份以作为数据校验,比如期初数据期末数据进行对比监控,因此产生了大量的备份表。备份表单表数据随着业务的增长而持续增长。导致晚间备份数据超长。
原方法
./mysqldump -uroot -proot --skip-lock-tables --databases f6dms_1116_prod_backup| gzip > /home/opt/database_`date '+%m-%d-%Y'`.sql.gz;
这样会导致备份时间超长,文件太大(随着时间增长 表变大,表变多)
目前使用jenkins远程ssh调用脚本远程执行mysqldump进行备份。
我的思考
- mysqldump支持备份指定库,那么我们可以备份其他到db中?
- 备份忽略指定前缀的表
解决方法
- 比较简单,略过
-
mysqldump支持 --ignore-table但是不支持通配符,那么我们可以通过生成mysqldump的指令来完成。对于指定名称我们可以通过show tables来实现。因此如下
./mysqldump -uroot -proot --skip-lock-tables --databases f6dms_1116_prod_backup $(mysql -uroot -proot -Df6dms_1116_prod_backup -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_1116_prod_backup."$1}'|xargs)| gzip > /home/opt/database_`date '+%m-%d-%Y'`.sql.gz;
通过查询db的指定名称的表名完成忽略