MySQLからMariaDBへ移行するというニュースをちらほら耳にするようになりましたので、実験用のPCで移行作業を行ってみました。主要なディストリビューションのパッケージがこちらに用意されていますので、手っ取り早くパッケージを利用します。
OSはUbuntu12.04、MySQL、MariaDBは共に5.5を使用しました。
なお、移行作業はリスクを伴いますので、重要なデータのバックアップは勿論ですが、作業は自己責任でお願いいたします。
インストール
パッケージを使ったインストールでは、MySQLを置き換えますので注意してください。
1 2 3 4 5 6 |
$ sudo apt-get install python-software-properties $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db $ sudo add-apt-repository 'deb http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/5.5/ubuntu precise main' $ sudo apt-get update $ sudo apt-get install mariadb-server |
接続して文字コードの確認
コマンド類はMySQLと同じです。
1 |
$ /home/miki% mysql -u root -p |
文字コードはUTF-8を使用している方が多いと思いますが、インストール直後は以下のような設定になっていました。/etc/mysql/debian.cnfの文字コード関連のコメントを外してUTF-8に変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MariaDB [(none)]> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) |
起動、停止の確認
起動スクリプトは、書き換わりますのでそのままでは動作しないかもしれません。原因は様々ですが、エラーログを参考にすれば特定しやすいと思います。エラーログはmy.cnfに以下の行を追加すると出力されます。
1 |
log_error = /var/log/mysql/error.log |
作業した環境では以下のようなエラーがありました。MariaDBに移行したことが原因ではないものも含まれます。
1. 起動スクリプトでstatusが表示できない
1 2 3 4 |
$ /etc/init.d/mysql status /usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)' * |
debian-sys-maintのパスワードが/etc/mysql/debian.cnfで定義されているものと異なっているためで、パスワードを合わせることで解決。
2. 起動スクリプトでstopが効かない -> エラーログの確認
1 |
[Warning] Using unique option prefix myisam_recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead. |
my.cnfのmyisam_recoverというパラメータをmyisam_recover_optionsに変更することで解決。
3. 起動スクリプトでstopが効かない -> エラーログの確認
1 |
[ERROR] Can't open shared library '/usr/lib/mysql/plugin/ha_groonga.so' (errno: 0 cannot open shared object file: No such file or directory) |
使っていないplugin (全文検索エンジンgroonga) の設定がDBに残っているためことが原因。以下のテーブルからエントリを削除することで解決。
1 2 3 4 5 6 7 |
MariaDB [mysql]> select * from plugin; +---------+---------------+ | name | dl | +---------+---------------+ | groonga | ha_groonga.so | +---------+---------------+ 1 row in set (0.00 sec) |
1 2 3 4 5 6 7 |
MariaDB [mysql]> select * from mysql.func; +--------------------+-----+---------------+----------+ | name | ret | dl | type | +--------------------+-----+---------------+----------+ | last_insert_grn_id | 2 | ha_groonga.so | function | +--------------------+-----+---------------+----------+ 1 row in set (0.00 sec) |
弊社で開発したWebシステム (ストレージエンジンはInnoDB) をいくつかチェックしてみましたが、特に問題なく動作しており、比較的簡単に移行できることが確認出来ました。
5.5でデフォルトで利用できるストレージエンジンは以下の通りです。Comment欄を見れば概要はわかりますが、詳しくはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES | | InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | SPHINX | YES | Sphinx storage engine | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ |