【本文阅读需要shell编程和mysql基础】
作为一个运维经常收到开发同学导出线上数据到测试数据库的需求。
工作情景:开发同学【小A】收到测试【小B】提的线上的bug。【小A】同学,火速check了master分支,在本地调试。但发现测试环境的数据并没有类似的错误。【小A】跑到运维那里。
“我们需要线上的数据导入到测试环境来复现线上bug。”
我得到大神的运维思路是这样的。分两步走
背景介绍:
线上地址: 127.0.0.1
测试数据库ip:1.1.1.1
数据库1名称:database1
数据库2名称:database2
数据存放目录:/data/dump/
存放数据库表名称的文件:/root/sqldump/table_list_name
日志表:sms_log,loging_log
shell文件名:/root/sqldump/dump-data.sh
为了方便演示,并没有定义变量 ,大大神看到请拍砖!
1、先删除目录下的内容
rm -rf /data/dump/*2、得到所有的表名称并且排除掉不需要的大的日志表
mysql -h 127.0.0.1 -u root -p'123456' -e 'use database1; show tables' 2>/dev/null | egrep -v "sms_log|loging_log" > /root/sqldump/table_list_name3、循环导出数据
for i in `cat /root/sqldump/table_list_name`; do mysqldump -h 127.0.0.1 -u root -p'123456' database1 $i --set-gtid-purged=off --single-transaction > /data/dump/$i.sql done 对于数据较多,但不重要的日志表数据只导出结构,不导出数据。 mysqldump -h 1.1.1.1 -u root -p'123456' -d database1 sms_log loging_log --set-gtid-purged=off --single-transaction > /data/dump/create_table.sql最终的shell文件如下
rm -rf /data/dump/* mysql -h 127.0.0.1 -u root -p'123456' -e 'use database1; show tables' 2>/dev/null | egrep -v "sms_log|loging_log" > /root/sqldump/table_list_name for i in `cat /root/sqldump/table_list_name`; do mysqldump -h 127.0.0.1 -u root -p'123456' database1 $i --set-gtid-purged=off --single-transaction > /data/dump/$i.sql done mysqldump -h 1.1.1.1 -u root -p'123456' -d database1 sms_log loging_log --set-gtid-purged=off --single-transaction > /data/dump/create_table.sql防止影响线上业务放入计划任务,凌晨2点执行
1 2 * * * /bin/bash /root/sqldump/dump-data.sh如果有多个从库,就可以从库为基础库导出。
如果本文对你有帮助,请转发,说不定你的朋友也需要它。
关注我,掌握更多编程技巧成倍提升工作效率。
