Notre configuration:
- Maître: MariaDB 10.0.21
- Esclave: MariaDB 10.0.17
La réplication fonctionnait très bien jusqu'à récemment, moment auquel les bases de données de l'esclave devaient être restaurées à partir d'un vidage. J'ai effectué toutes les étapes nécessaires: vider les DB du maître, transférer le vidage vers l'esclave, supprimer les anciens DB, exécuter le vidage pour restaurer les DB, exécuter la CHANGE MASTER
commande appropriée et enfin START SLAVE
.
Je reçois l'erreur:
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Le premier fichier journal dont l'esclave a besoin du maître est mysql-bin.000289
. Je peux voir que cela est présent sur le maître:
Je peux également voir que l'index de journal binaire sur le maître semble avoir une entrée pour ce fichier journal:
La réplication ne fonctionne toujours pas - je reçois toujours la même erreur. Je suis à court d'idées - que dois-je vérifier ensuite?
Mise à jour: sortie de SHOW SLAVE STATUS\G
comme demandé:
MariaDB [(none)]> SHOW SLAVE STATUS\G
--------------
SHOW SLAVE STATUS
--------------
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 127.0.0.1
Master_User: replication
Master_Port: 1234
Connect_Retry: 60
Master_Log_File: mysql-bin.000289
Read_Master_Log_Pos: 342
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000289
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: xxx_yyy,xxx_zzz
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 342
Relay_Log_Space: 248
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
1 row in set (0.00 sec)
Informations supplémentaires demandées:
root@master [818 18:54:22 /var/lib/mysql]# ls -l /var/lib/mysql/mysql-bin.000289
-rw-rw---- 1 mysql mysql 1074010194 May 19 03:28 /var/lib/mysql/mysql-bin.000289
root@master [819 18:54:29 /var/lib/mysql]# ls mysql-bin.00029*
mysql-bin.000290 mysql-bin.000291 mysql-bin.000292 #(Yes, it was created)
root@master [821 18:56:52 /var/lib/mysql]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6345382
Server version: 10.0.21-MariaDB-log MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW BINARY LOGS;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000279 | 1074114047 |
| mysql-bin.000280 | 1074004090 |
| mysql-bin.000281 | 1074035416 |
| mysql-bin.000282 | 1073895128 |
| mysql-bin.000283 | 1073742000 |
| mysql-bin.000284 | 1074219591 |
| mysql-bin.000285 | 1074184547 |
| mysql-bin.000286 | 1074217812 |
| mysql-bin.000287 | 1022733058 |
| mysql-bin.000288 | 265069 |
| mysql-bin.000289 | 1074010194 |
| mysql-bin.000290 | 1074200346 |
| mysql-bin.000291 | 617421886 |
| mysql-bin.000292 | 265028 |
+------------------+------------+
14 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye
root@master [821 18:57:24 /var/lib/mysql]# mysqlbinlog mysql-bin.000289 > /tmp/somefile.txt
root@master [822 18:58:13 /var/lib/mysql]# tail /tmp/somefile.txt
# at 1074010124
#160519 3:28:59 server id 5 end_log_pos 1074010151 Xid = 417608063
COMMIT/*!*/;
# at 1074010151
#160519 3:28:59 server id 5 end_log_pos 1074010194 Rotate to mysql-bin.000290 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
root@master [823 18:58:31 /var/lib/mysql]#
/etc/my.cnf.d/server.cnf
(extrait):
# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1
Edit: Postion 342 semble exister:
root@master [826 12:15:33 /var/lib/mysql]# grep "end_log_pos 342 " /tmp/somefile.txt
#160517 14:43:13 server id 5 end_log_pos 342 Binlog checkpoint mysql-bin.000288
la source
Réponses:
Vous semblez ne pas vous connecter au maître que vous pensez être. Selon vos journaux binaires sur le maître, vous semblez avoir:
# 160519 3:28:59 id du serveur 5
Mais selon SHOW SLAVE STATUS, nous voyons:
Et de plus, vous semblez vous connecter sur localhost, mais vous avez laissé entendre que votre maître / esclave est sur différents hôtes:
la source
127.0.0.1:3305
. J'ai également remarqué le Master_Server_Id, mais je me suis dit que ce n'était qu'un vestige d'il y a longtemps lorsque nous utilisions un autre maître. J'attendais la valeurSHOW SLAVE STATUS
de la mise à jour une fois la réplication entièrement rétablie. Quoi qu'il en soit, c'est une suggestion géniale; Je vais vérifier que nous nous connectons bien au bon maître!telnet 127.0.0.1:3305
- je pouvais voir que la version MySQL signalée correspondait à la version de l' ancien maître. Je pense que la racine du problème était probablement due à certaines bizarreries DNS sur notre réseau - il semble que la connexion automatique a été établie par erreur sur domain.com, même si elle a été configurée pour se connecter à db.domain.com. Merci encore une fois.Si tout le reste échoue, vous pouvez constater que vous devez réinitialiser l'esclave et redémarrer la réplication. Depuis https://www.redips.net/mysql/replication-slave-relay-log-corrupted/ :
la source
Le message d'erreur est la réponse.
Regardez la sortie de la
SHOW BINARY LOGS
requête:Il n'y a pas de mysql-bin.000278 sur l'affichage.
À moins que les journaux binaires tournent, le contenu de mysql-bin.index est incorrect.
Veuillez comparer le contenu de
mysql-bin.index
avec les fichiers binlogs existants et assurez-vous qu'ils correspondent. Vous pouvez résoudre ce problème sur le maître avecpuis allez à l'esclave et exécutez
Essaie !!!
la source
mysql-bin.000288
au lieu demysql-bin.000278
? Si oui,mysql-bin.000288
semble exister. Cela résoudra-t-il toujours le problème?PURGE BINARY LOGS TO 'mysql-bin.000279';
m'a donné une erreur (comme on pouvait s'y attendre), car le journal "279" n'existait plus (avait été tourné).PURGE BINARY LOGS TO 'mysql-bin.000288';
exécuté avec succès et supprimé tous les journaux binaires jusqu'à "288". Malheureusement, je reçois toujours l'erreur.Mise à jour: cette réponse couvre la classification générale des erreurs. Pour une réponse plus spécifique sur la meilleure façon de traiter la requête exacte de l'OP, veuillez consulter les autres réponses à cette question
L'une des principales erreurs de réplication les plus critiques. Erreur fatale 1236 Elle peut être déclenchée par plusieurs raisons, l'une d'entre elles étant le titre de cette question.
Cette erreur se produit lorsque le serveur esclave n'a pas besoin du journal binaire requis pour la réplication sur le serveur de base de données maître.
De nombreux scénarios peuvent provoquer ceci:
expire_logs_days
(my.cnf si vous définissez lesexpire_logs_days
anciens binlogs expirent automatiquement et sont supprimés; lorsque MySQL ouvre un nouveau fichier binlog, il vérifie les anciens binlogs et purge ceux qui sont plus anciens que la valeur de expire_logs_days)PURGE BINARY LOGS
commande ou via unerm -f
commandecronjob
qui archivent les anciens journaux binaires pour réclamer de l'espace disqueAfin de résoudre ce problème, la seule solution propre à laquelle je peux penser est de recréer le serveur esclave à partir d'une sauvegarde de serveur maître ou d'un autre esclave dans la topologie de réplication.
Référence: la réplication mysql a une erreur fatale
la source