Проверка базы на ошибки 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: 1
2. Исправляем поврежденные таблицы, используя 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/*.MYI
5. Использование 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 endspace
6. Все опции 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
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.