2012-06-28 4 views
0

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

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

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

ответ

1

Команда, которую вы показываете, представляет собой команду оболочки 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 
+0

Я ценю это, потому что я собираюсь этим учебник, и даже не считали думать за пределами их учебник, позор мне не делать это с 'тузд -e" .... "', вау спасибо! –

0

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

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 ,\ ` 
Смежные вопросы