简介
dbsake 是一个古老的数据库管理工具,集成了 MySQL 多种使用场景的工具,你可以用它提取解析 MySQL 的 frm 文件来获取建表语句或视图,可以检查 MySQL 配置信息用来升级 MySQL、自动部署沙盒实例、编解码 MySQL 文件名、查看 ibdata文件中缓存的内容。这些都是老版本 MySQL 不支持的一些功能,现在基本都已经兼容了,我们今天主要使用的是他解析 frm 文件的功能。
项目地址:https://github.com/abg/dbsake
使用前请安装如下依赖:
- Requires python v2.6+
- jinja2 >= 2.2
- click >= 2.0
安装
# 下载 curl -s get.dbsake.net > dbsake # 添加执行权限 chmod u+x dbsake # 添加到 bin 目录 mv dbsake /usr/local/bin/ # 验证 dbsake --help
使用
这里说下解析 .frm 文件,获取建表语句的功能。
解析单个文件
dbsake frmdump /your_path/test.frm
解析多个文件
dbsake frmdump /your_path/*.frm
将建表语句或视图追加到文本
dbsake frmdump /your_path/*.frm > create_table_or_view.sql
将建表语句或视图导入到数据库
dbsake frmdump /your_path/*.frm | mysql database_name
将建表语句和创建视图分开
有时候你需要将建表语句和视图分开,这样可以避免导入视图时出现表不存在的提示。
# 过滤出视图 egrep -B 7 '^CREATE ALGORITHM' /your_path/create_table_or_view.sql > /your_path/view.sql # 过滤建表语句 egrep -v '^CREATE ALGORITHM' /your_path/create_table_or_view.sql > /your_path/create_table.sql
获取 innodb 表名
有时候你只想获取 innodb 表的建表语句,因为 MyISAM 的就恢复十分简单。
# 先进入你的 MySQL 的数据目录 dbsake frmdump $(ll *.ibd|awk '{print $NF}'|awk -F. '{print $1}'|awk '{print $1".frm"}') >/your_path/create_table.sql
统计表或视图的数量
# 统计恢复出来的表个数 grep '^CREATE TABLE' /tmp/create_table.sql|wc -l # 统计视图个数 grep '^CREATE ALGORITHM' /tmp/view.sql|wc -l
错误处理
在导入到数据时,你可能会遇到时间字段默认值无效的问题,修改文件内容可以解决这个问题:
# 默认值无效 # 修改 datetime 类型 sed -i 's#datetime DEFAULT NULL#datetime null DEFAULT NULL#g' /your_path/create_table.sql # 修改 timestamp 类型 sed -i 's#timestamp DEFAULT NULL#datetime null DEFAULT NULL#g' /your_path/create_table.sql
完整解决方案参见:https://blog.csdn.net/weixin_45385457/article/details/141136121