From the MySQL 5.1 manual:
15.4.1.16. Replication and REPAIR TABLE
When used on a corrupted or otherwise damaged table, it is possible for the REPAIR TABLE
statement to delete rows that cannot be recovered. However, any such modifications of
table data performed by this statement are not replicated, which can cause master and
slave to lose synchronization. For this reason, in the event that a table on the master
becomes damaged and you use REPAIR TABLE to repair it, you should first stop replication
(if it is still running) before using REPAIR TABLE, then afterward compare ...
So, hardware trouble caused a VPS to go down. This VPS was running a
MySQL server in a slave setup. Not surprisingly, the unclean shutdown
broke succesful slaving.
There are several possible causes for the slave setup breakage. This time it
was the local relay log file (mysqld-relay-bin.xxxx)
that was out of sync.
SHOW SLAVE STATUS\G looked like this:
...
Master_Log_File: mysql-bin.001814 <-- remote/master file (IO thread)
Read_Master_Log_Pos: 33453535 <-- remote/master pos (IO thread)
Relay_Log_File: mysqld-relay-bin.001383 <-- local/slave file (SQL thread)
Relay_Log_Pos: 34918332 <-- local/slave pos (SQL thread)
Relay_Master_Log_File: mysql-bin.001812 <-- remote/master file (SQL thread)
...
Last_Errno ...
Sometimes you're in a situation where you know that a database is
more heavily loaded than it should be. Time to figure out which queries
are stressing it the most.
The standard thing to do with a MySQL database would be to enable
query logging with general_log_file. Or, to get only slow
queries and those not using indexes, the log_slow_queries.
But, if this is a mission critical and heavily loaded database, adding
expensive logging may be just enough to give it that final push to
become overloaded.
Perhaps taking just a sample of queries is good enough too. In ...