web-dev-qa-db-fra.com

Configuration du maître - réplication des esclaves: erreur de connexion au maître (Error_code: 2003)

Je configure ceci sur deux serveurs différents sur deux sociétés d'hébergement différentes.

Voici le tutoriel que j'ai suivi pour configurer cela: https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql =

Les paramètres principaux de my.cnf sont les suivants:

bind-address = 00.000.000.00
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydatabase

Sur l'esclave:

server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = mydatabase

Tout semble bien jusqu'à ce que j'essaie de vérifier mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 000.000.000.00
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Replicate_Do_DB:
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: 0
Relay_Log_Space: 154
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: 2003
Last_IO_Error: error connecting to master '[email protected]' - retry-time: 60  retries: 3
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID:
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 180104 23:22:36
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:

J'ai également vérifié le journal des erreurs et je peux voir ceci:

2018-01-04T23:05:10.948738Z 2 [ERROR] Slave I/O for channel '': error connecting to master '[email protected]:3306' - retry-time: 60  retries: 6, Error_code: 2003

J'ai vérifié le pare-feu et le port, ce qui semble correct. Je ne sais pas quoi d'autre je peux vérifier?

4
TH1981

J'ai donc eu plusieurs problèmes qui pourraient être utiles pour d'autres:

Erreur: 2003

J'ai supprimé le bind-address du maître

Errno: 1045

Accès refusé à l'utilisateur

J'ai explicitement défini l'adresse IP de l'utilisateur esclave:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'000.000.000.00' IDENTIFIED BY 'password';

au lieu de

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';

Erreur 1236

Obtention d'une erreur fatale 1236 du maître lors de la lecture des données du journal binaire: 'l'entrée d'événement de journal a dépassé max_allowed_packet

Il s'avère que la valeur par défaut max_allowed_packet est 1 Mo pour <= 5.6.5 et 4 Mo pour> = 5.6.6.

J'ai défini ces deux manuellement à 16 Mo selon cet article

Erreur 1236

Obtention d'une erreur fatale 1236 du maître lors de la lecture des données du journal binaire: 'données fausses dans l'événement du journal

J'ai suivi les instructions de cette réponse

Cela a résolu la dernière de mes erreurs et la réplication semble fonctionner comme prévu maintenant!

6
TH1981

Code d'erreur 20 :

indique que la connexion réseau a été refusée. Vous devez vérifier qu'un serveur MySQL est en cours d'exécution, qu'il dispose de connexions réseau activées et que le port réseau que vous avez spécifié est celui configuré sur le serveur.

Je pense que vous avez déjà établi que le serveur maître fonctionne.

Vous pouvez vérifier si vous pouvez vous connecter de l'esclave au maître avec:

mysql -u slave_user -p -h $master_ip_address -P 3306 

Juste pour être sûr, vous pouvez spécifier explicitement le port dans le CHANGE MASTER TO commande en ajoutant MASTER_PORT=3306. (C'était la solution à ne autre question où le code d'erreur 2003 était le problème.)

Pour vérifier que slave_user dispose des droits appropriés, exécutez ceci sur le maître:

SHOW GRANTS FOR slave_user@'%';

(Cela devrait répondre par quelque chose sur "ESCLAVE DE RÉPLICATION SUR *. *")

Il peut également être utile de consulter la documentation sur bind-address .

Dans le CHANGE MASTER TO MASTER_Host commande, notez qu'il existe évidemment une différence entre les adresses IP locales et externes, et vous devez utiliser l'adresse IP externe ici puisque vous répliquez sur Internet. (Sur cette note, une fois que vous avez résolu le problème de réplication, il est probablement logique de activer le cryptage .)

2
dbdemon