mysql -u <username> -p<password>
を使用して端末からMySQLを起動しようとすると、次のエラーが発生します。
mysql:[ERROR]不明な変数 'sql_mode = STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION'
MySQLが.cnfファイルを検索する可能性のある3つの場所(Sudo /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
を実行して見つけた場所)のうち、存在するのは/etc/mysql/my.cnf
だけです。その中には!includedir /etc/mysql/conf.d/
を含むディレクトリしかありません。そこで、/etc/mysql/conf.d/mysql.cnf
には次の行があります。
[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
答えを探し回ったが何も見つからなかった。モードのリストから特定の「悪いモード」を除外するために、1つずつ試してみましたが、それらはすべて認識されません。
この行を完全にコメント化することによってのみ、MySQLにログインして起動することができました。
誰かが問題が何であるか知っていますか?
プラットフォームとOSの側面:
あなたの問題は非常に簡単です
次のものがあります
[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_modeはmysqlクライアントのオプションではありません。そのため、エラーメッセージはunknown variable
です。
sql_mode
とsql-mode
がmysqlクライアントオプションに表示されないことに注意してください。
$ mysql --help | grep mode
Automatically switch to vertical output mode if the
work in batch mode. Disable with --disable-pager. This
--ssl-mode=name SSL connection mode.
--ssl Deprecated. Use --ssl-mode instead.
Deprecated. Use --ssl-mode=VERIFY_IDENTITY instead.
also. Does not work in batch mode. Disable with
--binary-mode By default, ASCII '\0' is disallowed and '\r\n' is
\C and DELIMITER, in non-interactive mode (for input
expired password sandbox mode.
binary-mode FALSE
sql_mode はmysqldのオプションです。
グループヘッダーを[mysqld]
に変更するだけです
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Mysqlを再起動する必要はありません。ログインして実行するだけ
mysql> SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';