Mysql – How to eradicate Mysql Slave Replication delays when huge updates from master

MySQLmysql-5.1replication

At my environment we had slave replication with mysql server version 5.1.47
enterprise version.When ever there is huge updates from master, slave is lagging behind
the master. What is the best possible way to eradicate it.

In certain period there will be a huge updates, by observing bin logs updates i
could find 30 MB per minute from master which leads to slave replication delays.

  Slave :

   mysql> show processlist; show slave status\G
  +--------+----------------+-------------------+--------------+---------+---------+----------------------------------+-----------------------------------------------------------------------------------------------------+
  | Id     | User           | Host              | db           | Command | Time    | State                            |Info                                                                                                  | 
  +--------+----------------+-------------------+--------------+---------+---------+----------------------------------+------------------------------------------------------------------------------------------------------+
  |      6 | system user    |                   | NULL         | Connect | 9548580 | Waiting for master to send event | NULL 
  |      7 | system user    |                   | cs_prod | Connect |    2150 | update                           | INSERT INTO prod_last_item(prod1_id, prod2_id, prod_item, prod_no) VALUES (15055876, 2372515          |  
  | 495447 | usr_replica    | 192.168.10.100:47020 | NULL      | Query   |       0 | NULL                             | show processlist|
  | 496035 | master_mon     | 192.168.10.111:42175 | mysql     | Sleep   |       6 |                                  |    NULL                                                                                                 |
  +--------+----------------+-------------------+--------------+---------+---------+----------------------------------+------------------------------------------------------------------------------------------------------+



        *************************** 1. row ***************************
           Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.10.111
              Master_User: replication
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: dbfr-bin.009808
      Read_Master_Log_Pos: 657767101
           Relay_Log_File: dbfr-relay.024833
            Relay_Log_Pos: 643748273
    Relay_Master_Log_File: dbfr-bin.009807
         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: 643748129
          Relay_Log_Space: 1731510298
          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: 2150
    Master_SSL_Verify_Server_Cert: No
            Last_IO_Errno: 0
            Last_IO_Error: 
           Last_SQL_Errno: 0
           Last_SQL_Error: 
     1 row in set (0.00 sec)

   mysql> select (2150)/60);
            +-----------+
            | (2150)/60 |
            +-----------+
            | 35.8333   |
            +-----------+
            1 row in set (0.00 sec)


        From Master Data updates :

      mysql> select now();show master logs;system sleep 60;show master logs;
             +---------------------+
             | now()               |
             +---------------------+
             | 2011-12-26 15:27:53 |
             +---------------------+
             1 row in set (0.00 sec)

             +-----------------+------------+
             | Log_name        | File_size  |
             +-----------------+------------+
             | db-bin.009803   | 1073742199 |
             | db-bin.009804   | 1073742313 |
             | db-bin.009805   | 1073742225 |
             | db-bin.009806   | 1073741957 |
             | db-bin.009807   | 1073742271 |
             | db-bin.009808   |  383125494 |
             +-----------------+------------+
             6 rows in set (0.00 sec)

            +-----------------+------------+
            | Log_name        | File_size  |
            +-----------------+------------+
            | db-bin.009803   | 1073742199 |
            | db-bin.009804   | 1073742313 |
            | db-bin.009805   | 1073742225 |
            | db-bin.009806   | 1073741957 |
            | db-bin.009807   | 1073742271 |
            | db-bin.009808   |  413567052 |
            +-----------------+------------+
            6 rows in set (0.01 sec)

            mysql> select (383125494)/1024/1024;
              +-----------------------+
              | (383125494)/1024/1024 |
              +-----------------------+
              | 365.37694359          |
              +-----------------------+
              1 row in set (0.01 sec)

             mysql> select (413567052)/1024/1024;
                    +-----------------------+
                    | (413567052)/1024/1024 |
                    +-----------------------+
                    | 394.40827560          |
                    +-----------------------+
                    1 row in set (0.00 sec)

              mysql> select (394.40827560-365.37694359);
                   +-----------------------------+
                   | (394.40827560-365.37694359) |
                   +-----------------------------+
                   | 29.03133201                 |
                   +-----------------------------+
                   1 row in set (0.00 sec)

Best Answer

There's a stack of system related questions here. We don't know what the hardware looks like for your master or slave. Maybe you're lacking RAM on the slave, or any number of other differences.

The master is probably receiving bursts of updates in parallel from many client connections, and for whatever reason, the slave can't keep up since all replication is done in serial.

If you have a lot of InnoDB activity on the master, you can probably disable InnoDB on the slave and gain some speed that way. That option and a few others are given here:

16.4.4.7: How can I use replication to improve performance of my system? http://dev.mysql.com/doc/refman/5.0/en/replication-faq.html#qandaitem-16-4-4-1-7

Or there could be configuration tweaks in my.cnf that could help you. I'd start by looking at your memory usage on the slave, and looking up buffer and memory related options for innodb and/or myisam depending on which of those engines you're using (or others).

You can also look through your binlogs with the mysqlbinlog tool to see what database and tables have the most activity. Then start working with your application developers and start chipping away at the problem.

Also check your mysqld error log on the slave. There might be clues in there.