プライマリMySQLサーバーがあり、InnoDBデータベースのレプリケーションをセットアップしようとしています。
マスターとスレーブの構成を実行し、マスターステーションDBのダンプを作成し、スレーブステーションに復元して、レプリケーションを実行します。すべてが正常に見えますが、更新はスレーブに反映されません。スレーブが実行されており、マスターとスレーブのRead_Master_Log_Posは同一です。mysql-relay-bin.00000Xファイルを検索しても、マスターからの更新があります。しかし、「SELECT*FROMdb.table;」を実行しても変更はありません。
BDエンジンをMyISAMに変更すると、すべて正常に動作します。
また、空のデータベース(InnoDBエンジン)を作成し、それをダンプしてスレーブに復元し、レプリケーションを開始してから、マスターにテーブルを作成してそれらを埋めようとしました。この場合、レプリケーションはうまく機能しています。しかし、すでに作成されていっぱいになったデータベースを複製する方法も必要です。
私は何をすべきか?
私は持っています:
マスターのmy.cnf:
[mysqld]
bind-address=0.0.0.0
port=3306
replicate-do-db=gcm_data
log-bin=/var/lib/mysql/mysql-bin
server-id=8217
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
スレーブ上のmy.cnf:
[mysqld]
bind-address=0.0.0.0
port=3306
replicate-do-db=gcm_data
relay-log-index=/var/lib/mysql/mysql-relay-bin.index
relay-log=/var/lib/mysql/mysql-relay-bin
server-id=50890
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
マスターステータスを表示\G
File: mysql-bin.000001
Position: 657
Binlog_Do_DB:
Binlog_Ignore_DB:
スレーブステータスを表示\G
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.13.52
Master_User: slave1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 657
Relay_Log_File: mysql-relay-bin.000004
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: gcm_data
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 2
Exec_Master_Log_Pos: 657
Relay_Log_Space: 551
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:
マスターにプロセスリストを表示する:
| Id | User | Host | db | Command | Time | State | Info |
| 16 | slave1 | 10.0.13.140:54683 | NULL | Binlog Dump | 2062 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
スレーブにプロセスリストを表示する:
| Id | User | Host | db | Command | Time | State | Info |
| 14 | system user | | NULL | Connect | 2203 | Waiting for master to send event | NULL |
| 15 | system user | | NULL | Connect | 2203 | Has read all relay log; waiting for the slave I/O thread to update it | NULL |
どういうわけか重要な場合は、仮想CentOS 6.0、MySQL5.1.61からマスターステーションとスレーブステーションの両方を実行しています。
アップデート
少し動作テストを実装しました。で空のデータベースを作成しMaster
、レプリケーションスクリプトを実行しました(すべてがうまくいき、実行Master
さSlave
れていました)。次に、InnoDB
テーブルを作成しました
CREATE TABLE tbl (id INT, data VARCHAR(10)) engine=InnoDB;
テーブルはスレーブに登場しました。次に、テーブルにデータを入力しました
INSERT tbl values (1, "1");
データはスレーブで更新されました。
次に、マスター(service mysqld stop
)を停止し、スレーブIOも停止しました
SHOW SLAVE STATUS - Slave_IO_Running: No, Slave_SQL_Running: Yes
それから私はマスターでMySQLを起動し、スレーブIOもしばらくして起動しました。ただし、更新はスレーブでは利用できないため、スレーブには存在しmysql-relay-bin.00000X
ます。