my.cnfの場所にハメられた。。。

MySQLが読み込むmy.cnfは

mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 

でわかります。が、これ、読み込まれる優先順位が

  1. ~/.my.cnf
  2. /etc/my.cnf
  3. /etc/mysql/my.cnf

※ MySQL5.1.73

であることに注意しましょう。まあ、/etc/my.cnf以外そんな使わないと思いますが。
もうひとつ注意があります。

この記事を読む ≫

MySQLのメモリ設定の勘所

MySQLサーバーをダウンさせた夜は数知れず。
その度にmy.cnfの設定を見なおしてみてはトライし、治ったと思いきや突然のダウン。

サーバーがダウンしてしまう原因は何かと聞かれれば、「メモリです」と断言しましょう。
メモリ設定は諸刃の剣。
パフォーマンスを最大に引き出すこともできればそれと引き換えにサーバーをダウンさせてしまうこともできるんです。

今回はMySQLのメモリの設定の勘所というかたちで紹介しようと思います。

この記事を読む ≫

【MySQL】Field ‘カラム名’ doesn’t have default value というエラーが出てきたので調べた。ついでにSQLモードについてもまとめてみた。

MySQLにデータをINSERTしようとした時、

Field 'カラム名' doesn't have default value

というエラーが。これはSQLモードに”STRICT_TRANS_TABLES”が追加されているため、NOT NULLなフィールドにNULL(値の指定無)なINSERT・UPDATEを実行しようとするとこうなります。

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.00 sec)

設定の確認は上記のとおり、やっぱりSTRICT_TRANS_TABLESが設定されています。
これを解除するには以下のようにしてやります。

mysql> SET GLOBAL sql_mode=NO_ENGINE_SUBSTITUTION;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

もしくは「my.cnf」の設定を

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
 ↓
sql_mode=NO_ENGINE_SUBSTITUTION

のように変更して再起動します。MySQL5.6からsql_modeの設定が「STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION」になったらしいので気付かんかったとです。

っていうか、sql_modeってなんなの?どんなことができるの?ってことで調べてみました。

この記事を読む ≫