我有一对 MySQL 主从复制对,为了进行备份,我运行了一个脚本,该脚本会停止从服务器、转储数据库,然后重新启动从服务器。但是,重新启动后,从服务器的 MySQL 守护进程 ( mysqld
) 因文件损坏而失败/var/lib/mysql/mysql.index
- 即最后一行索引文件名前面添加了“^@”字符,导致该索引文件无法读取。只需删除这些字符,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
是什么原因导致了这种损坏?我该如何防止它发生?