У меня есть пара репликации MySQL master-slave, и для резервного копирования я запускаю сценарий, который останавливает подчиненное устройство, выгружает базу данных, а затем повторно запускает подчиненное устройство. Однако после перезапуска демон MySQL подчиненного устройства (mysqld
) не работает из-за коррупции в /var/lib/mysql/mysql.index
file - а именно, символы «^ @» добавляются к имени индексного файла в последней строке, что делает этот индексный файл нечитаемым. Простое удаление этих символов позволяет MySQL нормально запускаться, а затем репликация продолжается правильно. В реальных таблицах базы данных нет искажений данных, только в этом единственном индексном файле.
Соответствующие части сценария резервного копирования (отредактированы):
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
Что вызывает это повреждение и как предотвратить его появление?