以下の内容はhttps://next4us-ti.hatenablog.com/entry/2024/12/26/145629より取得しました。


オラ、internal_tmp_disk_storage_engineなんてパラメータ知らねえぞ~!

はじめに

この記事は MySQL Advent Calendar 2024 シリーズ2 1日目の記事です。

せっかくシリーズ2があるので、25日過ぎたけど簡易的なネタでもぶっこんでみようかと。

何をしてどうなった?

アップグレードの時に以下のエラーメッセージが出てアップグレードできなかった。

エラーメッセージ

エラーログに以下のようなメッセージが出ます。

[ERROR] [MY-000067] [Server] unknown variable 'internal_tmp_disk_storage_engine=InnoDB'.

理由

internal_tmp_disk_storage_engineってパラメータなんですが、5.7.5で入り8.0.16で削除されました。

そのため、8.0.16よりも前のバージョン(※5.7.5以降)でmy.cnfやmy.iniにinternal_tmp_disk_storage_engineを設定して、それをそのまま使って起動すると上記のようなメッセージが出るというわけです。

オンディスク内部一時テーブルのエンジンを設定できるパラメータで、デフォルトがInnoDBなんですが、それをMyISAMにすることができました。

理由はいくつかありますが、InnoDBMyISAMよりもサイズ的な制限が多いこと、内部一時テーブルがでかくなりやすくて再起動しないと縮小できないのが困ること、またはバグ対応などでしょう。

場合によってはワーニングに

ちなみに、これ、面白いのが、my.cnf | my.ini に書かれてる場合だけで、SET PERSISTで設定した場合はエラーじゃなくて以下のようにワーニングに格下げするところです。

[Warning] [MY-013185] [Server] Currently unknown variable 'internal_tmp_disk_storage_engine' was read from the persisted config file.

ワーニングなんで起動はします。でも、RESET PERSISTで削除しといたほうがログ的にはいいでしょうね。

対応方法

8.0.16以上にアップグレードした際に、MySQL Server起動前にmy.cnfからinternal_tmp_disk_storage_engineパラメータの記述を削除するかコメントアウトすればいいだけです。

ワーニングの場合でも先ほども書いたようにRESET PERSISTで削除しとくことをお勧めします。

ところで、なんでinternal_tmp_disk_storage_engineは削除されたんだろ?

Bug #91377対応でしょう。

しかし、削除したことで・・・

internal_tmp_disk_storage_engineがInnoDBで固定化されたことで別のバグ(Bug #95285)が回避できないという問題もありました。

これについては、5.7では5.7.31に、8.0では8.0.21にアップグレードすることで修正されました。

そのため、8.0.16から8.0.20を使用している場合はこのバグの回避策が無いので、アップグレードが必要という話になりますね。

(8.0の迷走がこの辺はすさまじい頃ですね・・・)

関連ドキュメント

終わりに

実はこれ書いているのアドカレ終わった12月26日w

休みにMySQLのことを色々と見直そうと思ってデカい記事書きたかったんだけど、なかなかまとまらないので小出しにできるやつはそういう風にしようと思って書いているのでした。




以上の内容はhttps://next4us-ti.hatenablog.com/entry/2024/12/26/145629より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14