web-dev-qa-db-ja.com

MySQL 5.6にアップグレードした後、sql_modeを「空白」に設定します

MySQLを5.5から5.6にアップグレードした後、一部のアプリは問題に直面し、この問題を解決するためにsql_modeを空白に設定する必要があります。追加した sql_mode = ''からmy.cnfですが、mysqlの設定には影響がありませんでした。

Sql_modeを空白にするにはどうすればよいですか?

7
Pardis

プロローグ

誰もがMySQL 5.5を使用していたので、誰かが私の組織で同じことを尋ねました。すべてのDBサーバーは、過去8か月間にMySQL 5.6にアップグレードされました。一部のクライアントアプリケーションもsql_modeの変更の影響を受けていました。

根本的な原因

私はあなたがしたことがうまくいかない理由を見つけました、そして回避策は非常に簡単です。

MySQL 5.5ドキュメントによると、sql_modeのデフォルトは空白文字 です。

MySQL 5.6 Documentation によると、sql_modeはデフォルトで

  • mySQL 5.6.5以降では空の文字列
  • NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 5.6.6からGAへ

OK、あなたが座っていることを願っています。

これは、Oracleが実装したレイジーな方法です sql_mode MySQL 5.6:追加のmy.cnfファイルがあります。

走れば

cat /usr/my.cnf

次が表示されます

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

28行目?

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

解決

STEP 01/usr/my.cnfの28行目をコメント化

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

STEP 02sql_mode を手動で設定

mysql> SET GLOBAL sql_mode = '';

それが!!!

エピローグ

  • STEP 01は、mysqldの再起動による sql_mode の変更を防止します。
  • STEP 02セット sql_mode になりましたので、mysqldを再起動する必要はありません。

試してみる !!!

6
RolandoMySQLDBA

5.7.13(およびおそらく他の5.7バリアント)では、次のトリックが機能します。

my.cnf

sql_mode=ALLOW_INVALID_DATES

サーバーを再起動します。再起動したくない場合は、次のようにしてください。

set global sql_mode='ALLOW_INVALID_DATES'

その場合、mysqldはそのすべてのデフォルトを忘れ、デフォルト構成の5.5のように動作します。

5
Sasha Pachev