簡単な紹介
いわゆる「デュアルマスターレプリケーション」は、実際には「相互マスタースレーブレプリケーション」です。つまり、各マスターホストには、マスターの役割とスレーブの役割の両方があります。このようにして、任意のパーティによって行われた変更は、データの整合性を実現するために、マスターとスレーブを介して別のホストのデータベースに複製されます。これが「デュアルマスターレプリケーション」です。
データベースレプリケーションには2つの方法があります。
* GTIDベースのレプリケーション *バイナリログの場所ベースのレプリケーション
この記事で説明する後者は「バイナリログの場所に基づくレプリケーション」ですが、「GTIDに基づくレプリケーション」の方が適している場合があります。
システム環境
属性 | パラメータ |
---|---|
オペレーティング・システム: | CentOS Linuxリリース7.4.1708(コア) |
ソフトウェアバージョン: | MySQL 5.6.45 |
インターネット情報: | マスター-01:10.10.50.115 |
マスター-02:10.10.50.116 |
最初のステップは、データベースサービスをインストールすることです
MySQL 5.6(CentOS 7)の注記を参照し、詳細なプロセスをスキップしてください。
構成サービス
#master-01について
#!/ bin / sh ########################################## ## ################################## (0)必要なディレクトリを作成します: ##### ### ########################################### ####### ################# mkdir -pv / var / log / mysql / chown mysql.mysql / var / log / mysql / #### ######## ###################################### ############ ############ ############## (1)/etc/mysql/my.cnfファイルを変更します: #!!!ディストリビューションが異なれば、構成場所も異なります。コピーしないでください。コピーしないでください!コピーしないでください! ############################################## #### ######################### mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat << MYCNF >> /etc/mysql/my.cnf [mysqld] server_id = 1 auto-increment-offset = 1 auto-increment-increment = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index Relay_log = / var / log / mysql / mysql-relay-bin Relay_log_index = / var / log /mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_slave_updates = 1 #状況に応じて変更します。 #bind-address = xxxx MYCNF ################# ############################################### ### ######### (2)サービスを再起動します: ############################# ##### ######################################### systemctl restart mysqld.service
#master-02について
#!/ bin / sh ######################################### ### ################################# (0)必要なディレクトリを作成します: ##### #### ########################################## ######## ################ mkdir -pv / var / log / mysql / chown mysql.mysql / var / log / mysql / #### ######### ##################################### ############# ############# (1)/etc/mysql/my.cnfファイルを変更します。 #!!!ディストリビューションが異なれば、構成場所も異なります。コピーしないでください。コピーしないでください!コピーしないでください! ############################################## #### ######################### mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat << MYCNF >> /etc/mysql/my.cnf [mysqld] #server_idパラメーターを指定します。2つのデータベースは異なる必要があります server_id = 2 #現在のデータベースのIDの初期値を2から指定し、auto-increment-incrementと連携して、2つのメインライブラリ の自動インクリメントIDの競合を防止します#このライブラリの自動インクリメントIDは偶数です、および他のライブラリの自動インクリメントIDすべてが奇数です auto-increment-offset = 2 auto-increment-increment = 2 #バイナリログファイル、およびインデックスファイル #インデックスファイルには、すべてのバイナリログファイルのリストが含まれます log_bin = / var / log / mysql / mysql-bin .log log_bin_index = /var/log/mysql/mysql-bin.log.index# バイナリログの有効期限 expire_logs_days = 10 #バイナリログの最大サイズ max_binlog_size = 100M #更新を実行しますライブラリからのSQLスレッドによって、それ自体を書き込みます。バイナリログ。 #https ://dba.stackexchange.com/questions/169071/do-log-slave-updates-in-mysql-5-7-fail-the-replication-in-linux ?noredirect = 1 &lq = 1 log_slave_updates = 1 #リレーログファイル、およびインデックスファイル #インデックスファイルには、すべてのリレーログファイルのリストが含まれています Relay_log = / var / log / mysql / mysql-relay-bin Relay_log_index = /var/log/mysql/mysql-relay-bin.index# 状況に応じて変更します。 #bind-address = xxxx MYCNF #################### ############################################### ### ###### (2)サービスを再起動します: ################################ ##### ####################################### systemctlrestartmysqld。service
レプリケーション用のユーザーを作成する
master-01とmaster-02でそれぞれレプリケーション用のユーザーを作成します。ユーザーを作成したら、ユーザーが正常にログインできるかどうかを確認することを忘れないでください。
#master-01について
GRANT REPLICATION SLAVE ON *。* TO'replication '@'% 'IDENTIFIED BY'BU3CGK6x';
#master-02について
GRANT REPLICATION SLAVE ON *。* TO'replication '@'% 'IDENTIFIED BY'BU3CGK6x';
レプリケーションを有効にする
master-01とmaster-02でそれぞれレプリケーションを有効にします。
#master-01について
--SQL -- STOP SLAVE; MASTERをmaster_host = '10 .10.50.116 '、master_port = 3306、 master_user =' replication '、master_password =' BU3CGK6x '、 master_log_file =' mysql-bin.000001 '、master_log_pos = 0に変更します。 スレーブを開始します。
#master-02について
--SQL -- STOP SLAVE; MASTERをmaster_host = '10 .10.50.115 '、master_port = 3306、 master_user =' replication '、master_password =' BU3CGK6x '、 master_log_file =' mysql-bin.000001 '、master_log_pos = 0に変更します。 スレーブを開始します。
予防
1)数字を使用する場合は、引用符を使用しないでください。たとえば、master_port = '3306'は構文エラーを引き起こします
コピー検証
検証プロセスについては、ここでは詳しく説明しません。比較的単純なので、ここではコピーが機能するかどうかを確認するというアイデアの概要のみを示します:
master-01でライブラリとテーブルを作成し、master-02で表示します。 master-02でライブラリとテーブルを作成し、master-01で表示します。
問題がなければ問題ありません。同期がない場合は、データベースでSHOW SLAVE STATUS \ Gステートメントを実行して、同期ステータスと同期エラー情報(存在する場合)を表示できます。
ステータスを確認する
使用のSHOW MASTER STATUSの\ Gのステートメントは、あなた自身のステータスを表示するには、使用のSHOW SLAVE STATUSの\ Gのステートメントをスレーブとして独自のステータスを表示します。
関連記事
「MySQL」-デュアルマスターレプリケーション(GTIDベースのレプリケーション)
「MySQL」-マスタースレーブレプリケーションのセットアップ(ロケーションベースのレプリケーション)
「MySQL」-マスタースレーブレプリケーションのセットアップ(GTIDベースのレプリケーション)
参照
マスターマスターMySQLデータベースレプリケーションの構成
MariaDB / Relay Log
MySQL 5.7のLog_Slave_UpdatesはLinuxのレプリケーションに失敗しますか?