Проверка базы на ошибки mysql: Исправление ошибок в базе MySQL
Исправление ошибок в базе MySQL
Одной из ярких причин возникновения ошибок в базе данных может послужить неправильная остановка сервера MySQL. Как это обычно бывает, сбой в электропитании сервера, либо иные причины, повлекшие за собой банальное отключение машины, либо перезагрузку. Иногда, и нередко подобного рода сбои могут повлечь за собой проблемы, которые решаются лишь путем восстановления данных из бэкапа, и это к вопросу для чего нужно делать бэкапы. Наличие ошибок в базе данных может проявиться не сразу, однако если они есть, то вы их рано или поздно обязательно заметите. Проблемы, как правило, проявляются в виде ошибок после запросов к базе, либо база начинает уходить в раздумье на не свойственное для этого время.
Давайте посмотрим, что можно предпринять первым делом, чтобы попытаться исправить ситуацию. Утилита mysqlcheck как правило устанавливается по умолчанию с сервером MySQL может быть использована для проверки баз данных на ошибки. Рассмотрим пример ее использования.
Использование утилиты mysqlcheck
# mysqlcheck -u root -p --optimize --auto-repair --all-databases
Назначение параметров:
--optimize – Оптимизируем все базы. --auto-repair – Ремонтируем все базы. --all-databases – Проверяем ошибки у всех баз.
Если база данных больших размеров, а вам нужно срочно поправить определенную таблицу, то вы можете запустить проверку определенной таблицы в базе данных.
Проверка отдельной таблицы в базе данных:
# mysqlcheck -r имя_базы имя_таблицы_в_базе -u root -p
Исправление таблиц MyISAM.
Так же существует утилита myisamchk, отличается от предыдущей утилиты тем, что перед её использованием необходимо останавливать сервер баз данных, в то время как mysqlcheck может использоваться при работающем сервере. Рассмотрим пример использования утилиты myisamchk.
Останавливаем сервер MySQL
# service mysqld stop
Анализируем базу данных на наличие ошибок
# myisamchk -s /var/db/mysql/наша_база/*.MYI
Обратите внимание, что путь к базам данных у вас может отличаться, этот момент вам следует так же уточнить. Если есть ошибки, то появиться сообщение подобного вида:
myisamchk: warning: 2 client is using or hasn't closed the table properly MyISAM-table '/var/db/mysql/наша_база/ary_mem.MYI' is usable but should be fixed
Исправляем ошибки с помощью myisamchk
# myisamchk -r /var/db/mysql/наша_база/ary_mem.MYI
Исправляем ошибки по всем таблицам в базе (рекурсивно)
# myisamchk -r /var/db/mysql/наша_база/*.MYI
Процесс исправления ошибок будет сопровождаться подобным выводом сообщений в окне консоли:
- Fixing index 1 - Fixing index 2 - Fixing index 3
После того как ошибки исправлены, можно запустить сервер MySQL, чтобы убедиться что всё в порядке.
Запуск сервера MySQL
# service mysqld start
Хотелось бы отметить один момент, что команды остановки и запуска сервера MySQL, а так же пути расположения баз данных на вашем сервере могут отличаться, поэтому вам так же следует эти моменты учесть.
Проверка, восстановление и оптимизация баз MySQL
Программа mysqlcheck используется для проверки целостности (-c, -m, -C), восстановления (-r), анализа (-a) или оптимизации (-o) таблиц базы данных MySQL. Некоторые опции (например -e и -q) могут использоваться одновременно.
Не все опции поддерживаются различными движками MySQL. Опции -c, -r, -a и -o взаимоисключаемые, что означает, что будет применена последняя указанная опция.
Если не указано ничего, то будет применена опция -c. Альтернативами (синонимами) являются:
mysqlrepair: опция по умолчанию -r
mysqlanalyze: опция по умолчанию -a
mysqloptimize: опция по умолчанию -o
Использование:
mysqlcheck [OPTIONS] database [tables]
или:
mysqlcheck [OPTIONS] --databases DB1 [DB2 DB3...]
или
mysqlcheck -uлогин -pпароль [--auto-repair] [--check] [--optimize] [--all-databases] [имя_базы_данных]
Опции:
-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 можно быть уверенным в целостности таблицы. Если же использовать этот параметр с REPAIR TABLE, запустится расширенное восстановление таблицы.
-h, --host=...
Хост базы данных.
-m, --medium-check
Быстрее, чем —extended-check, но находит только 99,99 процентов всех ошибок.
-o, --optimize
Оптимизировать таблицу.
-p, --password[=...]
Используемый пароль при подключении к серверу. Если пароль не указан, у пользователя запрашивается пароль с терминала.
-P, --port=...
Номер порта, используемого для подключения по TCP/IP.
--protocol=(TCP | SOCKET | PIPE | MEMORY)
Для указания протокола соединения, который надлежит использовать.
-q, --quick
При использовании данной опции совместно с CHECK TABLE предотвращается сканирование строк для корректировки неправильных связей. Это наиболее быстрый метод проверки. Если же использовать этот параметр с REPAIR TABLE, программа попытается восстановить только систему индексов. Это наиболее быстрый метод восстановления таблицы.
-r, --repair
Может исправить почти все, за исключением уникальных ключей, имеющих дубликаты.
-s, --silent
Выводить только сообщения об ошибках.
-S, --socket=...
Файл сокета, используемый для подсоединения.
--tables
Перекрывает опцию —databases (-B).
-u, --user=#
Имя пользователя MySQL, если этот пользователь в данное время не является активным.
-v, --verbose
Вывести информацию о различных этапах.
-V, --version
Вывести информацию о версии и выйти из программы.
Полезные команды для проверки работы MySql | Клуб разработки сайтов
Собрал список, который занимал у меня штук 30 открытых вкладок. Когда я понял, что сил по ним бегать нет, то решил собрать такой материал, в котором будут все необходимые команды для проверки работы базы данных Mysql и тестирования различных параметров. Теперь постараюсь всё это собрать воедино и сохранить. Кто читал предыдущую мою статью про настройки my.cnf тот уже видел, что я активно занимаюсь оптимизацией базы данных.
Mysqltuner команды проверки и реагирования
Название конечно звучит странно, но в этой части статьи именно все команды для проверки работы Mysql с помощью mysqltuner и соответственно необходимые команды для того, чтобы устранить некоторые проблемы.
Что такое mysqltuner думаю обьяснять не надо, как и его задачу – проверку Mysql параметров. Зачастую кстати он выдаёт одинаковые рекомендации, но чтобы запустить его надо просто в командной строке набрать
# mysqltuner
Оптимизация всех баз данных
После этого начнется проверка параметров Mysql и появится вывод информации. Как правило в самом начале выходят данные о фрагментации баз данных, их необходимо оптимизировать. Для этого вводим в командную строку следующую команду:
Восстановление & Оптимизацияmysqlcheck -Aor -p
Только воcстановлениеmysqlcheck -Ar -p
Только оптимизацияmysqlcheck -Ao -p
Описание аргументов:
-A – Проверить на ошибки все Mysql базы данных
-r – Отремонтировать все Mysql базы данных
-o – Оптимизировать все Mysql базы данных
-p – Для доступа к базе используется пароль
После этого начинается оптимизация баз данных, которые имеют не оптимизированные таблицы.
Вывод данных состояния MYSQL
Теперь следующий блок запросов, которые вводятся в Mysql для вывода данных о состоянии переменных
show status LIKE "Key%"; – выводит данные о состояние буфера ключей
show status LIKE "Opened_tables%"; – выводит данные об открытых таблицах
show status LIKE "Threads_running%" – вывод данных исходя из параметров умножения количества threads на параметры sort_buffer
show status LIKE "Max_used_connections%"; – данные о максимальном количестве одновременных подключений к базе. Помогает настроить максимальное количество подключений.
SHOW STATUS LIKE 'Qcache%'; – выводит данные о работе кеша определенного query_cache_limit и query_cache_size.
show processlist; – данные о процессах Mysql
FLUSH QUERY CACHE – дефрагментировать кэш Mysql
Оптимизация медленных запросов Mysql
Следующая часть посвящена тому, как определить медленные запросы к Mysql и анализировать их.
Для начала снова обратимся к файлу конфигурации MySQl – my.cnf. Здесь необходимо обратить внимание на такой пункт настроек, как лог медленных запросов. Выглядит он так:
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 15
#log-queries-not-using-indexes
Здесь вы видите 3 пункта. Определение где будет храниться лог запросов, определение количества секунд выполнения запроса, которые должны заноситься в лог и указание записывать отсутствие индексов у баз данных. Включаем все три и через некоторое время проводим анализ с помощью команды:
mysqldumpslow -s c -t 10
Эта команда выведет 10 самых медленных запросов. Если изменить цифру соответственно выведется нужное количество запросов сортировкой по самому долгому выполнению. После этого вы уже сможете анализировать их и оптимизировать скрипты.
Исправляем поврежденные MySQL-таблицы с myisamchk / Блог компании King Servers / Хабр
MyISAM — основная, вернее, одна из главных (наряду с InnoDB) систем хранения данных в СУБД MySQL. При этом MyISAM таблицы повреждаются очень просто — с этим проблем нет никаких. Сложнее все повреждения ликвидировать, хотя это тоже можно сделать довольно быстро. В этом материале объясняется, как можно решить проблему с использованием myisamchk для идентификации проблемы с MyISAM и ее исправления.
Общеизвестно, что при создании таблицы в MySQL, создаются три различных файла: *.frm — формат таблицы, *.MYD (MyData) — хранение данных, *.MYI (MyIndex) — индекс. Для крупных баз данных стоит использовать InnoDB, поскольку здесь есть некоторая схожесть с Oracle и соответствующая функциональность.
В качестве примера демонстрации ошибки будем использовать вот это:
undef error - DBD::mysql::db selectrow_array failed: Table 'attach_data' is
marked as crashed and should be repaired [for Statement "SELECT LENGTH(thedata)
FROM attach_data WHERE id = ?"] at Bugzilla/Attachment.pm line 344
Bugzilla::Attachment::datasize('Bugzilla::Attachment=HASH(0x9df119c)') calledПонятно, что таблица attach_data повреждена, и ее нужно исправить. Таблицу будем исправлять с использованием myisamchk.
1. Определяем все поврежденные таблицы, используя myisamchk
# myisamchk /var/lib/mysql/bugs/*.MYI >> /tmp/myisamchk_log.txt
myisamchk: error: Wrong bytesec: 0-0-0 at linkstart: 18361936
MyISAM-table 'attach_data.MYI' is corrupted
Fix it using switch "-r" or "-o"
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'groups.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'profiles.MYI' is usable but should be fixedЕсли указать вывод myisamchk во временный файл, на дисплее будут показаны только имена поврежденных таблиц. А вот в файле /tmp/myisamchk_log.txt будет указано гораздо больше данных включая имена неповрежденных таблиц:
Checking MyISAM file: user_group_map.MYI
Data records: 182 Deleted blocks: 0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 12. Исправляем поврежденные таблицы, используя myisamchk
Для этого используем myisamchk, с опцией -r, как и показано ниже:
# myisamchk -r profiles.MYI
- recovering (with sort) MyISAM-table 'profiles.MYI'
Data records: 80
- Fixing index 1
- Fixing index 2Здесь может появиться сообщение об ошибке: clients are using or haven’t closed the table properly, в случае, если таблицы до сих пор используются каким-либо приложением или другими таблицами. Для того, чтобы избежать появления этой ошибки, стоит завершить mysqld, прежде, чем начать исправление таблиц. Здесь можно использовать FLUSH TABLES.
3. Запускаем проверку и исправлением для всей БД MySQL
# myisamchk --silent --force --fast --update-state /var/lib/mysql/bugs/*.MYI
myisamchk: MyISAM file /var/lib/mysql/bugs/groups.MYI
myisamchk: warning: 1 client is using or hasn't closed the table properly
myisamchk: MyISAM file /var/lib/mysql/bugs/profiles.MYI
myisamchk: warning: 1 client is using or hasn't closed the table properly-s: выводим только ошибки. Можно использовать двойной -s -s, чтобы сделать режим максимально «тихим»;
-f: автоматический перезапуск myisamchk с опцией -r, есть обнаружены ошибки;
-F: проверка только таблиц, которые не были закрыты в нормальном режиме;
-U: отмечаем таблицы, как поврежденные, если обнаружены ошибки.
4. Использование дополнительной памяти для больших БД MySQL
В случае работы с большими БД восстановление может занять несколько часов. Если есть дополнительные ресурсы, их можно использовать для ускорения процесса:
# myisamchk --silent --force --fast --update-state \
--key_buffer_size=512M --sort_buffer_size=512M \
--read_buffer_size=4M --write_buffer_size=4M \
/var/lib/mysql/bugs/*.MYI5. Использование myisamchk для получения данных о таблице
При необходимости можно получить довольно много данных.
# myisamchk -dvv profiles.MYI
MyISAM file: profiles.MYI
Record format: Packed
Character set: latin1_swedish_ci (8)
File-version: 1
Creation time: 2007-08-16 18:46:59
Status: open,changed,analyzed,optimized keys,sorted index pages
Auto increment key: 1 Last value: 88
Data records: 88 Deleted blocks: 0
Datafile parts: 118 Deleted data: 0
Datafile pointer (bytes): 4 Keyfile pointer (bytes): 4
Datafile length: 6292 Keyfile length: 6144
Max datafile length: 4294967294 Max keyfile length: 4398046510079
Recordlength: 2124
table description:
Key Start Len Index Type Rec/key Root Blocksize
1 2 3 unique int24 1 1024 1024
2 5 765 unique char packed stripped 1 2048 4096
Field Start Length Nullpos Nullbit Type
1 1 1
2 2 3 no zeros
3 5 765 no endspace6. Все опции myisamchk
Для того чтобы получить дополнительную информацию по команде, стоит использовать помощь:
# myisamchk —help
Общие опции:
-s: только вывод ошибок;
-v: вывод большего количества информации;
-V: вывод версии и выход;
-w: ждать, если таблица заблокирована.
Опции проверки:
-c: проверка таблиц на ошибки;
-е: очень «грубая» проверка. Стоит использовать только в крайнем случае, если в обычном режиме ошибки не обнаруживаются;
-F: быстрая проверка, проверяются только таблицы, которые не закрывались правильно;
-С: проверка только таблиц, которые изменились со времени последней поверки;
-f: автоматический перезапуск myisamchk с опцией -r, есть обнаружены ошибки;
-i: вывод статистики по проверенным таблицам;
-m: облегченный режим проверки, быстрее, чем обычный, находится 99,99% ошибок;
-U: обновление статуса: пометка таблиц как поврежденных, если обнаруживаются любые ошибки;
-T: не помечать таблицы как проверенные.
Опции исправления:
-B: бэкап файла .MYD, «filename-time.BAK»;
—correct-checksum;
-е: попытка исправления максимального числа строк в файле данных. Кроме того, эта команда находит «мусорные» строки. Не стоит использовать эту команду, если ситуация не безнадежна;
-f: перезапись старых временных файлов;
-r: исправляет почти все, кроме уникальных ключей, которые на самом деле не уникальны;
-n: принудительная сортировка, даже, если временный файл получается очень большим;
-о: использование старого метода восстановления;
-q: быстрое исправление без модификации файла данных;
-u: распаковка файла, запакованного myisampack.
Оптимизация и восстановление баз данных MySQL с помощью mysqlcheck
В этой статье мы будем говорить о mysqlcheck, которая является инструментом обслуживания командной строки, что позволяет проверять, анализировать, ремонтировать, а также оптимизировать таблицы MySQL / MariaDB и базы данных.
Проверьте одну таблицу в базе данных
Следующая команда будет проверять сообщения таблицы в блоге базы данных:
$ mysqlcheck -c blog posts blog.posts OK
Если база данных защищена паролем , добавьте -u root -p в конце команды:
$ mysqlcheck -c blog posts -u root -p Enter password: blog.posts OK
Анализ всех таблиц в базе данных
Следующая команда будет проверять сообщения таблицы в блоге базы данных:
$ mysqlcheck -a blog posts blog.posts OK
Если сервер MySQL / MariaDB работает на удаленном хосте, добавьте -h в конце команды:
$ mysqlcheck -a blog posts -h remotehost.com blog.posts OK
Оптимизировать все таблицы во всех баз данных
$ mysqlcheck -o --all-databases blog.users note : Table does not support optimize, doing recreate + analyze instead status : OK mysql.time_zone_transition_type Table is already up to date
Table does not support optimize, doing recreate + analyze instead - означает, что мы делаем OPTIMIZE в таблицах InnoDB, который не поддерживает эту опцию. При выполнении OPTIMIZE в таблицах, InnoDB создает пустую таблицу, копирует все строки из существующей таблицы в новую, удаляет старую и переименовывает новую таблицу, а затем запускает ANALYZE в таблицах.Table is already up to date - Означает, что таблица актуальна, и нет никакой необходимости проверять её.
Восстановление нескольких баз данных
Следующая команда восстановит все таблицы в обоих базах данных:
$ mysqlcheck -r --databases blog blog2
Если вы видите: note : The storage engine for the table doesn't support repair, то это означает, что вы делаете REPAIR на InnoDB.
Оптимизация и ремонт всех таблиц во всех базах данных
Следующая команда будет проверять все таблицы во всех базах данных, и если какая-то таблица повреждена он будет автоматически исправит это эту таблицу:
$ mysqlcheck --auto-repair -o --all-databases
Большинство аргументов, используемых mysqlcheck
-c, --check | Проверить таблицу на наличие ошибок. |
-a, --analyze | Анализировать данные таблицы. |
-o --optimize | Оптимизация таблиц. |
-r, --repair | Выполнение работ по ремонту, которые можно исправить почти все, за исключением уникальных ключей, которые не являются уникальными. |
--auto-repair | Если проверенная таблица повреждена, автоматически восстановить ее. Ремонт будет сделан после того, как все таблицы были проверены. |
-A, --all-databases | Проверьте все базы данных. Это то же самое, как -databases со всеми выбранными базами данных. |
-B, --databases | Процесс все таблицы в названных баз данных. С помощью этой опции, все имена аргументов рассматриваются как имена баз данных, а не как имена таблиц. |
--tables | Заменяет -databases или -B вариант таким образом, что все аргументы имени следующей опции рассматриваются как имена таблиц. |
-g, --check-upgrade | Проверка таблицы для версии зависящих от изменений. Может использоваться с опцией -auto-repair для исправления таблиц, требующих версии зависящих от обновления. |
PS. Если вам понравился этот пост, пожалуйста, поделитесь им с друзьями в социальных сетях с помощью кнопок, расположенных ниже поста или просто оставьте комментарий. Благодарю.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Исправление ошибок в базе данных MySQL
Некоторые типы ошибок в работе с базой данных MySQL при импорте или экспорте базы данных.
Ошибка 1
При экспорте MySQL через phpMyAdmin возникала ошибка, которая приводила к невозможности выполнить сохранение база данных. Причина была в испортившихся таблицах, из-за которой и возникала ошибка.
Ошибка была следующего вида:
Не удалось создать резервную копию базы данных. Процесс завершился с ошибкой: ‘mysqldump: Got error: 1146: Table ‘site.wp_subscribe_reloaded_subscribers’ doesn’t exist when using LOCK TABLES
Решение
Через SSH зайти на VDS.
Использовать команду:
mysqlcheck -u MySQL_name -p MySQL_user_name
Ввести пароль от базы данных.
У меня был выведен список всех таблиц, где несуществующая таблица была показана с ошибкой. В самой базе данных MySQL её не было, а phpMyAdmin на неё все равно ругался.
MySQL_name.wp_statpress OK
MySQL_name.wp_subscribe_reloaded_subscribers
Error : Table ‘MySQL_name.wp_subscribe_reloaded_subscribers’ doesn’t exist
status : Operation failed
MySQL_name.wp_term_relationships OK
Ввести команду (подтвердить паролем):
Появится такая строка:
Нужно выбрать базу данных:
Показать таблицы в ней (Точка с запятой обязательна!):
Будут показаны все таблицы.
После этого удалил таблицу:
drop table wp_subscribe_reloaded_subscribers;
Появилась ошибка:
ERROR 1051 (42S02): Unknown table ‘wp_subscribe_reloaded_subscribers’
но при этом она была удалена и больше нигде не отображалась, а экспорт заработал.
Ошибка 2
Сообщение об ошибки возникло на CentOS с ISPmanager.
При создании базы данных с именем, которое когда-то существовало, возникала ошибка:
«Имя базы уже существует»
Имя базы было в таблице db в системной базе MySQL. Удаление записи оттуда решило эту проблему.
Ошибка 3
При импорте базы данных возникала следующая ошибка:
#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘…..sql’ at line 1
В архиве базы данных находилось несколько файлов. Надо было разархивировать архив и заархивировать только файл базы данных.
Ошибка 4
You probably tried to upload a file that is too large. Please refer to documentation for a workaround for this limit.
Решение приведено статье ошибка при импорте в phpMyAdmin.
repair and check mysql bases by 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
Как проверить и восстановить таблицы MySQL с помощью Mysqlcheck
Когда ваша таблица mysql повреждена, воспользуйтесь командой mysqlcheck для ее восстановления.
Команда Mysqlcheck проверяет, исправляет, оптимизирует и анализирует таблицы.
1. Проверить конкретную таблицу в базе данных
Если ваше приложение выдает сообщение об ошибке, в котором говорится, что определенная таблица повреждена, выполните команду mysqlcheck, чтобы проверить эту таблицу.
В следующем примере проверяется таблица сотрудников в базе данных Geekstuff.
# mysqlcheck -c thegeekstuff Сотрудник -u root -p Введите пароль: thegeekstuff.employee OK
Вы должны передать имя пользователя / пароль команде mysqlcheck. В противном случае вы получите следующее сообщение об ошибке.
# mysqlcheck -c thegeekstuff Сотрудник mysqlcheck: Получена ошибка: 1045: Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: NO) при попытке подключения
Обратите внимание, что команда myisamchk, которую мы недавно обсуждали, работает аналогично команде mysqlcheck.Однако преимущество команды mysqlcheck заключается в том, что ее можно выполнить, когда запущен демон mysql. Таким образом, используя команду mysqlcheck, вы можете проверить и восстановить поврежденную таблицу, пока база данных все еще работает.
2. Проверить все таблицы в базе данных
Чтобы проверить все таблицы в конкретной базе данных, не указывайте имя таблицы. Просто укажите имя базы данных.
В следующем примере проверяются все таблицы в базе данных alfresco.
# mysqlcheck -c alfresco -u корень -p Введите пароль: под открытым небом.JBPM_ACTION ОК alfresco.JBPM_BYTEARRAY ОК alfresco.JBPM_BYTEBLOCK ОК alfresco.JBPM_COMMENT ОК alfresco.JBPM_DECISIONCONDITIONS ОК alfresco.JBPM_DELEGATION ОК alfresco.JBPM_EVENT ОК ..
3. Проверить все таблицы и все базы данных
Чтобы проверить все таблицы и все базы данных, используйте параметр –all-databases вместе с параметром -c, как показано ниже.
# mysqlcheck -c -u root -p --all-databases Введите пароль: thegeekstuff.employee ОК alfresco.JBPM_ACTION ОК alfresco.JBPM_BYTEARRAY ОК alfresco.JBPM_BYTEBLOCK ОК .. .. mysql.help_category ошибка: требуется обновление таблицы. Пожалуйста, сделайте "REPAIR TABLE` help_category` "или сделайте дамп / перезагрузку, чтобы исправить это! mysql.help_keyword ошибка: требуется обновление таблицы.Пожалуйста, сделайте "REPAIR TABLE` help_keyword` "или сделайте дамп / перезагрузку, чтобы исправить это! ..
Если вы хотите проверить все таблицы нескольких баз данных, укажите имена баз данных с помощью «–databases».
В следующем примере проверяются все таблицы в базе данных geekstuff и alfresco.
# mysqlcheck -c -u root -p --databases thegeekstuff alfresco Введите пароль: thegeekstuff.employee ОК alfresco.JBPM_ACTION ОК под открытым небом.JBPM_BYTEARRAY ОК alfresco.JBPM_BYTEBLOCK ОК ..
4. Анализируйте таблицы с помощью Mysqlcheck
Ниже приводится анализ таблицы сотрудников, которая находится в базе данных Geekstuff.
# mysqlcheck -a сотрудник thegeekstuff -u root -p Введите пароль: thegeekstuff.employee Таблица уже обновлена
Внутренняя команда mysqlcheck использует команду «ANALYZE TABLE». Пока mysqlcheck выполняет команду анализа, таблица заблокирована и доступна для других процессов только в режиме чтения.
5. Оптимизация таблиц с помощью Mysqlcheck
Следующая таблица оптимизирует таблицу сотрудников, которая находится в базе данных Geekstuff.
# mysqlcheck -o thegeekstuff Сотрудник -u root -p Введите пароль: thegeekstuff.employee OK
Внутренняя команда mysqlcheck использует команду «OPTIMIZE TABLE». Когда вы удаляете много строк из таблицы, оптимизация помогает освободить неиспользуемое пространство и дефрагментировать файл данных. Это может улучшить производительность на огромных таблицах, которые претерпели несколько обновлений.
6. Ремонт таблиц с помощью Mysqlcheck
Следующая таблица ремонтирует сотрудников, которая находится в базе данных Geekstuff.
# mysqlcheck -r сотрудник thegeekstuff -u root -p Введите пароль: thegeekstuff.employee OK
Внутренняя команда mysqlcheck использует команду «REPAIR TABLE». Это восстановит и исправит поврежденные MyISAM и архивные таблицы.
7. Объедините таблицы проверки, оптимизации и ремонта
Вместо того, чтобы проверять и ремонтировать отдельно.Вы можете объединить функции проверки, оптимизации и восстановления, используя «–автоматический ремонт», как показано ниже.
Следующие действия проверяют, оптимизируют и восстанавливают всю поврежденную таблицу в базе данныхgeekstuff.
# mysqlcheck -u root -p --auto-repair -c -o thegeekstuff
Вы также можете проверить, оптимизировать и восстановить все таблицы во всех ваших базах данных, используя следующую команду.
# mysqlcheck -u root -p --auto-repair -c -o --all-databases
Если вы хотите знать, что делает команда во время проверки, добавьте –debug-info, как показано ниже.Это полезно, когда вы проверяете огромную таблицу.
# mysqlcheck --debug-info -u root -p --auto-repair -c -o thegeekstuff employee Введите пароль: Таблица thegeekstuff.employee уже обновлена Время пользователя 0,00, системное время 0,00 Максимальный размер резидентного набора 0, размер интегрального резидентного набора 0 Нефизические ошибки страницы 344, Физические ошибки страницы 0, Свопы 0 Блоки на входе 0 из 0, сообщений на входе 0 из 0, сигналов 0 Добровольное переключение контекста 12, Непроизвольное переключение контекста 9
8.Дополнительные полезные параметры Mysqlcheck
Ниже приведены некоторые ключевые параметры, которые вы можете использовать вместе с mysqlcheck.
- -A, –all-databases Рассмотреть все базы данных
- -a, –analyze Анализировать таблицы
- -1, –all-in-1 Использовать один запрос для каждой базы данных с таблицами, перечисленными через запятую
- –авто-ремонт Автоматическое восстановление таблицы, если она повреждена
- -c, –check Проверить таблицу ошибок
- -C, –check-only-changed Проверить таблицы, которые были изменены с момента последней проверки
- -g, –check-upgrade Проверить наличие изменений, зависящих от версии, в таблицах
- -B, –databases Проверить более одной базы данных
- -F, –fast Проверить, что таблицы закрыты неправильно
- –fix-db-names Исправить имена БД
- –fix-table-names Исправить имена таблиц
- -f, –force Продолжать, даже если есть ошибка
- -e, –extended Выполняет расширенную проверку таблицы.Это займет много времени.
- -m, –medium-check Быстрее, чем опция расширенной проверки, но выполняет большинство проверок
- -o, –optimize Оптимизировать таблицы
- -q, –quick Опция проверки быстрее, чем средняя
- -r, –repair Исправить повреждение таблицы
Если вам понравилась эта статья, возможно, вам понравится ..
.
Невозможно подключиться к базе данных MySQL
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.