以下の環境間で、DBを移行したときのメモです。MariaDBデビューです。
[移行元]
[移行先]
MySQLからMariaDBへのアップグレードは、公式で手順が公開されていますが、異なるプラットフォーム間でというのは見つからなかったです。
公式でのバージョンアップ手順は下記。Win→nixの手順はなし。
Upgrading from MySQL to MariaDB - MariaDB Knowledge Base
そのため、以下の手順で進めます。
- 移行元環境でmysqldumpを取得
- 移行先環境にmariadbをインストール/初期設定
- 移行先環境にmysqldumpを流し込む
移行元環境でmysqldumpを取得
以下コマンドでmysqldumpを取得します。sqlmodeをansiにして出力しておきます。kessanというのは対象DB名です。
> mysqldump --compatible=ansi --default-character-set=utf8 kessan > /data/kessan.dmp
移行先環境にMariaDBをインストール/初期設定
MariaDBのインストール方法は公式に記載されている通り。
yum による MariaDB のインストール - MariaDB Knowledge Base
MariaDB用のyumリポジトリを追加して、yumでインストールします。
# vi /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 # yum install MariaDB-server MariaDB-client
初期設定ですが、MySQLと変わりないようです。設定ファイルである「/etc/my.cnf」を見ると、特に設定されている項目はなく、「/etc/my.cnf.d」配下をincludeしているのが分かります。
# cat /etc/my.cnf # This group is read both both by the client and the server # use it for options that affect everything # [client-server] # # include all files from the config directory # !includedir /etc/my.cnf.d
実際に「/etc/my.cnf.d」配下の設定ファイルを見ても、結局何も設定が入っていませんでした。なので、例により「/usr/share/mysql/my-XXXX.cnf」より必要サイズに見合ったサンプル設定ファイルをコピーしてきます。今回は「my-huge.cnf」を持ってきます。
# mv /etc/my.cnf /etc/my.cnf.bk # mv /usr/share/mysql/my-huge.cnf /etc/my.cnf
設定すべきパラメータについて調べてみたのですが、MariaDB 10.1用に検討すべき値が見つからなかったので、MySQL 5.6時代のものを踏襲します。パラメータについては以下の情報を参考にしています。
チューニング注意点
MySQL 5.6のインストール後にチューニングすべき項目 | Yakst
MySQLをインストールしたら、必ず確認すべき10の設定 | Yakst
文字コードの設定について
Setting Character Sets and Collations - MariaDB Knowledge Base
追加で設定した項目は以下です。
[client] ... default-character-set = utf8 [mysqld] ... innodb_data_home_dir = /data/mariadb/data innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend innodb_log_group_home_dir = /data/mariadb/log innodb_buffer_pool_size = 1024M innodb_additional_mem_pool_size = 20M innodb_log_file_size = 256M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_flush_neighbors = 0 sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY' skip_name_resolve = 1 collation-server = utf8_unicode_ci init-connect = 'SET NAMES utf8' character-set-server = utf8 [mysql] ... default-character-set=utf8
且つ、異なるOS間で移行する場合に考慮すべき事項があります。WindowsのMySQLではDB名およびテーブル名が内部的には小文字で格納されており(まあ、WindowsのOS自体が大文字と小文字を区別しないですからね)、一方でLinuxのMySQLでは大文字と小文字を区別するようなっています。それにより、何も考えずに移行してしまうとエラーとなってしまうらしいです。以下のサイトに詳しいです。
MySQL の lower_case_table_names について,テーブル名とデータベース名の中の大文字小文字について - その手の平は尻もつかめるさ
なので、my.cnfに以下のパラメータを設定し、Linux側でも大文字と小文字を区別させないようしてあげます。
[mysqld] ... lower_case_table_names=1
で、起動します。
# systemctl start mariadb
ここでSELinuxを有効にしている場合、ハマリポイントがあるので以下に注意です。
SELinux有効時に、MariaDBの起動に失敗する件 - goodbyegangsterのブログ
自動起動の設定はこれ。
# systemctl enable mariadb
「mysql_secure_installation」コマンドを用いて、基本的なセキュリティ設定をしましょう。rootユーザのパスワードを設定し、その他の質問項目には「Y」で回答します。
# mysql_secure_installation
一度ログインして、インポート用のDBを作成し、文字コードの設定がutf8であることを確認しておきます。
# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.1.21-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database kessan character set utf8; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | kessan | | mysql | | performance_schema | +--------------------+ MariaDB [(none)]> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
移行先環境にmysqldumpを流し込む
最後にdumpファイルをインポートして完了です。
# mysql -uroot -p --default-character-set=utf8 kessan < /data/kessan.dmp Enter password: