Ремонт и восстановление базы MySQL по SSH
База на MySQL в несколько сотен тысяч сообщений требует регулярного обслуживания, там неизбежно возникают ошибки, пускай и мелкие, но они имеют свойство накапливаться, и если забить на несколько месяцев, то возможно возникновение проблем. В большинстве случаев все легко решается простой оптимизацией таблиц (тех, которым эта оптимизация нужна) через phpMyAdmin, иногда какие-то таблицы приходится восстанавливать. Но иногда проблема оказывается слишком серьезной и phpMyAdmin банально виснет пытаясь восстановить огромную таблицу. Вот тут то на помощь и приходит возможность зайти и все исправить через SSH.
Что такое SSH я здесь объяснять не стану, подразумеваем что вы уже знаете что это и как этим пользоваться. По этому начнем сразу в главного.
Итак, заходим по SSH на сервер и набираем следующую команду:
mysqlcheck -uваш_логин_базы -pваш_пароль_базы –auto-repair –check –optimize –all-databases
На место команды -uваш_логин_базы подставляете после -u свой логин, на место пароля – свой пароль. Тут все просто. Остальные инструкции обеспечивают проверку базы, в случае найденных ошибок восстановление, оптимизацию таблиц, ну и наконец последняя команда –all-databases означает что будут обработаны все базы данных. Работает эта утилита быстро, спокойно кушает то, на чем намертво виснет phpMyAdmin, в общем крайне полезная штука.
На случай если вам вдруг нужны другие команды утилиты mysqlcheck привожу тут списочек (его же можно получить просто набла в командной строке mysqlcheck или mysqlcheck -help):
- A, –all-databasesПроверить все базы данных. Аналогична опции –databases, если указать все базы данных.
- 1, –all-in-1Вместо выполнения запросов для каждой таблицы в отдельности выполнить все запросы в одном отдельно для каждой таблицы. Имена таблиц будут представлены в виде списка имен, разделенных запятой.
- a, –analyzeАнализировать данные таблицы.
- -auto-repairЕсли проверенная таблица повреждена, автоматически восстановить ее. Исправления будут произведены после проверки всех таблиц, если были обнаружены повреждения.
- #, –debug=…Выводит информацию журнала отладки. Часто используется следующий набор параметров: ‘d:t:o,filename’
- -character-sets-dir=…Директория, где находятся установки символов.
- c, –checkПроверить таблицу на наличие ошибок.
- C, –check-only-changedПроверить только таблицы, измененные со времени последней проверки или некорректно закрытые.
- -compressИспользовать сжатие данных в протоколе сервер/клиент.
- ?, –helpВывести данную вспомогательную информацию и выйти из программы.
- B, –databasesПроверить несколько баз данных. Обратите внимание на разницу в использовании: в этом случае таблицы не указываются. Все имена аргументов рассматриваются как имена баз данных.
- -default-character-set=…Установить набор символов по умолчанию.
- F, –fastПроверить только базы данных, которые не были закрыты должным образом.
- f, –forceПродолжать даже при получении ошибки SQL.
- e, –extendedПри использовании данного параметра совместно с CHECK TABLE можно быть на 100 процентов быть уверенным в целостности таблицы, хотя это и займет много времени. Если же использовать этот параметр с REPAIR TABLE, запустится расширенное восстановление таблицы, которое может потребовать не только длительного времени выполнения, но и привнесет также массу ненужных строк!
- h, –host=…Подключиться к хосту.
- m, –medium-checkБыстрее, чем –extended-check, но находит только 99,99 процентов всех ошибок. Для большинства случаев этот вариант вполне подходит.
- o, –optimizeОптимизировать таблицу.
- p, –password[=…]Используемый пароль при подключении к серверу. Если пароль не указан, у пользователя запрашивается пароль с терминала.
- P, –port=…Номер порта, используемого для подключения по TCP/IP.
- -protocol=(TCP | SOCKET | PIPE | MEMORY)Для указания протокола соединения, который надлежит использовать. Новшество в MySQL 4.1.0.
- q, –quickПри использовании данной опции совместно с CHECK TABLE предотвращается сканирование строк для корректировки неправильных связей. Это наиболее быстрый метод проверки. Если же использовать этот параметр с REPAIR TABLE, программа попытается восстановить только систему индексов. Это наиболее быстрый метод восстановления таблицы.
- r, –repairМожет исправить почти все, за исключением уникальных ключей, имеющих дубликаты.
- s, –silentВыводить только сообщения об ошибках.
- S, –socket=…Файл сокета, используемый для подсоединения.
- -tablesПерекрывает опцию –databases (-B).
- u, –user=#Имя пользователя MySQL, если этот пользователь в данное время не является активным.
- v, –verboseВывести информацию о различных этапах.
- V, –versionВывести информацию о версии и выйти из программы.
Общий формат запуска утилиты (в зависимости от потребностей чинить ли отдельные таблицы в базе, отдельные базы, или все сразу):
shell> mysqlcheck [OPTIONS] database [tables]
shell> mysqlcheck [OPTIONS] –databases DB1 [DB2 DB3…]
shell> mysqlcheck [OPTIONS] –all-databases