Eu tenho um par de duplicação mestre-escravo do MySQL, e para fazer backups, eu executo um script que para o escravo, despeja o banco de dados e reinicia o escravo. No entanto, após a reinicialização, o daemon do MySQL do escravo ( mysqld
) falha devido à corrupção no arquivo /var/lib/mysql/mysql.index
- ou seja, caracteres "^ @" são anexados ao nome do arquivo de índice na última linha, tornando esse arquivo ilegível. A simples remoção desses caracteres permite que o MySQL inicie normalmente e a replicação continue corretamente. Não há corrupção de dados nas tabelas reais do banco de dados, apenas nesse único arquivo de índice.
As partes relevantes do script de backup (redigidas):
mysqladmin -uroot -p${PASSWORD} stop-slave >> $LOGFILE
# Lock the database
mysql -uroot -p${PASSWORD} -e 'FLUSH TABLES WITH READ LOCK'
# Backup live accounts
mysqldump -uroot -p${PASSWORD} --routines ${LIVEDB} > ${BACKUPDIR}/${LIVEDB}.sql
mysqldump -uroot -p${PASSWORD} --routines ${OTHERDB} > ${BACKUPDIR}/${OTHERDB}.sql
# Unlock the database
mysql -uroot -p${PASSWORD} -e 'UNLOCK TABLES' >> $LOGFILE
# Start replication
mysqladmin -uroot -p${PASSWORD} start-slave >> $LOGFILE
mysql -uroot -p${PASSWORD} -e 'SHOW SLAVE STATUS\G' >> $LOGFILE
echo 'date' Database backup ends >> $LOGFILE
O que está causando essa corrupção e como evito que isso aconteça?
Tags mysql mysql-replication