MySQLおよびMariaDBのstrictモードは、データ変更クエリで無効または欠落している値を処理する方法を制御します。これには、INSERT、UPDATE、およびCREATETABLEステートメントが含まれます。デフォルトの状態であるMySQLstrictモードを有効にすると、データが無効または欠落していると、クエリを処理しようとしたときに警告またはエラーが発生する可能性があります。
厳密モードが無効になっている場合、同じクエリで無効な値または欠落している値が調整され、単純な警告が生成されます。これは好ましい結果のように見えるかもしれませんが、厳密モードを無効にすると、特定のアクションによって予期しない結果が生じる可能性があります。たとえば、挿入される値が最大文字数の制限を超えると、制限に合うように切り捨てられます。
MySQLの厳密モードを無効にする必要がある理由はさまざまですが、最も一般的なのはサーバーがWHMCSを実行している場合です。これは、そのツールの要件です。
飛行前チェック
- これらの手順は、cPanelを使用してマネージドLiquidWebサーバーでMySQLstrictモードを無効にすることを特に目的としています。
- サーバーはMySQL5.6/5.7またはMariaDB10.xのいずれかを実行している必要があります
- このチュートリアルを実行するには、SSHを介したコマンドラインとルートレベルのアクセスが必要です。
ステップ#1:常にバックアップを作成してください!
サーバー上のファイルを変更するときは常に、事前に何らかの形式のバックアップを取ることが常にベストプラクティスです。これにより、問題が発生した場合に変更を元に戻すことができます。また、いつ、どのような変更が加えられたかを追跡するのに役立つため、有益です。
rootユーザーでSSHにログインしているときに、次の手順を実行します。
cp -a /usr/my.cnf{,.strict.bak}
cp -a /etc/my.cnf{,.strict.bak}
ステップ#2:MySQL厳密モードを無効にする
サーバーと現在の構成によっては、サーバー上の次のファイルの1つまたは両方を編集する必要がある場合があります。通常、関連する構成行はそのうちの1つにのみ含まれますが、問題を引き起こすことなくどちらかに含まれる可能性があります。したがって、通常は両方を確認するのが最善です。
ファイルを編集するには、お気に入りのコマンドラインエディタでファイルを開きます。この例では、「vim」を使用しています。
vim /usr/my.cnf
vim /etc/my.cnf
上記の各ファイル内で、次の内容の行を探します。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
`sql_mode`変数を設定している上記のような行を見つけた場合は、MySQLstrictモードを無効にするために次の行に置き換える必要があります。
sql_mode=""
この調整が完了したら、またはファイルを調整する必要がないことを確認したら、ファイルを保存して閉じます。
ステップ#3:MySQLサービスを再起動します
最後に、これらの変更を有効にするには、MySQLサービスを再起動する必要があります。これは、MySQLサービスが最初にロードされたときにのみ構成ファイルを読み取るためです。 MySQLに新しい構成ファイルの使用を強制するには、次のようにします。
CentOS 7サーバーの場合:
systemctl restart mysql
CentOS 6以前の場合:
/etc/init.d/mysql restart
サーバーでこのコマンドを発行した後、MySQLサービスが再起動され、加えられた変更が読み込まれます。すべての指示に従って完了したら、MySQLstrictモードを無効にする必要があります。
プロセスが正しく完了したことを確認するには、次のコマンドを実行できます。
mysql -e "SELECT @@sql_mode;"
出力は次のようになります。
+--------------------------------------------+
| @@sql_mode
+--------------------------------------------+
| NO_AUTO_CREATE_USER
+--------------------------------------------+
ご不明な点がある場合、またはこれらの変更を自分で行うことに不安がある場合は、HeroicSupport®までお気軽にお問い合わせください。