MariaDBのマスタースレーブ構成 【CentOS 7】
Contents
MariaDBでのマスタースレーブでのレプリケーション構成
マスタースレーブでの冗長構成は、サーバーが2台以上構成で、1台がMasterとなり2台目以降をSlaveとなり、マスターサーバーの更新内容が、各スレーブサーバのDBに反映するレプリケーション構成です
MariaDBのインストール
マスターサーバー・スレーブサーバとも、yum にMariaDBをインストールします
$ sudo yum install mariadb mariadb-server mariadb-devel mariadb-libs
MariaDBをインストールしたら、MariaDBの自動起動の設置及びサービス起動します
$ sudo systemctl enable mariadb.service $ sudo systemctl start mariadb $ sudo systemctl list-unit-files -t service | grep mariadb mariadb.service enabled
MariaDBが起動したらDBの初期設定をします。
$ sudo /usr/bin/mysql_secure_installation
マスターサーバーのMariaDBの初期設定
マスターサーバーの設定を下記のようにおこないます。
- log-bin=mysql-bin レプリケーション構成で必要なバイナリログを有効にする
- server-id=101 レプリケーション構成内の被らないようにIDを振ります。IPアドレスの末尾などでもいいかと思います
- expire_logs_days=5 バイナリログの保存日数
$ sudo vi /etc/my.cnf.d/server.cnf [mysqld] log-bin=mysql-bin server-id=101 expire_logs_days=5 # 設定ファイルの内容を変更したらサービスの再起動をおこないます $ sudo systemctl restart mariadb
レプリケーションユーザー作成します
# mysql -u root -p MariaDB [(none)]> grant replication slave on *.* to ユーザー名@'%' identified by 'パスワード'; MariaDB [(none)]> flush privileges;
バイナリログのポジションを確認します
$ mysql -u root -p # 書き込みを行わないようにDBをロックします MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) # バイナリログのポジションを確認します MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 387 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
DBの内容をダンプしてダンプファイルを転送します
$ sudo mysqldump -u root -p --all-databases --lock-all-tables > /var/tmp/dbdump.db Enter password: # ダンプファイルをスレーブサーバに転送します $ scp /var/tmp/dbdump.db ユーザー名@IPアドレス:/var/tmp
ダンプファイルを転送したらDBのロックを解除します
$ mysql -u root -p MariaDB [(none)]> unlock tables;
スレーブサーバーのMariaDBの初期設定
スレーブサーバーの設定を下記のようにおこないます。
- log-bin=mysql-bin レプリケーション構成で必要なバイナリログを有効にする
- server-id=102 レプリケーション構成内の被らないようにIDを振ります。IPアドレスの末尾などでもいいかと思います
- read_only=1 書き込みを行わないようにリードオンリーに設定します
# vi /etc/my.cnf.d/server.cnf [mysqld] server-id=102 log-bin=mysql-bin read_only=1 # 設定ファイルの内容を変更したらサービスの再起動をおこないます $ sudo systemctl restart mariadb
スレーブサーバーの設定を終わったらマスターサーバーDBのインポートします
# mysql -u root -prad31cdk6 < /var/tmp/dbdump.db
マスターサーバーのホスト名(IPアドレス)とポート番号、レプリケーションのユーザーとパスワード、マスターサーバーで確認したバイナリログのFileとPositionを設定します。
# mysql -u root -p MariaDB [(none)]> change master to master_host='IPアドレス(ホスト名)', master_user='ユーザー名', master_password='パスワード', master_log_file='mysql-bin.000002', master_log_pos=387; # 設定したらスレーブのレプリケーションを開始します MariaDB [(none)]>start slave;
「Slave_IO_Running」、「Slave_SQL_Running」の「Yes」になっていればレプリケーションが行わています。
また、「Master_Log_File」、「Read_Master_Log_Pos」 がマスターで確認したFile、Positionと一致していることを確認します
MariaDB [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: www01 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 387 Relay_Log_File: mariadb-relay-bin.000002 Relay_Log_Pos: 529 Relay_Master_Log_File: mysql-bin.000002 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: 387 Relay_Log_Space: 825 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: 101 1 row in set (0.00 sec)
ディスカッション
コメント一覧
まだ、コメントがありません