Назад | Перейти на главную страницу

Повреждение файла индекса подчиненного сервера MySQL

У меня есть пара репликации 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

Что вызывает это повреждение и как предотвратить его появление?