web-dev-qa-db-ja.com

MySQLマスタースレーブレプリケーションが更新されない

マスタースレーブレプリケーションを設定するのはこれが初めてです。私は this をガイドとして使用しています。

手順に従い、レプリケーションを確認する必要がある最後の部分まですべてが機能します。新しいテーブルを作成し、マスターデータベースのテーブルにデータを挿入すると、スレーブデータベースに複製されません。

以下はマスターのmy.cnfです

server-id = 1
binlog-do-db = databasename
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

そして奴隷のmy.cnf

server-id = 2
master-Host=10.77.88.111
master-connect-retry=60
master-user=slave_user
master-password=slave_password
replicate-do-db=databasename
replicate-ignore-table=table1
replicate-ignore-table=table2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

以下はSHOWSLAVESTATUSです

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.77.88.111
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 389591
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: databasename
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table: databasename.table1,databasename.table2
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 389591
              Relay_Log_Space: 120695
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

私が試してみました:

  • slave_user ==>成功を使用してスレーブマシンからマスターデータベースにアクセスします。だから問題はここにありません
  • スレーブマシンでmysqlサービスを再起動します==>変更なし
  • /var/lib/mysql/mysql.errに示されているエラーはありません
  • #serviceiptablesを使用してファイアウォールを停止しますstop ==>変更なし

助けてください!心から感謝する!

1
user311807

何も悪いことはありません。

これがあなたが言うことができる方法です

適応症#1:スレーブスレッド

SHOW SLAVE STATUS\Gを実行すると、次のように表示されます。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

これは、IOスレッド(マスターからのBinlogイベントをインターセプトし、リレーログFIFOに格納)とSQLスレッド(リレーログからBinlogイベントを読み取るFIFOそしてSQLを実行します)そして接続されて実行されます

適応症#2:リレーログ

SHOW SLAVE STATUS\Gを実行すると、次のように表示されます。

Relay_Log_Space: 120695

これは、IOスレッドがマスターから120Kを読み取ったことを示しています。この値は、IOスレッドが新しいイベントを読み取っている間は常に変化するはずです。

適応症#3:実行されたステートメント

SHOW SLAVE STATUS\Gを実行すると、次のように表示されます。

Read_Master_Log_Pos: 389591
Exec_Master_Log_Pos: 389591

これらの値が変化している場合、IOスレッドはRead_Master_Log_Posの任意の位置まで実行され、SQLスレッドはExec_Master_Log_Posの任意の位置まで実行されます。

警告

スレーブでバイナリロギングが有効になっているようです。スレーブでバイナリログが大きくなることはありません。どうして ? log-slave-updates をスレーブのmy.cnfに追加するのを忘れました。

log-slave-updates をスレーブのmy.cnfに追加し、MySQLを再起動する必要があります。

2
RolandoMySQLDBA

ここには明らかに悪いことは何もありません。

私が最初にすることは、CREATE TABLEコマンドとINSERTコマンドを発行するときに、実際にデータベースのデータベース名を使用していることを確認することです。

Binlog-do-db、replicate-do-dbなどによって課せられた制限を削除して、それが役立つかどうかを確認することもできます。

1
user9517