web-dev-qa-db-ja.com

MySQL 5.7.15は厳格モードをオフにします

mysql Ver 14.14 Distrib 5.7.15、EditLineラッパーを使用するLinux(x86_64)用

MYSQLインスタンスを構成して、現在これを行っているより厳しい設定の一部をオフにしようとしています。

   mysql> select @@GLOBAL.sql_mode;
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    | @@GLOBAL.sql_mode                                                                                                                         |
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

Sudo vi /etc/mysql/mysql.cnf

[mysqld]
sql-mode=""

mysqldの再起動。次に、グローバルSQLモードを確認してください。

mysql> select @@GLOBAL.sql_mode;
        +-------------------------------------------------------------------------------------------------------------------------------------------+
        | @@GLOBAL.sql_mode                                                                                                                         |
        +-------------------------------------------------------------------------------------------------------------------------------------------+
        | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

誰もが次に何をすべきかについてのアイデア。この設定を永続的に維持することができず、試行する他のファイルを表示できません。

編集:返品を検索:

/etc/alternatives/my.cnf
/etc/mysql/my.cnf
/etc/mysql/my.cnf.fallback
/var/lib/dpkg/alternatives/my.cnf

デフォルトのオプションは、次のファイルから指定された順序で読み取られます。/etc/my.cnf /etc/mysql/my.cnf〜/ .my.cnf

3
Squiggs.

Aug 05, 2015で、投稿に回答しました MySQL 5.6にアップグレードした後、sql_modeを「空白」に設定します

私の回答では、Oracleがmy.cnfという追加の/usr/my/cnfを作成する方法を説明しました。

これがあります(これはMySQL 5.6であることを覚えておいてください)

# 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

一部の開発者は、コードにそれを置くことをあきらめて、いくつかの認知症のショートカットとして構成ファイルを平手打ちしたと思います。

そのようなファイルがある場合は、最後の行をコメント化してmysqldを再起動してください。

MySQL 5.7のsql_mode のデフォルト値は前述のとおりです

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

更新2017-04-27 17:23 EDT

私はmysqld --help --verbose | head -13を実行し、これを取得しました

$ mysqld --help --verbose | head -13
2017-04-27T21:17:13.237941Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2017-04-27T21:17:13.238060Z 0 [Warning] Changed limits: max_connections: 214 (requested 500)
2017-04-27T21:17:13.238065Z 0 [Warning] Changed limits: table_open_cache: 400 (requested 2048)
mysqld  Ver 5.7.17-log for Linux on x86_64 (MySQL Community Server (GPL))
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Starts the MySQL database server.

Usage: mysqld [OPTIONS]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

mysqld --help --verbose 2>/dev/null | head -13 | tail -1を実行してください

言及されたすべてのファイルを確認する

更新2017-04-29 19:03 EDT

MySQL 5.6にアップグレードした後にsql_modeを「空白」に設定して言及した/usr/my.cnfトリック見出し「Changes in MySQL 5.6」 の下でMorgan Tockerによって書かれた投稿。これはMySQL 5.7であるため、 sql_mode のこのベイトアンドスイッチ方式は、この場合には適用されない可能性があります。

以前のコメント で述べたように、 sql_mode を追加することで成功しましたこれを/etc/my.cnf

[mysqld]
sql_mode=''

Mysqldを再起動する必要はありません。あなたはmysqlにログインして実行します

SET GLOBAL sql_mode='';
SELECT @@GLOBAL.sql_mode;

これは着信接続を空白に設定します sql_mode

これにより、現在確立されている接続の sql_mode は変更されません。

Mysqldを再起動すると、すべての着信接続で空白になることが保証されます。

Mysqldを再起動できない場合は、アプリ/ウェブサーバーを再起動して切断する必要があります。次に、アプリ/ウェブサーバーを再起動して接続を確立します。

これを試して、結果をお聞かせください。

3
RolandoMySQLDBA