Массовый ремонт (REPAIR) таблиц БД MySQL по префиксу

При работе с разными CMS таблицы БД MySQL бывает ломаются и требуется их починить. Часто починить требуется сразу большое количество таблиц с одним префиксом. Особенно в том случае, когда одна БД используется несколькими системами со своими префиксами. Кроме утилиты командной строки myisamchk, которая чинит таблицы при остановленном mysqld, можно составить запрос к базе данных, используя средства BASH. Похожим образом я уже решал задачу удаления таблиц.

В командную строку (CLI) интерпретатора bash выводится простой список таблиц. Запрос REPAIR формируется командами оболочки и снова выполняется клиентской утилитой mysql.

echo "show tables like 'PREFIX\_%'"   | \ # Составляем запрос для получения списка таблиц. Замените PREFIX\_ на требуемый вам.
mysql -N -u USER -pPASS DATABASE      | \ # Отправляем запрос в MySQL. Опция -N обрезает вывод заголовка столбца.
sed '/^.\+$/!d'                       | \ # Удаляем пустые строки на всякий случай.
sed 's/.\+/`&`/'                      | \ # Заключаем имена таблиц в защитные кавычки ``.
sed ':a;N;$!ba;s/\n/,/g'              | \ # Это sed-ово колдунство склеивает все строки в одну через запятую.
sed 's/^.\+/REPAIR TABLE &;/' | \ # Дописываем SQL-запрос.
mysql -u USER -pPASS DATABASE             # Отправляем запрос в MySQL на исполнение.
# В 3-й и 7-й строках укажите свои параметры подключения к БД.
# USER - имя пользователя в MySQL.
# PASS - пароль пользователя (между -p и PASS пробел не нужен). Можно оставить просто пустую опцию -p и ввести пароль дважды.
# DATABASE - имя базы данных, с которой вы работаете.

Команда bash на ремонт таблиц одной строкой.
echo "show tables like 'PREFIX\_%'" | mysql -N -u USER -pPASS DATABASE | sed '/^.\+$/!d' | sed 's/.\+/`&`/' | sed ':a;N;$!ba;s/\n/,/g' | sed 's/^.\+/REPAIR TABLE &;/' | mysql -u USER -pPASS DATABASE

Примечание. Символ _ (подчеркивание) в операторе LIKE является специальным и означает один любой символ, поэтому экранируется \ (обратный слэш). В некоторых оболочках Linux обратный слэш тоже может интерпретироваться специальным образом и потребует второго \ перед ним. Учитывайте это и проверяйте, что передает echo в mysql.

Теги

Добавить комментарий

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
CAPTCHA
А не робот ли вы случайно?
6 + 0 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.