Восстановление БД MySQL в формате InnoDB

Итак, случился «Ой». БД не запускается. Что делать?

  1. Смотрим размер ib_logfile0 файла:

2. Запускаем mysql:

Если все хорошо Вы должны увидеть следующее:
InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on
InnoDB: Skipping log redo
070625 11:59:36 InnoDB: Started; log sequence number 0 0
InnoDB: !!! innodb_force_recovery is set to 6 !!!
070625 11:59:36 [Note] /usr/sbin/mysqld: ready for connections.
Version: ‘5.0.18’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 SUSE MySQL

Далее дампим поднявшуюся базу данных:
mysqldump -u root -p database > database.sql

Если Вы получите следующее сообщение, это значит, что файлы системного журнала Innodb  повреждены:
Got error: 1146: Table ‘database.table’ doesn’t exist when using LOCK TABLES

Чтобы решить проблему с хранением ib_logfile0 файла нужна актуальная резервная копия, поэтому восстановите все файлы от старшей резервной копии. Это не безотказное решение, но ценная попытка.

Восстановите Ваши данные:
mysql -u root -p database < database.sql

Процедуры в MySQL..

Давно хотел попробовать переложить часть кода и логики на плечи MySQL.. По идее говорят за счет сокращения обмена сетевыми пакетами, скорость выполнения значительно увеличивается. В зависимости от задачи конечно. Ну попробовал.. Не очень понравилось. Писать на этом так называемом языке очень не удобно. Особенно эти «курсоры» в MySQL. В итоге пришел к выводу, что таки да. Смысл писать есть, но только если «очень -очень нада»..

Ниже пример процедуры заполнения таблицы на основании другой..

 

Удаление миллионов записей из таблицы MySql

Если в таблице нужно удалить несколько миллионов записей, то MySQL может потребоваться на это несколько часов. Но можно поступить по другому: на время отключить ключи, а потом их снова включить. Например:

C и работа с MySQL. Пример.

Как оказалось просто Си (не С++), жутко не удобен при работе со строками и массивами. Но это лирика.. Ниже пример кода для выполнения запросов к MySQL, а так-же запуск выполнение сторонней программы.

Работа с транзакциями MySQL на PHP

С часа три вероятно мучался вчера, пока подобрал вариант кода, который корректно отрабатывает.

Использованный класс:

Как оказалось, главной фишкой — нельзя использовать внутри цикла begin transaction — commit (или rollback) обработку ошибок при помощи mysqli_error — PHP падает в FATAL ERROR.. Почему? Вопрос интересный.

1 9 10 11 12 13