📓 Archive

ANALYZE_TOOLS

FGJ: Create:2024/06/05 Update: (2024-10-24)

  • 分析工具 #

    通过工具进行分析,结合书中的概念学习innodb存储引擎。

    .frm 解析工具如下:
    dbsake(a(s)wiss-(a)rmy-(k)nif(e) for MySQL),    github
    mysqlfrm,     download archive,    mysql-utilities pdf
    frm-parser

    .ibd 解析工具有:
    innodb-java-reader
    innodb_ruby

    • frm-parser #

      Note

      开源仓库
      使用frm解析工具对/tmp/mysql/demos/record_format_demo.frm ,进行分析,解析结果如下。

      Caution

      1). 对代码稍作修改,使用cmake构建,修改文件位置为绝对路径,show_tables(),show_db()函数中的文件位置也需要改变。

    • dbsake #

      Note

      参考 官方文档进行安装测试。自定义安装位置,比如:cd /usr/local/bin
      curl -s get.dbsake.net > dbsake
      chmod u+x dbsake
      dbsake -?

    • mysql-utilities #

      Note

      开源仓库

      环境搭建,项目语法采用的是python2的,所以需要先安装 python2下载页面

      如果使用--server参数的话,还得安装python数据库驱动。根据package.py中的安装描述,需要安装Connector/Python 1.0.9, 官方下载页面,但是我启动的时候会报如下错误:
      ERROR: The MYSQL Connector/Python module was found but it is either not properly installed or it is an old version. MySQL Utilities requires Connector/Python version > ‘(1, 2, 1)’. Download and install Connector/Python from http://dev.mysql.com.

      根据错误信息从新下载1.2.2版本: mysql-connector-python-1.2.2.zip

    • innodb-java-reader #

      Note

      开源仓库
      通过开源innodb文件java解析框架,对数据文件/tmp/mysql/demos/record_format_demo.ibd进行分析。例如如下获取所有行记录。

      Caution

      1). 当前使用的版本为 9866b27
      2). 自定义了一些代码,比如GenericRecord#toString,修改一些错误逻辑: TableDefUtil#handleCharset方法中判断应该是indexof > -1,而不是indexof > 0,另外扩展了自定义逻辑等。

    • innodb_ruby #

      Note

      开源仓库
      使用innodb_ruby工具进行文件/tmp/mysql/ibdata1分析:比如命令: (需要注意: 截图中使用脚本执行的 innodb_space 命令,如果是工具的话需要转换,如下)
      innodb_space -s /tmp/mysql/ibdata1 -T demos/record_format_demo space-page-type-regions
      innodb_space -s /tmp/mysql/ibdata1 -T demos/record_format_demo -p 3 page-records

      • innodb_ruby通过gem在线安装 #

        Warning

        参考 官方文档安装完成后发现使用不了innodb_space命令。可能多个环境造成的。排查过程如下:

        1). 确认安装:首先,再次确认innodb_ruby是否已成功安装。可以在命令行输入以下命令来查看:gem list innodb_ruby
        2). 查找可执行文件位置:找到gem安装的innodb_space可执行文件的位置。通常,gem的可执行脚本会被安装到Ruby的bin目录下:gem environment | grep "EXECUTABLE DIRECTORY"
        3). 添加到系统路径即可。可以写入.bash_profile或者临时添加命令export PATH="/usr/local/lib/ruby/gems/3.3.0/bin:$PATH

      • innodb_ruby官方数据还原方法 #

        1). 从 innodb_ruby代码仓库克隆项目到本地,里面包含一些样例数据,比如 compact行格式数据库
        2). 因为数据是mysql内部文件的形式存放的,所以我们需要用一个mysql服务器来驱动这些数据,此处使用docker容器来处理,将这些文件挂载到容器中,达到还原的效果。

        目的:innodb_space工具分析出的结论作适当对比

        启动服务器

        在docker环境中使用如下命令启动:
        docker run -d -p 3338:3338 --rm -e MYSQL_ROOT_PASSWORD='compact4321' -v /Users/stevenobelia/Documents/project_rubymine_test/innodb_ruby/spec/data/sakila/compact:/data/mysql --name mysql-5.6.49-innodb_ruby mysql:5.6.49 --datadir=/data/mysql --port=3338

        Caution

        1). MYSQL_ROOT_PASSWORD对应的密码可以随便给一个大于6位的就行,用于客户端链接。
        2). /Users/stevenobelia/Documents/project_rubymine_test/innodb_ruby/spec/data/sakila/compact指的是克隆下来项目中的数据路径,也就是 mysql 的 datadir

        客户端连接测试:

        可以使用下列命令进行客户端连接测试:

        docker run -it --rm --network=host --name mysql-client -e LANG="C.UTF-8" mysql:5.6.49 mysql -h 127.0.0.1 -u root -P 3338 -p

        输入如上compact4321密码登入。

        验证record_dump:

        按照wiki中的 record_dump 命令innodb_space -s ibdata1 -T sakila/film -p 7 -R 128 record-dump dump 出的结果如下左,对比查询出的数据记录如下右。


comments powered by Disqus