背景

项目在运营过程中,经常会将mysql全量备份。备份的文本有10多GB。
当需要用一部分数据来重现某个项目问题时就犯难了:

  1. 10多GB导入到mysql没必要且耗时;
  2. 复制一份数据用vim将不用的部分删掉,vim打开查找的速度太慢了;

解决办法

  1. 找到所有数据库所在的行号;
grep "CREATE DATABASE " ali_mysql_202301.sql -n  >> dbname.log
  1. 从dbname.log中找到所需数据库的行号和下一个数据库的行号
5587:CREATE DATABASE /*!32312 IF NOT EXISTS*/ `v01_zs` /*!40100 DEFAULT CHARACTER SET utf8 */;
6712:CREATE DATABASE /*!32312 IF NOT EXISTS*/ `v02_ls` /*!40100 DEFAULT CHARACTER SET utf8 */;
7632:CREATE DATABASE /*!32312 IF NOT EXISTS*/ `v03_ww` /*!40100 DEFAULT CHARACTER SET utf8 */;
9370:CREATE DATABASE /*!32312 IF NOT EXISTS*/ `v04_zl` /*!40100 DEFAULT CHARACTER SET utf8 */;

比如我们要取v02_ls,那么就从ali_mysql_202301.sql导出6712-7632行就行了。可以使用python脚本来实现getsql.py

name = 'v02_ls.sql'
srcname = 'ali_mysql_202301.sql'
cnt = 0
file = open(srcname)
with open(name, 'a+') as f:
    for line in file:
        if cnt > 6712 and cnt < 7632 :
            f.write(line)
        cnt = cnt + 1
file.close()
f.close()

将行号填写到cnt > 6712 and cnt < 7632这行然后执行脚本

python getsql.py

就可以得到想要的数据了(v02_ls.sql)

posted on 2023-04-13 15:11  步孤天  阅读(124)  评论(0编辑  收藏  举报