ホームページ  >  記事  >  データベース  >  MYSQL デュアルマスター完全データベース同期レプリケーションの詳細な例

MYSQL デュアルマスター完全データベース同期レプリケーションの詳細な例

黄舟
黄舟オリジナル
2018-05-10 15:37:433041ブラウズ

環境:

2 つのサーバー A と B にはそれぞれ mysql-5.7.18 サーバーがインストールされ、互いのマスターとスレーブを同期するように構成されています。

LinuxのシステムバージョンはCentOS7です

AサーバーIP:192.168.1.7ホスト名:test1

BサーバーIP:192.168.1.8ホスト名:test2

(同一LAN内)

1.準備

1ホスト名変更 命コマンド: HostnameCTL SET-Hostname xxx

(ホスト名表示コマンド: hostname)

2. ファイアウォールをオフにします

1) ファイアウォールのステータスを表示します

2) ファイアウォールが実行中です、最初に終了しますファイアウォールサービスを停止します

コマンド: systemctl Mask firewalld

3) ファイアウォールをオフにします

コマンド: systemctl stop firewalld

4) ファイアウォールのステータスを確認します

コマンド: firewall-cmd --state

結果: 実行されていません

3. selinuxポリシーをオフにする

1) selinuxの実行状況を確認する

コマンド:getenforce

/etc/sysconfig/selinux edit SELINUX=disabled

3)closed状態に

2. マスターサーバー (master) スレーブサーバー (slave) を設定します

1. サーバー A の my.cnf ファイル vi /etc/my.cnf を開き、ファイル内の [mysqld] の下に次の内容を追加します

server-id=1 #他のサーバーと異なり、1~232の正の整数値である必要があります

log-bin=mysql-bin
   log-bin-index=mysql-bin

サーバーBのmy.cnfファイルの[mysqld]の下に上記の内容を追加します。 、server-id 値のみを変更します。

server-id=2    
   log-bin=mysql-bin
   log-bin-index=mysql-bin

2. サーバーAのmysqlインストールパス(rpmインストールパスは/var/lib/mysql)にデータベースの完全バックアップファイルall.sqlを作成します。

作成コマンド:

touch  /var/lib/mysql/all.sql

バックアップコマンド:

[root@test1 mysql]# mysqldump -uroot -p123 --all-databases > /var/lib/mysql/all.sql
リカバリのためにall.sqlファイルをサーバーBの特定のパス(例として/var/lib/mysqlパス)にコピーします。

復元コマンド:

[root@test2 /]# mysql -uroot -p123 < /var/lib/mysql/all.sql

3. サーバーAとサーバーBのmysqlに同期用のユーザーを作成します。

ユーザーの作成:

mysql> create user &#39;tongbu&#39;@&#39;%&#39; identified by &#39;tongbu&#39;;

認可:

mysql> grant all on *.* to &#39;tongbu&#39;@&#39;%&#39;;

ユーザーの削除:

mysql> drop user &#39;用户名&#39;@&#39;%&#39;;

AサーバーユーザーとBサーバーユーザーが作成されたら、ユーザーが相互にリモートからmysqlにログインできるかどうかをテストします。

[root@test1 /]# mysql -utongbu -ptongbu -h192.168.1.8
   [root@test2 /]# mysql -utongbu -ptongbu -h192.168.1.7

テストに問題がなければ、サーバー A と B で mysql サービスを再起動します: [root@test /]# service mysqld restart

4. A をマスター サーバー、B をスレーブ サーバーに設定します。

1)サーバーAのmysqlでバイナリログ名とオフセット値を表示します

コマンド:mysql> show master statusG

2)サーバーBで接続サーバーを設定します

mysql> stop slave;
    mysql> change master to
      -> master_host=&#39;192.168.1.7&#39;,
      -> master_user=&#39;tongbu&#39;,
      -> master_password=&#39;tongbu&#39;,
      -> master_log_file=&#39;mysql-bin.000024&#39;,
      -> master_log_pos=154;
    mysql> start slave;

mysql> スレーブステータスを表示G Enterこのコマンドは、以下に示すように、Slave_IO_Running と Slave_SQL_Running の値が Yes であるかどうかを確認します

5. B をマスター サーバー、A をスレーブ サーバーに設定します。

1)サーバーBのmysqlでバイナリログ名とオフセットを表示します

コマンド:mysql> show master statusG

2)サーバーAで接続サーバーを設定します。

mysql> stop slave;
    mysql> change master to
      -> master_host=&#39;192.168.1.8&#39;,
      -> master_user=&#39;tongbu&#39;,
      -> master_password=&#39;tongbu&#39;,
      -> master_log_file=&#39;mysql-bin.000027&#39;,
      -> master_log_pos=154;
    mysql> start slave;
    mysql> show slave status\G 查看Slave_IO_Running和Slave_SQL_Running的值是否为Yes

この時点で、2 つの mysql データベースはマスター/スレーブとして構成され、相互に同期されます。

エラーのトラブルシューティング:

1. Slave_IO_Running ステータス エラー

MySQL> show slide statusG; を確認すると、Slave_IO_Running ステータスが接続エラーになっています。設定を確認する必要があります。

1)ネットワークが利用できない

2) 間違ったパスワード、間違ったアカウント番号、間違ったアドレスなど、間違ったアカウント権限設定

3) 間違ったバイナリファイルの場所

2. 一次データと二次データの競合または相違によって引き起こされる異常

 主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql配置文件指定略过此类异常并继续下条sql同步,这样可以避免很多主从同步的异常中断。打开/etc/ mysql下的my.cnf文件,在[mysqld]后添加如下代码:

slave-skip-errors = 1062,1032,1060

3. 跳过异常恢复同步

mysql >slave stop;
 mysql >SET GLOBAL sql_slave_skip_counter = 1;
 mysql >slave start;

以上がMYSQL デュアルマスター完全データベース同期レプリケーションの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。