Mysql 5.6主従同期構成とソリューション

6338 ワード

メインライブラリIP:192.168.1.10
ライブラリIP:192.168.1.1.1から
1、メインライブラリの構成編集my.cnf:
#        
log_bin = mysql-bin

server-id = 111

log-bin-index=mysql-bin.index

sync_binlog=1

binlog_format=mixed

binlog-do-db = testdb //     

binlog-ignore-db = mysql

binlog-ignore-db = performance_schema

binlog-ignore-db = information_schema

binlog_checksum=NONE

2、同期アカウントの作成
mysql> grant replication slave on *.* to slave@192.168.1.11 identified by '123456' 

3、メインライブラリの状態
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 |      337 |              |                  |
+------------------+----------+--------------+------------------+

バイナリ・ログ・ファイル名と場所の記録
4、ライブラリプロファイルからの構成
 
# [  ]       
log-bin=mysql-bin   
# [  ]     ID,   1,   IP    
server-id=222

relay-log-index = slave-relay-bin.index

relay-log = slave-relay-bin

sync_master_info = 1

sync_relay_log = 1

sync_relay_log_info = 1

 
5、接続マスターライブラリの構成
mysql> change master to master_host='192.168.1.10',master_user='slave',master_password='123456', master_log_file='mysql-bin.000008',master_log_pos=337;

6、同期を開始する
mysql> start slave;
mysql> show slave status\G;

7、正常状態
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

8、主従の不同期を解決する
まずMasterライブラリにアクセスします.
mysql>show processlist; 次のプロセスがSleepが多すぎるかどうかを確認します.発見は正常です.
show master status; 正常です.
mysql> show master status;+-------------------+----------+--------------+-------------------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |+-------------------+----------+--------------+-------------------------------+| mysqld-bin.000001 |     3260 |              | mysql,test,information_schema |+-------------------+----------+--------------+-------------------------------+1 row in set (0.00 sec)
Slaveで確認
mysql> show slave status\G                                                
Slave_IO_Running: Yes
Slave_SQL_Running: No
Slaveが同期していないことがわかります
次の2つの解決方法について説明します.
メソッド1:エラーを無視して同期を続行
この方法は,プライマリ・スレーブ・ライブラリのデータの差が大きくない場合や,データが完全に統一されていない場合,データの要求が厳しくない場合に適用される.
解決:
stop slave;
#ステップをスキップしたエラーを示し、後の数字は可変です.
set global sql_slave_skip_counter =1;
start slave;
その後mysql>show slave statusGで確認します.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
OK、現在主従同期状態は正常です
方式2:主従をやり直し、完全に同期する
この方法は,プライマリ・スレーブ・ライブラリのデータの差が大きい場合や,データの完全な統一が要求される場合に適用できる.
解決策は次のとおりです.
1.まずメインライブラリに入り、ロックテーブルを行い、データの書き込みを防止する
コマンドを使用:
mysql> flush tables with read lock;
注意:ここでは、大文字と小文字を区別せずにロックされた読み取り専用ステータスです.
2.データバックアップ
データをmysqlにバックアップします.bak.sqlファイル
[root@server01 mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql
ここで注意したいのは、データベースのバックアップは必ず定期的に行い、データが万全であることを確保することです.
3.マスターステータスの表示
mysql> show master status;+-------------------+----------+--------------+-------------------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |+-------------------+----------+--------------+-------------------------------+| mysqld-bin.000001 |     3260 |              | mysql,test,information_schema |+-------------------+----------+--------------+-------------------------------+1 row in set (0.00 sec)
4.mysqlバックアップファイルをスレーブマシンに転送し、データ復旧を行う
#scpコマンドの使用
[root@server01 mysql]# scp mysql.bak.sql [email protected]:/tmp/
5.ライブラリから停止した状態
mysql> stop slave;
6.次に、ライブラリからmysqlコマンドを実行し、データバックアップをインポート
mysql> source/tmp/mysql.bak.sql
7.ライブラリからの同期を設定し、そこにある同期点に注意すると、メインライブラリshow master status情報の|File|Positionの2つになります
change master to master_host = '192.168.128.10', master_user = 'slave', master_port=3306, master_password='123456', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;
8.スレーブ同期を再開
mysql> start slave;
9.同期ステータスの表示
mysql>show slave statusG表示:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
転載先:https://www.cnblogs.com/kezf/p/mysql-slave.html