MySQL5.7とMariaDB10.1のレプリケーション環境を構築
MySQLをマスターサーバー、
MySQLと互換性を持つMariaDBをスレーブサーバーとして設定し、
両サーバー間でレプリケーション環境を構築してみました。
Vagrant で立てた MySQL 5.7 (mysql-node1) 1台 + MariaDB10.1 (maria-node1) 1台の環境でテストしています。
構築概要
★ vagrant上でMySQLとMariaDBをそれぞれ一台ずつ構築します。
★ 今回のレプリケーション構築ではGTIDを無効にしています。
★ MySQLをマスターサーバー、MariaDBをスレーブサーバーとして構築します。
構築手順
0.環境
■ CentOS 6.9
■ MySQL 5.7.18
■ MariaDB 10.1.24
1.MySQL・MariaDBサーバー構築
- 下記のVagrantfileを利用して以下の2サーバをVagrant上で構築します。
- mysql-node1:192.168.40.10
- maria-node1:192.168.40.11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure(2) do |config| config.vm.synced_folder ".", "/vagrant", type:"virtualbox" if Vagrant.has_plugin?("vagrant-timezone") config.timezone.value = "Asia/Tokyo" end config.vm.define "node1" do |node| node.vm.box = "centos/6" node.vm.hostname = "mysql-node1" node.vm.network :private_network, ip: "192.168.40.10" end config.vm.define "node2" do |node| node.vm.box = "centos/6" node.vm.hostname = "maria-node1" node.vm.network :private_network, ip: "192.168.40.11" end end |
- 全サーバー間で名前解決できるように以下の内容を全サーバーの/etc/hostsファイルに追記します。
1 2 |
192.168.40.10 mysql-node1 192.168.40.11 maria-node1 |
- 全ノードにおいてselinux、iptables、ip6tablesを一時的にオフにします。
1 2 3 |
# setenforce 0 # service iptables stop # service ip6tables stop |
2.MySQL5.7をインストール
(1)以下のコマンドを実行しrpmパッケージをインストールします。
1 |
[mysql-node1] # yum -y install http://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm |
※2017/6/14時点の最新版はmysql57-community-release-el6-11.noarch.rpmです。
(2)以下のコマンドを実行しMySQLをインストールします。
1 2 |
[mysql-node1] # yum -y remove mysql-libs [mysql-node1] # yum -y install mysql-server |
1 2 3 4 5 6 |
Installed: mysql-community-server.x86_64 0:5.7.18-1.el6 Dependency Installed: mysql-community-client.x86_64 0:5.7.18-1.el6 mysql-community-common.x86_64 0:5.7.18-1.el6 mysql-community-libs.x86_64 0:5.7.18-1.el6 |
3.MariaDB10.1をインストール
- MariaDBのyumリポジトリファイルを作成します。
※MariaDBの公式サイトよりリポジトリファイルに記載されている内容をコピーし、
「/etc/yum.repos.d/」配下にファイルを作成します。
1 |
[maria-node1] # vi /etc/yum.repos.d/maria.repo |
1 2 3 4 5 6 7 |
# MariaDB 10.1 CentOS repository list - created 2017-06-14 05:14 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 |
- MariaDBをインストールします。
(1)以下のコマンドを実行しMariaDBをインストールします。
1 |
[maria-node1] # yum -y install MariaDB-server |
4.MySQL-MariaDB間のレプリケーション構築
(1)マスターサーバー及びスレーブサーバーのmy.cnfファイルに以下の内容をそれぞれ追加します。
- マスターサーバー用のmy.cnf。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[mysql-node1] # vi /etc/my.cnf [mysqld] # 各MySQLサーバを識別するためのIDの設定 server-id=1 # バイナリログの有効化 log_bin=mysql-bin # バイナリログをコミットと同時にディスクに書込む sync_binlog=1 # 基本設定 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 文字コードの設定 character-set-server = utf8 [mysqld_safe] log-error=/var/log/mysql/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
- スレーブサーバー用のmy.cnf。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[maria-node1] # vi /etc/my.cnf [mysqld] # 各MySQLサーバを識別するためのIDの設定 server-id=2 # 更新を禁止する(スレーブ用) read_only # 基本設定 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 文字コードの設定 character-set-server = utf8 log-error=/var/lib/mysql/mysqld.log |
(2)MySQLを起動しサンプルDB(worldデータベース)を入れます。
※公式サイトから「world database」のzipファイルをダウンロードし、/tmp/配下に配置し解凍します。
- MySQLを起動し初期rootユーザーのパスワード確認後、「mysql_secure_installation」を実行します。
1 2 3 |
[mysql-node1] # service mysqld start [mysql-node1] # cat /var/log/mysqld.log | grep "temporary password" [mysql-node1] # mysql_secure_installation |
※「mysql_secure_installation」実行時に設定するパスワードの条件は以下です。
★ パスワードが最低 1 つの数値文字を含む
★ 1 つの小文字および大文字を含む
★ 1 つの特殊文字 (英数字以外) を含む
- 以下のコマンドを実行しMySQLにworldデータベースを入れます。
1 |
[mysql-node1] # mysql -u root -p < world.sql |
(3)マスターサーバー側のレプリケーション構築の準備を行います。
- MySQLにログイン後にレプリケーションユーザーを作成します。
1 2 3 4 |
[mysql-node1] # mysql -u root -p mysql> CREATE USER 'repl'@'192.168.40.11' IDENTIFIED BY 'password'; mysql> GRANT ALL ON *.* TO 'repl'@'192.168.40.11'; |
- マスターデータベースのダンプファイルを作成します。
1 2 3 4 5 6 7 |
[mysql-node1] # mysqldump -u root -p \ > --all-databases \ > --events \ > --single-transaction \ > --master-data=2 \ > --hex-blob \ > --default-character-set=utf8 > /tmp/master_db.sql |
- 作成したダンプファイルをスレーブサーバーの「/tmp/」配下にコピーします。
1 |
[mysql-node1] # scp /tmp/master_db.sql vagrant@192.168.40.11:/tmp/ |
(4)スレーブサーバーのMariaDBを起動し、ダンプファイルを読み込みます。
- 以下のコマンドを実行しダンプファイルを読み込みます。
1 |
[maria-node1] # mysql -u root < master_db.sql |
(5)MySQL-MariaDB間のレプリケーション構築
- ダンプファイルを作成した時点のマスターサーバーのバイナリログファイル名(MASTER_LOG_FILE)と、開始位置(MASTER_LOG_POS)を確認します。
1 2 |
[mysql-node1] # head -n 100 /tmp/master_db.sql | grep CHANGE -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=691556; |
- スレーブサーバー側にてレプリケーションの設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
[maria-node1] # mysql -u root -p Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5 Server version: 10.1.24-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='192.168.40.10', -> MASTER_PORT=3306, -> MASTER_USER='repl', -> MASTER_PASSWORD='password', -> MASTER_LOG_FILE='mysql-bin.000004', -> MASTER_LOG_POS=691556; Query OK, 0 rows affected (0.02 sec) MariaDB [(none)]> START SLAVE; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.40.10 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 154 Relay_Log_File: maria-node1-relay-bin.000003 Relay_Log_Pos: 415 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 154 Relay_Log_Space: 885 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservative 1 row in set (0.00 sec) MariaDB [(none)]> |
5.レプリケーションの同期確認
- スレーブサーバー側の現存するデータベースを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | world | +--------------------+ 5 rows in set (0.00 sec) MariaDB [(none)]> |
- マスターサーバー側にて新規データベースを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
[mysql-node1] # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.18-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world | +--------------------+ 5 rows in set (0.06 sec) mysql> CREATE DATABASE hoge; Query OK, 1 row affected (0.03 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | hoge | | mysql | | performance_schema | | sys | | world | +--------------------+ 6 rows in set (0.01 sec) mysql> |
- スレーブサーバー側でhogeデータベースが作成されているかについて確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | hoge | | information_schema | | mysql | | performance_schema | | test | | world | +--------------------+ 6 rows in set (0.00 sec) MariaDB [(none)]> |
備考
今回ではMySQLをマスターサーバー、MariaDBをスレーブサーバーとしてレプリケーションを構築しましたが、MariaDBをマスターサーバーとし、MySQLをスレーブサーバーとしての構築も可能です。