MySQLでDUMPファイルを複数に分割してインポートしたら最後に「#1231 – 変数 ‘time_zone’ に値 ‘NULL’ を設定できません。」とか怒られる | クズリーマンのカス備忘録

MySQLでDUMPファイルを複数に分割してインポートしたら最後に「#1231 – 変数 ‘time_zone’ に値 ‘NULL’ を設定できません。」とか怒られる

animal_dolphin-iruka-mysql-logo MySQL
スポンサーリンク

環境

  • phpMyAdmin
  • MariaDB

事象

phpMyAdminを利用してDUMPファイルをインポートした。

レンサバで、インポートファイルの容量制限があったので、DUMPファイルを手動で分割した。

→単純に処理の切のいいところで切り取って分割しただけ

そのファイルをインポートしたら途中まではうまくインポートされたが、
最後のファイルで以下のようなエラーが出た。

ss

1231 – 変数 ‘time_zone’ に値 ‘NULL’ を設定できません。

原因

DUMPファイルの最初のところで、time_zoneがUTCに変更されていた。

それで、最後に、もともとのtime_zoneに戻すという処理が、上記のスクショに載っている

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

の部分。

インポートするDUMPファイルを複数に分けてしまったので、発生した。

最初にインポートしたファイルで以下の変数設定を行っている。

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

これが、インポートを分けて行ったために最後のDUMPファイルでは

「@OLD_TIME_ZONEなんていう変数無いよ!=内容がNULL」

となって、エラーとなってしまったことが原因。

そのため、今回の「@OLD_TIME_ZONE」変数以外も同じようなことをしてる変数は同じように怒られる。

複数ファイルに分割する場合は、DUMPの最初の変数部分と、最後の変数を戻す部分を各分割したDUMPファイルの前後につけるべき っぽい。

めんどー。

→最初の変数変更の部分だけで良くて、変数を元に戻す部分は不要かも。

MySQLの上記のような変数の変更は、セッションごとでしか有効でないので、インポート処理が終わったら勝手にもともとの変数の値に戻るはず。

ChatGPT先生:

MySQLでは、”SET TIME_ZONE” のようなコマンドを使用してタイムゾーンを設定することができます。この設定はセッションレベルでのみ有効であり、セッションが終了すると元の設定に戻ります。したがって、インポートが完了した時点でセッションが終了し、TIME_ZONEの設定も元の状態に戻るはずです。

コメント

タイトルとURLをコピーしました