Closed xiaohuazi123 closed 1 year ago
ibd2sdi工具预留在程序里
你的意思是把ibd2sdi这个程序添加到这个项目里面吗?ibd2sdi是安装mysql 8后附带的工具;我不确定是否有其他dll之类依赖,只copy一个ibd2sdi.exe到项目里面是否可行。有人愿意测试下,确认只要一个ibd2sdi可以顺利执行的话可以加到项目里。
Windows用where ibd2sdi 会出问题
我这里测试是可以输出ibd2sdi的路径的,如果你那边出现错误的话可以贴个错误信息我看看。
only_tbls不在only_tbls 这句话永远都是假,有bug
only_tbls
是传入的命令行参数,用于限制只对这些表生成sql语句,如果没有传入的话,only_tbls
是空的,这条语句就直接continue
导入导出表空间,加上锁表和解锁语句 和mysqlcheck检查
不错的idea,最近在忙别的项目,有人愿意优化下这里的话,欢迎提交pull请求~
最后,感谢反馈,具体的bug最好附带上错误信息,复现步骤~
ibd2sdi工具预留在程序里
你的意思是把ibd2sdi这个程序添加到这个项目里面吗?ibd2sdi是安装mysql 8后附带的工具;我不确定是否有其他dll之类依赖,只copy一个ibd2sdi.exe到项目里面是否可行。有人愿意测试下,确认只要一个ibd2sdi可以顺利执行的话可以加到项目里。
Windows用where ibd2sdi 会出问题
我这里测试是可以输出ibd2sdi的路径的,如果你那边出现错误的话可以贴个错误信息我看看。
only_tbls不在only_tbls 这句话永远都是假,有bug
only_tbls
是传入的命令行参数,用于限制只对这些表生成sql语句,如果没有传入的话,only_tbls
是空的,这条语句就直接continue导入导出表空间,加上锁表和解锁语句 和mysqlcheck检查
不错的idea,最近在忙别的项目,有人愿意优化下这里的话,欢迎提交pull请求~
最后,感谢反馈,具体的bug最好附带上错误信息,复现步骤~
错误信息
C:\Users\Administrator>where ibd2sdi
信息: 用提供的模式无法找到文件。
具体报错
截图
需要安装mysql 8,然后把bin目录添加到系统环境变量Path中,where才能生效哈,刚才我删除环境变量再试复现了。我修改下文档说明下
还有argparse也写的不太好
parser = argparse.ArgumentParser (description='This is descript')
parser.add_argument( dest='tosql', required=True ,help='generate sql from ibd files')
parser.add_argument( dest='load_data', required=True ,help='load data from ibd for tables')
parser.parse_args()
if args.tosql == 'tosql':
ibd2sql(config)
elif args.load_data == 'load_data':
link_tables_ibd(config)
else:
raise ValueError(f'unsupport sub command: {args.cmd}')
add_subparsers是子参数,你这里也没有用到子参数相关功能,而且你还加了一个dest='cmd',有点莫名其妙
我这里之所以用argparse的子命令,是因为这个脚本涉及两块功能:sql生成(tosql) 和 数据导入(load_data),这两个功能是相互独立的,不会一起执行。我希望通过python main.py tosql
和python main.py load_data
这样简单传入一个单词来表示执行哪个功能。这样的语法刚好就需要子命令。
如果不用子命令,可以用python main.py --tosql
和python main.py --load_data
这种形式,但需要内部做互斥校验,复杂了一点点,而且给人的感觉似乎这两个参数可以同时使用,不够明确。
所以我觉得还是子命令来互斥区分不同入口更好些,直接把子命令的存放到cmd
里面,判断是哪个子命令,调用不同方法。
明白了,今天又研究了一遍代码,确实这样,互斥的话,判断一下,如果两个参数都有值就报错退出不执行,很多操作系统命令都是这样的,会在help帮助文档里面说明是这个参数跟哪个参数互斥,,不过你这个方法也是可以的
我这里之所以用argparse的子命令,是因为这个脚本涉及两块功能:sql生成(tosql) 和 数据导入(load_data),这两个功能是相互独立的,不会一起执行。我希望通过
python main.py tosql
和python main.py load_data
这样简单传入一个单词来表示执行哪个功能。这样的语法刚好就需要子命令。 如果不用子命令,可以用python main.py --tosql
和python main.py --load_data
这种形式,但需要内部做互斥校验,复杂了一点点,而且给人的感觉似乎这两个参数可以同时使用,不够明确。 所以我觉得还是子命令来互斥区分不同入口更好些,直接把子命令的存放到cmd
里面,判断是哪个子命令,调用不同方法。
明白了,今天又研究了一遍代码,确实这样,互斥的话,判断一下,如果两个参数都有值就报错退出不执行,很多操作系统命令都是这样的,会在help帮助文档里面说明是这个参数跟哪个参数互斥,,不过你这个方法也是可以的