Репликация MySQL застряла - PullRequest
0 голосов
/ 31 августа 2018

Я настроил репликацию MySQL от ведущего к подчиненному. «SHOW SLAVE STATUS \ G» показывает постоянно увеличивающийся Seconds_Behind_Master. Вот три последовательных результата от самого старого (вверху) до самого нового (внизу). Кто-нибудь знает, что не так? ............................................. .................................................. .................................................. .................................................. .................................................. .......

1

    mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: <excluding>
                  Master_User: <excluding>
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.002723
          Read_Master_Log_Pos: 893947806
               Relay_Log_File: design-hotels-database-relay-bin.000002
                Relay_Log_Pos: 7692403
        Relay_Master_Log_File: mysql-bin.002723
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: starwood_sop,starwood_blp
           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: 192464416
              Relay_Log_Space: 709176017
              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: 76613
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: 3
                  Master_UUID:
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     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:
1 row in set (0.04 sec)

2

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: <excluding>
                  Master_User: <excluding>
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.002723
          Read_Master_Log_Pos: 908310158
               Relay_Log_File: design-hotels-database-relay-bin.000002
                Relay_Log_Pos: 7906291
        Relay_Master_Log_File: mysql-bin.002723
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: starwood_sop,starwood_blp
           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: 192678304
              Relay_Log_Space: 723538369
              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: 76698
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: 3
                  Master_UUID:
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     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:
1 row in set (0.06 sec)

3

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: <excluding>
                  Master_User: <excluding>
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.002723
          Read_Master_Log_Pos: 945765663
               Relay_Log_File: design-hotels-database-relay-bin.000002
                Relay_Log_Pos: 8389913
        Relay_Master_Log_File: mysql-bin.002723
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: starwood_sop,starwood_blp
           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: 193161926
              Relay_Log_Space: 760993874
              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: 76870
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: 3
                  Master_UUID:
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     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:
1 row in set (0.04 sec)

1 Ответ

0 голосов
/ 31 августа 2018

Ну, Exec_Master_Log_Pos также увеличивается, что указывает на то, что поток SQL действительно работает и применяет изменения. Просто не достаточно быстро, чтобы не отставать от входящих логов, на что указывает скорость увеличения Read_Master_Log_Pos

    Exec-pos              Read-pos
1:  192464416             893947806
2:  192678304 (+213,888)  908310158 (+14,362,352
3:  193161926 (+483,622)  945765663 (+37,455,505) 

Таким образом, входящие журналы (Read-pos) поступают со скоростью, в разы превышающей скорость, с которой репликация может выполнять изменения на ведомом экземпляре.

Задержка репликации является сложной проблемой, и есть много причин этого. Существует множество параметров конфигурации, которые можно использовать для повышения пропускной способности подчиненного устройства. Вы ничего не описали о своей текущей конфигурации, природе изменений в вашей базе данных или таблицах, которые меняются, поэтому я не могу дать действительно информированные рекомендации. Но ниже приведены некоторые типичные изменения, которые я обычно делаю:

innodb_buffer_pool_size = <high> # depends on server RAM and other factors 
innodb_log_file_size = 1G # or more
innodb_flush_log_at_trx_commit = 2
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
sync_master_info = 0
binlog_format = ROW # make sure all tables have PRIMARY KEY constraints

Подробнее об этих параметрах см. В документации MySQL.

Даже со всеми этими уловками настройки, в конечном итоге вы можете достичь предела, то есть способности раба воспроизводить в одном потоке изменения, которые были созданы во многих потоках на ведущем устройстве.

Возможно, вы сможете использовать многопоточное ведомое устройство, но это не так просто, как кажется, поэтому вам нужно больше узнать об этом, прежде чем вы попробуете это.

Даже с настройкой и многопоточным ведомым устройством, возможно, вы достигли предела своего оборудования. Он просто не может обработать изменения достаточно быстро. Вы можете модернизировать аппаратное обеспечение, чтобы ускорить процессоры и ускорить хранение.

Другим вариантом является снижение скорости изменений в вашей основной базе данных. Либо дросселируйте изменения на ведущем устройстве, либо разверните несколько мастеров с соответствующими им ведомыми устройствами и сбалансируйте изменения на нескольких ведущих устройствах.

...