• mysql_update -p
  • mysqlcheck -A -u root -p
  • mysqld --defaults-extra-file=/etc/mysql/debian.cnf --innodb_force_recovery=6
chown -R mysql:mysql /var/lib/mysql
mysqlcheck --check-upgrade --all-databases --auto-repair -uroot -p
service mysql restart

Восстановление таблиц MyISAM

  • myisamchk *.MYI - проверка
  • myisamchk -r *.MYI - восстановление

Проверка таблиц InnoDB

for i in *.ibd ; do
  echo $i
  innochecksum $i
done

Восстановление таблиц InnoDB

Так как innodb практически не имеет средств восстановления. Самым лучшим способом сохранения информации является резервным копированием. Для этих целей я написал badh/sh скрипт Система резервного копирования и восстановления данных для MySql

[mysqld]
innodb_force_recovery = 1 # 1,2,3,4
  • 1 (SRV_FORCE_IGNORE_CORRUPT)

Let the server run even if it detects a corrupt page. Try to make SELECT * FROM tbl_name jump over corrupt index records and pages, which helps in dumping tables.

  • 2 (SRV_FORCE_NO_BACKGROUND)

Prevent the main thread from running. If a crash would occur during the purge operation, this recovery value prevents it.

  • 3 (SRV_FORCE_NO_TRX_UNDO)

Do not run transaction rollbacks after recovery.

  • 4 (SRV_FORCE_NO_IBUF_MERGE)

Prevent insert buffer merge operations. If they would cause a crash, do not do them. Do not calculate table statistics.

  • 5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

Do not look at undo logs when starting the database: InnoDB treats even incomplete transactions as committed.

  • 6 (SRV_FORCE_NO_LOG_REDO)

Do not do the log roll-forward in connection with recovery.

  • mysql_install_db --defaults-file=/etc/mysql/my.cnf --force --basedir=/usr --datadir=/var/lib/mysql --user=mysql
  • mysqladmin -u root password 'new-password'