CentOS6のMySQLで、全文検索を行うためにMroongaを入れて試してみたかったのですが、CentOS6では標準ではMySQL5.1が入っており、バージョンを5.5以上にする必要がありました。
これが結構厄介だったのでアップデート手順をまとめました。
状況によってはmysql起動時にエラーが出たりlogfileの削除などをしなければならなくなったりするため、まずmysqldumpで全データベースのバックアップを取ってから行うようにします。
必須なのは
- パッケージのアップデート
- my.cnfの設定変更
- データベースのアップグレード
パッケージのアップデート
CentOS5やCentOS6で標準のMySQLを5.5や5.6にするというエントリーは結構あるのですが、自分の場合は最終的にこちらのエントリーが最も参考になりました。
mysqlを5.1->5.6に再インストールする
http://blog.10rane.com/2014/07/28/reinstall-mysql56/
mysql55のパッケージを利用するものだと、一旦依存パッケージをアンインストールする必要がありました。
サービス中のサーバに適用する必要ができた場合を考え、MySQLのみをアップデートする方法を探しました。
こちらの手順では、現在インストールされているMySQL5.1に依存したパッケージを一旦削除すること無く、MySQL5.6にすることが可能でした。
5.1のアンインストールの前にMySQL-shared-compatというパッケージを入れることで、既存の依存パッケージをアンインストールすること無く、5.6をインストールすることが出来るようになります。
以下のMySQL公式ダウンロードサイトのミラーから、MySQL-5.6のMySQL-shared-compatの該当するrpmを取得します。
古いバージョンのものは無くなるため、
http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/
を確認して存在している自分のOSバージョンにあったもの(「el6 | el7」と「x86_64 | i386」)を選びます。
例えばCentOS6の64bit版なら「MySQL-shared-compat-5.6.21-1.el6.x86_64.rpm」などです。
MySQL-shared-compatをインストールし、5.1のMySQLをアンインストールした後、MySQLの公式サイトで提供されているCentOS6用の設定を入れ、5.6を入れ直すという手順にになります。
wget ftp://ftp.jaist.ac.jp/pub/mysql//Downloads/MySQL-5.6/MySQL-shared-compat-5.6.21-1.el6.x86_64.rpm sudo rpm -Uvh MySQL-shared-compat-5.6.21-1.el6.x86_64.rpm sudo yum remove mysql mysql-server sudo yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm sudo yum install mysql mysql-devel mysql-server
Vagrant等で割り当てメモリ不足の対応
自分はvagrant上の仮想サーバで試していたのですが、5.6に上げると下記のようなエラーが出て起動できないという状況になりました。
InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
これはメモリが足りないために起こるため、vagrantの割り当てメモリを増やして対応します。
Vagrant+VirtualBox+CentOS環境でMySQL5.6が起動しない場合の対処法 - 憂鬱な世界にネコパンチ!
http://nekopunch.hatenablog.com/entry/2014/03/22/020507
Vagrantfile
config.vm.provider :virtualbox do |v| v.customize ["modifyvm", :id, "--memory", 1024] end
InnoDBの設定変更によりlogfileのファイルサイズ変更によるエラー対応
メモリを増やして良くなったものの、また別のエラーが発生するようになりました。
[ERROR] InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
2014-10-29 08:29:38 2528 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
これは設定変更後 ibdata1 当のファイルサイズが違ってしまったために起きるそうで、ファイルを削除して対応するしかないようです。
が、これの理由じゃない時にlogfileを削除してしまうと色々と問題が起きることがあったので、一旦バックアップとっといてからやったほうがいいと思います。
my.cnfでinnodb関連の設定後、MySQLが起動しなくなった | システム開発ブログ(システム開発のアイロベックス
http://www.ilovex.co.jp/blog/system/projectandsystemdevelopment/mycnfinnodbmysql.html
cd /var/lib/mysql sudo mkdir logfile_backup sudo mv ib_logfile0 ib_logfile1 ibdata1 logfile_backup/
my.cnfの設定変更
5.5以降からデフォルト文字コードの指定(character-set-serverに変更された)とslow-queryなどのlog出力の指定方法が変わっているため、設定を変更する必要があります。
下記ページ等を参考に、下記のように設定を行いました。
my.cnfの変更点のせいでMySQL5.6がなかなか起動しない件 - 文系プログラマによるTIPSブログ
http://treeapps.hatenablog.com/entry/2013/02/10/my.conf%E3%81%AE%E5%A4%89%E6%9B%B4%E7%82%B9%E3%81%AE%E3%81%9B%E3%81%84%E3%81%A7%E3%81%AA%E3%81%8B%E3%81%AA%E3%81%8BMySQL5.6%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84%E4%BB%B6
MySQLで文字化けしたときの対処法 - Qiita
http://qiita.com/WizowozY/items/5d7224be92aa8364a42a
Programster: MySQL 5.6 - Enable Slow Query Logging
http://programster.blogspot.jp/2014/02/mysql-enable-slow-query-logging.html
/etc/my.cnf
[mysqld] character-set-server=utf8 skip-character-set-client-handshake slow_query_log=1 slow_query_log_file=/var/log/mysqld/slow-query.log long_query_time=0.1
また、MySQL5.6にすると /etc/my.cnf の sql_mode に下記設定が加えられてしまい、これまでのSQLがcreate table時にエラーが起きる場合があるようです。
なので以下のsql_modeの行はコメントアウトします。
/etc/my.cnf
# Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
データベースのアップグレード
これで起動はするようになってくるのですが、一部操作が出来ない状況が発生しました。
これはログを見ると起動時に下記のようなエラーが出ているのでわかります。
/var/log/mysqld.log
[ERROR] Native table 'performance_schema'.'users' has the wrong structure
mysql_upgrade というコマンドが用意されているため、これを実行することでデータベースのアップグレードが行われて解決できます。
mysqldが動いている状況で利用します。
MySQLを5.1から5.6.10に上げたらなんか壊れた話 | いちよんこーど
http://14code.com/blog/20130625_504
homeberwでMySQL5.6にupgradeしたらユーザーが作成できなくて困ったときのメモ - Qiita
http://qiita.com/shikataka/items/4783a53ac2e4b2a3141f
mysql_upgrade -u root -p
でアップグレードが行われます。
mysqlを再起動してログにエラーが出ていないか確認して下さい。