Игнорировать таблицы MySQL в сценарии резервного копирования

Я следую руководству на этом сайте и пытаюсь исключить базы данных с именем turnkey в них.

find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `

эта команда возвращает все имена баз данных, как я могу удалить их под ключ?

2 ответа

Решение

Показанная вами команда является командой оболочки Linux / unix. Если вы добавите еще один шаг

 grep -v turnkey

Вы пропустите любые строки со словом "под ключ".

Вот так:

find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | 
cut -d'/' -f5 | 
grep -v ^mysql\$ |
grep -v turnkey 
tr \\\r\\\n ,\ `

Вы не спрашивали, если это хорошая идея. Я не думаю, что это так, потому что он опирается на определенную структуру ondisk для программного обеспечения демона сервера MySQL, которая не является частью формальной спецификации системы. Другими словами, это может измениться.

Вы могли бы сделать это:

SELECT SCHEMA_NAME FROM `information_schema`.`SCHEMATA` 
 WHERE SCHEMA_NAME NOT LIKE '%turnkey%'
 ORDER BY SCHEMA_NAME

Вы можете использовать немного улучшенный скрипт без каких-либо дополнительных утилит, просто найдите:

find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d ! \( -name turnkey -or -name mysql \) -printf "%f "

Или просто измените свой вариант, чтобы добавить turnkey в grep -v Заявление об исключении его из списка:

find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v "^mysql\$\|^turnkey$" | tr \\\r\\\n ,\ `
Другие вопросы по тегам