手元のラズパイ2台を使用するため,MariaDBで設定するが,基本的にはMySQLも同様の方法でできるはずだ.
データベースの初期設定手順は以下のエントリーを参照されたし.
WM×LI: Raspberry Pi にデータベースを構築する【MySQL,MariaDB】
【マスター側】
初めに設定ファイルを編集する.(server-id は任意の数字で構わないが,スレーブとは異なる値にする)
/etc/mysql/mariadb.conf.d/50-server.cnf ---------------------------------------- [mysqld] server-id=1 ←追記する log-bin ←追記する
MariaDB にログインし,レプリケーション用のユーザーを作成する.
MariaDB [(none)]> CREATE USER 'repl'@'%' IDENTIFIED BY 'repl'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
マスター情報が Empty であることを確認しておく.
MariaDB [(none)]> SHOW MASTER STATUS\G; Empty set (0.001 sec)
Empty ではなく,マスター情報が表示された場合はマスター情報をリセットしておく.
mysql> RESET MASTER;
MariaDB を再起動する.
mysql> QUIT; $ sudo systemctl restart mysql
MariaDB に再ログインして,マスター情報を取得する.(ファイル名とポジションはスレーブ側の設定で使うのでメモる)
MariaDB [(none)]> SHOW MASTER STATUS\G; *************************** 1. row *************************** File: mysqld-bin.000001 Position: 329 Binlog_Do_DB: Binlog_Ignore_DB:
この状態でマスター側はいったん置いておく.
【スレーブ側】
スレーブ側も,設定ファイルの編集から実施する.(replicate-do-db は同期するデータベースを記入する)
/etc/mysql/mariadb.conf.d/50-server.cnf ---------------------------------------- [mysqld] server-id=2 ←追記する replicate-do-db=repl_db ←追記する
MariaDBを再起動する.
$ sudo systemctl restart mysql
MariaDBにログインして,スレーブ情報を表示する
MariaDB [(none)]> SHOW SLAVE STATUS\G; Empty set (0.001 sec)
もし,Empty ではなく,スレーブ情報が色々と表示された場合は,スレーブを停止→リセットし,MySQLを再起動する.
mysql> STOP SLAVE; mysql> RESET SLAVE; mysql> QUIT; $ sudo systemctl restart mysql
スレーブとして動作するための設定を CHANGE MASTER 文で実行する.
MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='master', ←マスター側のホスト名orIPアドレス -> MASTER_USER='repl', -> MASTER_PASSWORD='repl', -> MASTER_LOG_FILE='mysqld-bin.000001', -> MASTER_LOG_POS=329; mysql> START SLAVE;
スレーブ情報を取得する.
MariaDB [(none)]> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: master Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqld-bin.000001 Read_Master_Log_Pos: 329 Relay_Log_File: mysqld-relay-bin.000001 Relay_Log_Pos: 556 Relay_Master_Log_File: mysqld-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: repl_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: 329 (以下,略)
多くの情報が表示されるが重要なことは以下の二点.
- Slave_IO_Stateが "Waiting for master to send event" であること
- Read_Master_Log_Pos 及び Exec_Master_Log_Pos が共に,マスター側のPosition と等しいこと
以上を確認できた場合,置いておいたマスター側に戻り,repl_db を作成する.
MariaDB [(none)]> CREATE DATABASE repl_db;
再びスレーブ側でデータベースを確認すると,repl_db が作成されている(はず)
MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | repl_db | ← repl_dbが作成されている +--------------------+
最後にマスター情報とスレーブ情報を再確認する.マスター情報のPosition,スレーブ情報のRead_Master_Log_Pos 及び Exec_Master_Log_Pos がそれぞれ増加していることがわかる.
MariaDB [(none)]> SHOW MASTER STATUS\G; *************************** 1. row *************************** File: mysqld-bin.000002 Position: 464 Binlog_Do_DB: Binlog_Ignore_DB:
MariaDB [(none)]> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: master Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqld-bin.000001 Read_Master_Log_Pos: 464 Relay_Log_File: mysqld-relay-bin.000001 Relay_Log_Pos: 691 Relay_Master_Log_File: mysqld-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: repl_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: 464 (以下,略)
マスター・スレーブ相互に同期したい場合は,同様の設定を逆向きに設定するだけ.
また,既存のデータベースのレプリケーションを作成する場合は,データを一旦エクスポートしてスレーブ側でインポートする必要がある.
0 件のコメント:
コメントを投稿