[自分用メモ]MariaDB使用時に”InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.”になる

ContainerSoftware

docker環境において、基本的にはMySQLよりもMariaDBを指定することが多いのですが、そこもあまり深く考えずにタグを :latest で設定していたところ掲題のようなエラーが発生し、MariaDBが起動しないことがありました。

原因?

どうやら参考した記事によると、MariaDB 10.6からは innodb_read_only_compressed オプションが既定で有効になったことのためのようです。

対応

docker環境においては、command にて以下のコマンドを追加し、それぞれのオプションを無効化することで今回の問題に対応できるそうです。

  • --innodb_strict_mode=OFF
  • --innodb_read_only_compressed=OFF
  • innodb_read_only_compressed
    • ROW_FORMAT=COMPRESSEDのテーブルは読み取り専用になります。
  • innodb_strict_mode
    • XtraDB/InnoDBは特定のケースで警告ではなくエラーを返すようになり、厳格なSQLモードに似た状態になります。
mysql:
  image: mariadb
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_USER: db
    MYSQL_PASSWORD: db
    MYSQL_DATABASE: db
  command:
    - "--character-set-server=utf8mb4"
    - "--collation-server=utf8mb4_unicode_ci"
    - "--innodb_strict_mode=OFF"
    - "--innodb_read_only_compressed=OFF"
  volumes:
          - ./db:/var/lib/mysql

zabbix-dockerで構築した環境で、かつMariaDBを latest のタグで運用していて、何も考えずに docker pull して起動しなくて慌てました。検証環境だというのもあって大きな影響があったわけではないですが、重要な環境の場合はタグでしっかり管理して運用把握するようにしましょう。

ちなみにzabbix-dockerで公開されているdocker-compose.ymlには、そのままだとMariaDBは設定されていない(筆者がMySQLから置き換えた)ものをなので、普通はこのような状況にはならないはずです。

MariaDB 10.6未満からのバージョンアップを計画している人はご注意ください。

参考

InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE. と言われデータベースに書く込めないときの解決法 | ゆっくり遅報
mariadb10.6から「innodb_read_only_compressed」が追加されこれがデフォルトでONになっています。 この場合これと「innodb_strict_...
Open Source Database (RDBMS) for the Enterprise | MariaDB
MariaDB is the leading enterprise open source database with features previously only available in costly proprietary dat...
InnoDB Strict Mode
InnoD strict mode makes InnoDB more reliable.
この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました