MySQLのレプリケーション設定
CentOS にMySQLのレプリケーションを構築
MHAを構築してみようと思い、その為にはMySQLのレプリケーション環境が必要なのでMaster、SlaveでのMySQLレプリケーション環境を構築しました。その際の作業メモです
MySQLのレプリケーションですが、MySQL データベースをスレーブサーバー に複製できる機能です。
構築した環境ですが、以下のように仕様で構築します。MHAを導入予定のサーバのOSがCentOS 6.x系の為、CentOS 7.xではなくCentOS 6.8で構築します。構築方法にCentOS 7.xと違いがさほど無いので自動起動のコマンド、サービスの起動のコマンドなどはCentOS 7.xに置き換えればOKと思います
IPアドレス | ホスト名 | OS | |
MySQL-MaseterDB | 192.168.11.101 | db01 | CentOS 6.8 |
MySQL-SlaveDB | 192.168.11.102 | db02 | CentOS 6.8 |
MySQLインストール及び初期設定
yumで必要なパッケージをインストールして、MySQLのrootユーザーのパスワードを設定します
【Master, Slave共通】
mysqlの関連パッケージをyumでインストールします
# yum install mysql mysql-server
MySQLのrootユーザーのパスワード設定及びサービスの自動起動を設定します。rootのパスワードですが「momo1234」と設定しています
# /etc/init.d/mysqld start # /usr/bin/mysqladmin -u root password 'momo1234' # chkconfig mysqld on
MySQLのレプリケーションユーザー設定
レプリケーションで使用するレプリケーション用アカウントを設定します。アカウント名は「repl」としパスワード「mikan321」とします
【Master側, Slave側共通】
レプリケーション用アカウント設定します
MySQLにrootでログインします # mysql -u root -pmomo1234 レプリケーションアカウント(repl)の設定をします mysql> GRANT REPLICATION SLAVE on *.* to 'repl'@'192.168.11.%' IDENTIFIED by 'mikan321'; Query OK, 0 rows affected (0.00 sec) mysql>exit
設定ファイル(my.cnf)の編集
MySQLの設定ファイル(my.cnf)編集します。内容はMaster・Slaveで設定内容は異なります。
【Master側, Slave側共通】
オリジナルファイルをバックアップします
# cp /etc/my.cnf /etc/my.cnf.org
【Master側】
設定ファイル編集を編集します。
server-idは、IPアドレスの末尾(101)とします。report-hostは、ホスト名(db01)とします
# vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=101 report-host=db01
MySQLを起動します
# /etc/init.d/mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ]
【Slave側】
設定ファイル編集を編集します。
server-idは、IPアドレスの末尾(102)とします。report-hostは、ホスト名(db02)とします。
log-binでマスターのバイナリロギングを有効に設定します。log_slave_updatesで、スレーブをマスターとして使用できるようにします
# vim /etc/my.cnf [mysqld] server-id=102 report-host=db02 log-bin=mysql-bin log_slave_updates
MySQL起動
# /etc/init.d/mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ]
レプリケーションのポジションの同期
【Master側】
Masterのポジションを確認して、その内容をSlaveサーバに反映します
ポジション及びファイル名は、Slaveサーバに設定する際に使用するのでメモしておきます
# mysql -u root -pmomo1234 mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 106 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
【Slave側】
MySQLに接続し、以下のコマンドでMasterのポジションを確認します
# mysql -u root -pmomo1234 Slaveを停止します mysql> stop slave; mysql> CHANGE MASTER TO MASTER_HOST = 'db01', MASTER_USER = 'repl', MASTER_PASSWORD = 'mikan321', MASTER_LOG_FILE = 'mysql-bin.000004', (メモしたバイナリログのファイル名) MASTER_LOG_POS = 106;(メモしたバイナリログの位置) Slaveを再開します mysql> start slave; Slaveのステータスを確認して、Slave_IO_Running、Slave_SQL_RunningがYesになっていることを確認する mysql> show slave status ¥G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: db01 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 106 Relay_Log_File: mysqld-relay-bin.000004 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
この後、Master側でDBを変更してSlave側で反映しているか確認してSlave側で反映していればOKです
ディスカッション
コメント一覧
まだ、コメントがありません