Ремонт всех столов за один раз - PullRequest
106 голосов
/ 03 января 2011

Как проверить все таблицы в базе данных за один раз?

Вместо того, чтобы набирать запрос check table ''tablename''; для всех таблиц по одной.

Есть ли какая-нибудь простая команда типа check all или что-нибудь подобное?

Ответы [ 10 ]

150 голосов
/ 03 января 2011

из командной строки вы можете использовать:

mysqlcheck -A --auto-repair

http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.html

97 голосов
/ 12 июля 2013

Команда такая:

mysqlcheck -u root -p --auto-repair --check --all-databases

Вы должны указать пароль при запросе,

или вы можете запустить этот, но это не рекомендуется, потому что пароль написан в виде открытого текста:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
21 голосов
/ 27 декабря 2011

Используйте следующий запрос для печати REPAIR SQL-статистики для всех таблиц в базе данных:

select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase'; 

После этого скопируйте все запросы и выполните его на mydatabase.

Примечание: замените mydatabase на нужное имя БД

8 голосов
/ 08 апреля 2016

Следующая команда работала для меня, используя командную строку (в качестве администратора) в Windows:

mysqlcheck -u root -p -A --auto-repair

Запустите mysqlcheck с пользователем root, запросите пароль, проверьте все базы данных иАвто-ремонт любых поврежденных таблиц.

6 голосов
/ 14 марта 2018

Нет необходимости вводить пароль, просто используйте любую из этих команд (не требует пояснений):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
3 голосов
/ 03 января 2011

Нет команды по умолчанию для этого, но вы можете создать процедуру для выполнения этой работы.Он будет перебирать строки information_schema и вызывать REPAIR TABLE 'tablename'; для каждой строки.CHECK TABLE пока не поддерживается для подготовленных заявлений.Вот пример (замените MYDATABASE на имя вашей базы данных):

CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
  DECLARE endloop INT DEFAULT 0;
  DECLARE tableName char(100);
  DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;

  OPEN rCursor;
  FETCH rCursor INTO tableName;

  WHILE endloop = 0 DO
    SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
    PREPARE statement FROM @sql;
    EXECUTE statement;

    FETCH rCursor INTO tableName;
  END WHILE;

  CLOSE rCursor;
END
1 голос
/ 10 октября 2018

Вам может потребоваться имя пользователя и пароль:

mysqlcheck -A --auto-repair -uroot -p

Вам будет предложено ввести пароль.

mysqlcheck -A --auto-repair -uroot -p{{password here}}

Если вы хотите ввести cron, НО ваш пароль будет виденв текстовом формате!

1 голос
/ 27 апреля 2018

для хостов plesk, один из них должен сделать: (оба делают то же самое)

mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A
1 голос
/ 05 ноября 2014

Мне нравится это для простой проверки из оболочки:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
0 голосов
/ 11 марта 2019

Если поврежденные таблицы остаются после

mysqlcheck -A --auto-repair

попробуй

mysqlcheck -A --auto-repair --use-frm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...