Mysql 5.7 strictモードを5.6の状態に戻す正しい方法は何ですか?


10

私のサーバーをMysql 5.7を含むUbuntu 16にアップグレードしました。デフォルトでは、Strict Modeが有効になっています(ただし、どの構成ファイルにもサーバーのエントリはありません)。

mysql 5.6以前で運用されていたデータベースのインポートで問題が発生しています。これは、厳密モードが原因です。デフォルトでは、以下が有効になっています。

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

5.6と同じように動作するようにmysql 5.7を構成するにはどうすればよいですか?5.6のデータベースが5.7と互換性があるようにするには?


この答えを試してください:stackoverflow.com/a/34426883/534883イベントはOSX用ですが、Ubuntuの私の場合はうまくいきました。
2016

回答:


34

厳密なSQLモードを無効にするには、サーバーにSSHでログインしroot、次のファイルを作成します。

/etc/mysql/conf.d/disable_strict_mode.cnf

ファイルを開き、次の2行を入力します。

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

次のコマンドでMySQLを再起動します。

sudo service mysql restart

この変更により、MySQL 5.7で追加された2つのSQLモード設定が無効にSTRICT_TRANS_TABLESなりONLY_FULL_GROUP_BY、一部の古いアプリケーションで問題が発生します。

厳密なSQLモードが無効になっていることの確認

このコマンドを次のように実行すると、厳密なSQLモードが無効になっていることを確認できますroot

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

ストリクトモードが無効になっている場合、そのコマンドからの出力は表示されません。

strictモードを無効にすると問題が発生する場合は、そのファイルを削除してMySQLを再起動することにより、再び有効にすることができます。

ソース:MySQL 5.7で厳密なSQLモードを無効にする方法


2
これは正解であり、承認済みとしてマークされているはずです。
budhajeewa 2016年

mysqlコマンドを実行すると、なぜ次のように返されます mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!か?
Abhishek Saini 2016年

1
@AbhishekSaini、これこれを見てください。
ビラル

1
これが答えです。これを回答として参照してください。
Lasitha Benaragama、2018

0

なしで設定sql_modeします。/etc/mysql/mysql.conf.d/mysqld.cnfSTRICT_TRANS_TABLES

下に追加[mysqld]

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.