跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

  • 0

编程方式实现MySQL批量导入sql文件


HACK1949

问题

编程方式实现MySQL批量导入sql文件

5fe7eb7834231.png

有时分需要在本地导入一些stage环境的数据到本地mysql,面对1000+的sql文件(包括表结构和数据,放在同一个文件夹下),运用navicat一个一个导入sql文件明显有点太慢了,于是考虑运用source指令批量来完成。网上看了很多人遇到这个高频的数据库sql导入问题,可是没有特别详细的解决方案,只有个大约的思路,我就抛砖引玉,作为一个详细的记录,渡人渡己。

先复习一下source的运用方法,首先要用指令行方法连接到MySQL数据库,然后运用下面的指令:

use database_name1

切换到需要被运用的数据库,然后再运用如下指令:

source path/to/file/table_name1.sql

本质上便是要运用这行指令来将sql文件的内容导入database_name1库里。运用source对上G巨细的sql文件非常高效和丝滑,不会出现图形化界面导入的时分的卡顿或者崩溃。
可是多个sql文件(比如上千个)那么就需要source很屡次,还是回到最初的问题,如何能一次性批量source进去呢?

这个时分能够想着创立一个完成批量导入的sql文件,假设命名为batch.sql,里边的内容大约如下:

source /path/to/file/table_name1.sql
source /path/to/file/table_name2.sql
source /path/to/file/table_name3.sql
...
省掉900多行
source /path/to/file/table_name1000.sql

人工的去编写这个batch文件明显吃力,可是咱们现在方针明确了,便是要想方法完成生成这样的batch.sql文件。
能够考虑运用脚本程序来完成,把这个问题转换成一个简单的脚本使命:
对指定途径的文件夹下一切文件名进行收集,并且是每个文件的全途径+文件名写入一个新的sql文件里边。当然别忘了每行开头要添加一个source指令,一个文件单独一行。
用Python完成最简单,os.walk能够用于遍历文件夹下的文件夹和文件,get_source_batch_file.py完成如下。

#!/usr/bin/python # -*- coding: UTF-8 -*- import sys import os '''
To get all the full path of files under a given path, not to search for sub folder's files.
''' def get_current_dir_filename_with_full_path(path: str) -> list: filename_list = [] for i,j,filename in os.walk(path): for item in filename:
            filename_list.append(path + item) return filename_list

这儿只处理当时目录下的文件,不会收集子目录下的文件,所以最外层的循环第一次完成后就return结果了。
然后调用部分也很简单,脚本传入第一个参数便是文件夹的途径:

# usage # the second params from terminater is the folder path. try:
    mypath = sys.argv[1] except IndexError:
    mypath = '/Users/tony/pythonwork/test/leetCode/testsqlFiles/' if mypath[len(mypath) - 1] != '/':
    mypath += '/' filename_list = get_current_dir_filename_with_full_path(mypath) for filename in filename_list:
    print("source " + filename)

能够看出接收参数也做了入参的途径补全的处理,相同也能够不传参数,默认值便是咱们需要处理的文件夹的全途径,之所以接收入参是为了日后运用更加灵敏。

最终在终端运用指令如下:

python3.7 get_source_batch_file /Users/tony/pythonwork/test/leetCode > ./batch.sql

履行完成后在当时目录下就会生成需要的batch.sql。留意,我这儿是运用的python3.7指令,这是由于我本机MacOS系统自带了一个python2.7,所以我单独安装了一个python3.7,由于get_source_batch_file.py用了python3特有的type hint写法,所以有必要运用3.x的python指令才能正常履行。
所以方法总比困难多,没有现成的东西,咱们自己写一个就OK了。
最终source /path/to/batch.sql,大功告成!

链接帖子
意见的链接
分享到其他网站

这个问题有0个答案

推荐的帖子

此问题没有答案

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...