環境
- phpMyAdmin
- MariaDB
事象
phpMyAdminを利用してDUMPファイルをインポートした。
レンサバで、インポートファイルの容量制限があったので、DUMPファイルを手動で分割した。
→単純に処理の切のいいところで切り取って分割しただけ
そのファイルをインポートしたら途中まではうまくインポートされたが、
最後のファイルで以下のようなエラーが出た。
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の設定も元の状態に戻るはずです。
コメント