さくらのVPS-MariaDBでレプリケーション設定をする
さくらのVPSでMariaDBのレプリケーション設定をしていきたいと思います。前提として下記の条件が整っているとします。
- DBサーバー1(Master):192.168.0.2
- DBサーバー2(Slave):192.168.0.3
- CentOS7
- MariaDB:mysql Ver 15.1 Distrib 5.5.47-MariaDB
DB2台のOS、MariaDBのバージョンは二つとも同じとします。
マスター側の設定
レプリケーションのユーザー設定
- レプリケーションユーザー:repl
- レプリケーションは192.168.0.0/24のネットワークからの許可
- レプリケーションユーザーのパスワードはpasswordとします
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.0/255.255.255.0' IDENTIFIED BY 'password';
my.cnfに設定を追記
my.confに設定を追記します。ここで間違ってはいけないのは[mysqld]の下に追記します。[mysqld_safe]に追記すると失敗しますので気をつけてください。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd #ここに追記 #add log_bin=/var/log/mariadb/binlog server-id=1 expire_logs_days=5 [mysqld_safe] ・・・
このようにします。
- log-bin でレプリケーションに必要なバイナリログを有効にします
- server-id はレプリケーションを構成するサーバー内で被らないように割り振ります
- expire_logs_days はバイナリログの保存日数です。レプリケーションに間が空いた時に復旧できるようにする期間を指定します
マスターのダンプ
マスター側のデータベースをダンプするため設定をします。
rootユーザーでDBにアクセス
mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2862 Server version: 5.5.47-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
読み書きロックを行います
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec)
バイナリログのFileとPositionを確認します
SHOW MASTER STATUS; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000001 | 33424169 | | | +---------------+----------+--------------+------------------+
mysqldump でマスターのDBをファイルに書き出します
mysqldump -u root -p --all-databases --lock-all-tables > /tmp/dbdump.db Enter password:
読み書きロックを解除します
mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2862 Server version: 5.5.47-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> UNLOCK TABLES;
SCPでデータを送る
ダンプしたファイルをスレーブ側へ送ってあげます。
[root@] # scp /tmp/dbdump.db root@192.168.0.3:/tmp/ password:パスワードを入力
MariaDBの再起動
[root@] # systemctl restart mariadb
再起動と転送できたらこれでマスター側の構築を終了します。次にスレーブ側の設定をします
スレーブ側の設定
スレーブ側は新しいターミナルを立ち上げても現在のマスターからsshでログインしてもどちらでも構いません
ssh root@192.168.0.3 root@192.168.20.3's password: password:
mysql_install_db を実行
[root@] # mysql_install_db --user=mysql
my.cnfに設定を追加
my.cnfに設定を追加します。今回設定するのはサーバーIDとデータベースを読み込み専用にするためのものです。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd #add server-id=2 #追加 read_only #追加 [mysqld_safe] ・・・
これも設定の記述する位置に注意が必要です。mysqld_safeに記述しないように注意が必要です。
- server-idはMySQLのホストを区別するための番号です。複数のスレーブを設置する場合、被らないように別々の数字を割り当ててください
- read_onlyはデーターベースを読み込み専用にするためのオプションです。スレーブに誤って更新クエリを行ってしまうとレプリケーションが止まってしまうため、それを防止する目的で設定します
MariaDBの再起動
スレーブ側のMariaDBが起動していた場合は再起動をしてください。もし起動していない場合は起動してください。
#再起動コマンド [root@] # systemctl restart mariadb #起動コマンド [root@] # systemctl start mariadb
となります。
マスターで書き出したデータベースの復元
mysql --user=root > /tmp/dbdump.db
rootのパスワードの変更
mysqladmin -u root password 'password'
passwordの所に新しいパスワードをいれてください。
スレーブDBの設定
mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2862 Server version: 5.5.47-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, 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.0.2', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=33424169; Query OK, 0 rows affected (0.25 sec)
スレーブをスタートします
MariaDB [(none)]> START SLAVE; Query OK, 0 rows affected, 1 warning (0.01 sec)
状態の確認
レプリケーションが無事にできているか確認します。
マスター側
mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2862 Server version: 5.5.47-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW MASTER STATUS; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000001 | 55101492 | | | +---------------+----------+--------------+------------------+
スレーブ側
mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2862 Server version: 5.5.47-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.2 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000001 Read_Master_Log_Pos: 55101492 Relay_Log_File: mariadb-relay-bin.000002 Relay_Log_Pos: 55071500 Relay_Master_Log_File: binlog.000001 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: 55101492 Relay_Log_Space: 55071796 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 1 row in set (0.00 sec)
- Slave_IO_RunningとSlave_SQL_RunningがYesになっていること
- Master_Log_File と Read_Master_Log_Pos がマスターで確認したFile、Positionと一致していること
一致していればレプリケーション成功です。
参考サイト
http://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS