web-dev-qa-db-ja.com

HomebrewがインストールされたMySQLサーバーのSTRICT_TRANS_TABLESを無効にするにはどうすればよいですか?

MySQLは最近(5.6?)、デフォルトのSQLモードをより制限的に変更したようです。新しいモードは「STRICT_TRANS_TABLES、NO_ENGINE_SUBSTITUTION」です。私は変更が好きですが、私が維持している少なくとも1つのWebサイトはそうではありません。デフォルトを持たない列の値を指定しないため、INSERTクエリは失敗します。以前は、MySQLは列タイプごとにデフォルト値を推測していました。

今のところ、STRICT_TRANS_TABLESを無効にします。私が追加しました sql_mode=NO_ENGINE_SUBSTITUTIONからmy.cnfとサーバーを再起動しましたが、厳密な設定は維持されます。私は何を間違えていますか?

MySQLバージョン:

$ mysqld --version
mysqld  Ver 5.6.15 for osx10.9 on x86_64 (Homebrew)

my.cnf:

$ cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

# not sure if this is needed but it doesn't seem to have an effect either way
[mysqld_safe]
sql_mode=NO_ENGINE_SUBSTITUTION

Mysqldがmy.cnfの設定を使用することを確認します。

$ mysqld --print-defaults
mysqld would have been started with the following arguments:
--sql_mode=NO_ENGINE_SUBSTITUTION

Mysqldが現在実行されていないことを確認します。

$ ps aux | grep mysql
metaphile        1022   0.0  0.0  2432784    600 s003  S+    3:10PM   0:00.00 grep mysql

Homebrewが提供するプロパティリスト:

$ cat ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>homebrew.mxcl.mysql</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/mysql/bin/mysqld_safe</string>
    <string>--bind-address=127.0.0.1</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/var</string>
</dict>
</plist>

MySQLを起動し、SQLモードを確認します。

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ mysql -uroot
...
mysql> SELECT @@GLOBAL.sql_mode, @@SESSION.sql_mode;
+--------------------------------------------+--------------------------------------------+
| @@GLOBAL.sql_mode                          | @@SESSION.sql_mode                         |
+--------------------------------------------+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+--------------------------------------------+
1 row in set (0.00 sec)

ああ!

15
Metaphile

@ssnobodyの回答により、システム全体でmy.cnfファイルを検索するようになりました。 mysqld --help --verboseでリストされた場所をすでに確認しました。私のサーバーは/usr/local/Cellar/mysql/5.6.15/my.cnfを使用していることがわかりましたが、これはサンプルファイルであると誤って想定していました。ファイルは、/usr/local/mysqlを含む標準の場所からシンボリックリンクされていません。

誰もこれにいくらか光を当てることができますか?それは自作のものですか?見つけることができるすべてのmy.cnfにテスト変更を加えることを除いて、どうすればこれを理解できましたか?

7
Metaphile

Centos 6.5では、/usr/my.cnfを編集して設定する必要がありました(/etc/my.cnfが存在し、バインドが正常に設定されていた場合でも)

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
21
vd1008

チェックしてください /usr/local/mysql/my.cnfそして問題のある設定をコメントアウトします。

ソース: OS XのMySQL厳格モード

1
ssnobody

特定のスクリプトのSTRICT_TRANS_TABLESを無効にするには、

set session sql_mode = '';

スクリプトでdbハンドルを初期化するとき。また、NO_ENGINE_SUBSTITUTIONが無効になるため、

set session sql_mode = 'NO_ENGINE_SUBSTITUTION';

そのままにしておきます。

1
Will

編集する必要があります:

/usr/my.cnf 

そしてセット

sql_mode=NO_ENGINE_SUBSTITUTION
1
Yan Ouellet