Исключение таблиц из "show tables" в скрипте mysqldump - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы обновить следующий скрипт bash, который по отдельности выводит каждую таблицу в заданной схеме:

for t in $(mysql -NBA -h db_host -u db_user -pdb_pass db_name -e 'show tables')
do
mysqldump -h db_host -u db_user -pdb_pass db_name $t > db_name.$t.sql

, чтобы исключить некоторые таблицы, которые не нужно подбирать этим скриптом. Вот что я имею в виду:

for t in $(mysql -NBA -h db_host -u db_user -pdb_pass db_name -e 'show tables where `Tables_in_db_name` not like 'table1' and `Tables_in_db_name` not like 'table2'')
do
mysqldump -h db_host -u db_user -pdb_pass db_name $t > db_name.$t.sql

sql сам по себе хорош, но я не могу заставить его работать внутри команды -e. Очевидно, что в этом примере проблема заключается в открытии и закрытии апострофов команды -e. Я пытался:

  • Использование кавычек вместо апострофов. ie -e "показать таблицы, где et c"
  • Использование косых черт на внутренних апострофах. ie \ 'table1 \'

Безуспешно. Кто-нибудь знает, как разместить апострофы и обратные тики в этих пределах?

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

SQL сам по себе хорош, но я не могу заставить его работать внутри команды -e. Очевидно, что в этом примере проблема заключается в открытии и закрытии апострофов команды -e.

Справа. Я предполагаю, что это будет необходимо, чтобы избежать неприятностей. После короткого теста кажется, что

mysql -NBA -h ${DB_HOST} -u "${DB_USER}" -p" ${DB_PASS}" ${DB_NAME} -e "SHOW TABLES WHERE \`Tables_in_${DB_NAME}\` NOT LIKE 'table%'"

работает.

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