web-dev-qa-db-fra.com

Réplication MySQL: secondes derrière le maître super haut élevé

J'ai mis en place un serveur Slave DB pour ma base de données de production, mais lorsque j'ai vérifié le statut d'esclave de spectacle, j'ai remarqué un super grand nombre en quelques secondes derrière le maître.

Ceci est la sortie:

           Slave_IO_State: Waiting for master to send event
              Master_Host: 1.2.3.4
              Master_User: replicator
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.000173
      Read_Master_Log_Pos: 15909435
           Relay_Log_File: mysqld-relay-bin.000079
            Relay_Log_Pos: 91173356
    Relay_Master_Log_File: mysql-bin.000093
         Slave_IO_Running: Yes
        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: 91173210
          Relay_Log_Space: 8179978166
          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: 486330
Master_SSL_Verify_Server_Cert: No
            Last_IO_Errno: 0
            Last_IO_Error: 
           Last_SQL_Errno: 0
           Last_SQL_Error: 
Replicate_Ignore_Server_Ids: 
         Master_Server_Id: 1
1 row in set (0.00 sec)

ERROR: 
No query specified

Ensuite, lorsque j'exécute une liste de processus, je vois que l'heure du fil correspond à l'heure indiquée en quelques secondes derrière:

mysql> SHOW PROCESSLIST;

| 40 | system user |           | NULL | Connect |  66530 | Waiting for master to send event | NULL             |
| 41 | system user |           | NULL | Connect | 486330 | Reading event from the relay log | NULL             |
| 45 | root        | localhost | NULL | Query   |      0 | NULL                             | SHOW PROCESSLIST |

Ce temps est tombé lentement. Read_master_log_pos, relais_log_pos, exécutant_log_pos et relais_log_space changent tout le temps.

J'ai également vérifié l'heure/la date et les deux serveurs sont synchronisés.

Du côté maître:

mysql> SHOW PROCESSLIST;

| 66739 | replicator | 1.2.3.5:52884 | NULL                | Binlog Dump |    65671 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL             

et montrer des hôtes esclaves a l'air vide ...

mysql> SHOW SLAVE HOSTS;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
|         2 |      | 3306 |         1 |
+-----------+------+------+-----------+
1 row in set (0.00 sec)

mysql> 

Alors qu'est-ce qui se passe réellement ici? On dirait que l'esclave est en fait connecté et travaillant, mais très lent? Quelqu'un peut-il me donner des astuces sur la façon de faire plus de déboguer à ce sujet? Le serveur est plutôt inactif à 95%.

8
Matías

Lorsque vous voyez le Seconds_Behind_Master C'est élevé, je regarde ce qui suit:

Relay_Log_Space: 8179978166

Vous avez 7,6182 Go de journaux de relais à traiter.

Master_Log_File: mysql-bin.000173
Relay_Master_Log_File: mysql-bin.000093

Cela me dit que vous avez lu jusqu'à mysql-bin.000173, Mais vous traitez actuellement des choses à partir du mysql-bin.000093.

Cela me dise également que vous avez environ 80 bûches binaires sur le maître, environ 100 Mo.

Le Seconds_Behind_Master Est simplement le maintenant () moins l'horodatage défini à mysql-bin.000093 (Relay_master_log_file) position 91173210 (Exécu_master_log_pos).

Tant que slave_sql_thread est oui, les journaux relais sont traités.

  • Relay_Log_Space Diminuera chaque fois qu'un journal de relais est effectué
  • Exec_Master_Log_Pos Augmentera jusqu'à ce que le journal de relais actuel soit effectué, puis réinitialise au début du prochain relais
  • L'horodatage continue d'augmenter, ce qui rend Seconds_Behind_Master Diminue (maintenant (() moins l'horodatage défini à relais_master_log_file position exécu_master_log_pos)

C'est ce qui se passe lorsque la réplication est éteinte pendant 486330 secondes (5 jours 15 heures 5 minutes 29 secondes) et vous exécutez start slave;

Regardez votre SHOW PROCESSLIST;. Le fichier IO Le fil a été augmenté de 66530 secondes (18 heures 28 minutes 50 secondes). Cela signifie que quelqu'un ou quelque chose a commencé la réplication 18 heures 28 minutes il y a 50 secondes.

Vous avez indiqué dans votre question que vous avez configuré la réplication pour le serveur de production. Cela signifie que vous avez couru le mysqldump 5 jours 15 heures 5 minutes il y a 29 secondes et a commencé à reproduire du maître de production 18 heures 28 minutes il y a 50 secondes.

Si vous aviez configuré l'esclave le même jour, vous avez obtenu le MySqldump du maître, la charge de réplication serait beaucoup moins. Néanmoins, la réplication fonctionne normalement à fournir Slave_IO_Thread Et Slave_SQL_Thread Dites tous les deux Yes.

15
RolandoMySQLDBA