環境:
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-bin2. サーバー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 'tongbu'@'%' identified by 'tongbu';
認可:
mysql> grant all on *.* to 'tongbu'@'%';
ユーザーの削除:
mysql> drop user '用户名'@'%';
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='192.168.1.7', -> master_user='tongbu', -> master_password='tongbu', -> master_log_file='mysql-bin.000024', -> 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='192.168.1.8', -> master_user='tongbu', -> master_password='tongbu', -> master_log_file='mysql-bin.000027', -> 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 サイトの他の関連記事を参照してください。