J'ai un serveur MySQL primaire et j'essaye de mettre en place une réplication pour la base de données InnoDB.
J'effectue une configuration maître et esclave, crée une sauvegarde de la base de données principale de la station, la restaure sur la station esclave et exécute la réplication. Tout a l'air bien mais aucune mise à jour n'est reflétée sur Slave. L'esclave est en cours d'exécution, Read_Master_Log_Pos sur Master et Slave sont identiques. Je regarde même le fichier mysql-relay-bin.00000X et il y a des mises à jour du Master. Mais pas de changement quand je lance "SELECT * FROM db.table;".
Si je change le moteur BD en MyISAM, tout fonctionne correctement.
J'ai également essayé de créer une base de données vide (moteur InnoDB), de la vider et de la restaurer sur l'esclave, démarrer la réplication, puis créer des tables sur Master et les remplir. Dans ce cas, la réplication se porte bien. Mais j'ai aussi besoin d'un moyen de répliquer la base de données déjà créée et remplie.
Que dois-je faire?
InnoDB Esclave ne pas mettre à jour
J'ai:
my.cnf sur Master:
[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 sur Slave:
[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
MONTRER MASTER STATUT \ G
File: mysql-bin.000001
Position: 657
Binlog_Do_DB:
Binlog_Ignore_DB:
SHOW SLAVE STATUT \ 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:
SHOW PROCESSLIST sur Master:
| 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 |
SHOW PROCESSLIST Slave:
| 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 |
S'il est en quelque sorte important que je suis en cours d'exécution à la fois maître et esclave de la station CentOS 6.0 virtuel, MySQL 5.1.61.
Mise à jour
I mis en œuvre un petit test du comportement: j'ai créé am base de données vide sur Master
, exécuter un script de réplication (tout va bien - Master
et Slave
étaient en cours d'exécution). Ensuite, je créé une table InnoDB
CREATE TABLE tbl (id INT, data VARCHAR(10)) engine=InnoDB;
Le tableau est apparu sur Slave. Puis j'ai rempli le tableau avec des données
INSERT tbl values (1, "1");
Les données ont été mises à jour sur Slave.
Puis je me suis arrêté Maître (service mysqld stop
) et esclave IO a également arrêté
SHOW SLAVE STATUS - Slave_IO_Running: No, Slave_SQL_Running: Yes
Puis j'ai commencé MySQL maître et esclave IO a également commencé un certain temps. Mais comme les mises à jour ne sont pas disponibles sur Slave, elles sont présentes dans mysql-relay-bin.00000X
sur Slave.
Si vous passez à myisam, cela donne l'impression que vous ne commettez pas de transactions avant de vérifier les modifications sur l'esclave. –
Je n'utilise pas de transactions actuellement. Je teste en utilisant "INSERT db.table (C1, C2) VALEURS (V1, V2);" sur le maître et "SELECT * FROM db.table;" à la fois maître et esclave pour suivre les mises à jour. Sur les mises à jour Master sont disponibles, sur Slave - pas. La chose drôle est que maintenant MyISAM db n'est pas mis à jour sur Slave. –
Pourquoi Skip_Counter est-il réglé sur 2? – ethrbunny