📓 Archive

  • Pricing
  • Chess
  • Syntax
  • 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