アプリが古いバージョンのMySQL用に作成されており、MySQL 5.7の厳密なSQLモードと互換性がない場合は、厳密なSQLモードを無効にすることができます。たとえば、WHMCS6やCraft2などのアプリは厳密なSQLモードをサポートしていません。
WHMCS 7を使用している場合は、WHMCS7用のMySQLのカスタマイズに関する記事を参照してください。厳密なSQLモードを無効にするには、 rootとしてサーバーにSSHで接続します。 nanoを使用して新しい構成ファイルを作成します または選択したエディター:
sudo nano /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
CTRL + Xを押してファイルを保存します 、次に y 、次に ENTER 変更を確認します。
最後に、次のコマンドでMySQLを再起動します。
sudo service mysql restart
この変更により、MySQL 5.7で追加された2つのSQLモード設定STRICT_TRANS_TABLESとONLY_FULL_GROUP_BYが無効になり、一部の古いアプリケーションで問題が発生します。
厳密なSQLモードが無効になっていることの確認
このコマンドをrootとして実行すると、厳密なSQLモードが無効になっていることを確認できます。 :
sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'
strictモードが無効になっている場合、そのコマンドからの出力は表示されません。
ストリクトモードを無効にすると問題が発生する場合は、そのファイルを削除してMySQLを再起動することで再度有効にできます。
厳密なSQLモードエラーはどのように見えるか
アプリが厳密なSQLモードと互換性がない場合、次のようなSQLエラーが頻繁に発生します。
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'yourdbname.tblannouncements.date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_byと互換性がありません