MySQL 5.1→5.6のmy.cnfの差分とか

MySQL 5.1で使ってたmy.cnfを試しに5.6で動くようにしたときの差分す。網羅的には調べてないんで他にも廃止になったパラメータはあるかもです。あくまで参考までに。 

# log-binにパラメータ指定しないと怒られます
-log-bin
+log-bin           = mysqld-bin

# old-passwordsはオン、オフだけじゃなくて引数(0, 1, 2)が必須になって、引数の値によって挙動がかわります。
-old-passwords
+old-passwords = 1

# これ指定しないと、リモートからのpre-4.1な認証方法で接続できないです
+skip-secure-auth

# これ指定しないと、pre-4.1な認証方法で接続できないです★下に追記あり
+default-authentication-plugin = mysql_old_password

# パラメータ名変更
-table_cache        = 8192
+table_open_cache   = 8192

# パラメータ廃止
-innodb_additional_mem_pool_size = 10M
+#innodb_additional_mem_pool_size = 10M

# 5.6からinnodb_file_per_tableがデフォルトで有効になったので、元の挙動にするには0を明示
+innodb_file_per_table           = 0

# 5.6から挙動が変わったパラメータ。物理ファイルをコピーしたときは元の挙動をするように指定しないといけないかも。未検証
+#innodb_checksum_algorithm       = INNODB
+#binlog_checksum                 = NONE

# パラメータ名変更
-default-table-type      = InnoDB
+default-storage-engine  = InnoDB

# innodb-pluginが組み込みのデフォルトになったのでプラグインのロードはもう不要
-ignore-builtin-innodb
-plugin-load = innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so

# パラメータ名変更?
-default-character-set = sjis
+character-set-server  = sjis

あと、5.1→5.6へのアップグレードは推奨されていなくて、5.1→5.5、5.5→5.6に上げていってね!だそうです。

ちなみに、5.1のmysqlデータベースを物理コピーして5.6を動かそうとしたらsignal 11で起動しませんでした>< ちなみにちなみに、mysql_fix_privilege_tablesは5.6からなくなったし、mysql_upgradeはmysqldが動いてないと使えないので詰みですね。おとなしく、mysqldumpを流し込んだ方がよさげ。

あと、4.0なmysqlコマンドやlibmysqlなクライアントから接続するには、

old-passwords = 1
skip-secure-auth
default-authentication-plugin = mysql_old_password

な設定が必要です。

には、old-passwordsだけでいいように書いてありますが、skip-secure-authとdefault-authentication-pluginも必要です(クッソ嵌った)。

authentication-pluginはuser@hostごとに指定可能で、現在の設定値は

select user,host,password,plugin from mysql.user;

で確認できます。

追記 default-authentication-plugin

少なくとも5.6.20では、default-authentication-plugin に指定可能なものから mysql_old_password がなくなりました。

なので mysql_old_password を指定するとエラーでmysqldが起動しません。

5.1のクライアントからの接続なら、サーバー側のmy.cnfの[mysqld]グループに skip-secure-auth と設定すれば、4.1形式の場合はそのまま普通に接続でき、pre-4.1形式の場合は --skip-secure-authオプション(libmysqlclientの場合はmysql_options()でMYSQL_SECURE_AUTHを偽にセット)をクライアント側で接続時に指定すれば接続できます。