Тут живет Matroskin

Простоквашино на выезде

Рубрика - Sysadmin

17.03.2018, рубрика "База знаний, Рецепты, Sysadmin"

По сути это вольный перевод рецепта отсюда:

Для того, чтобы сделать дамп определенных таблиц у mysqldump’a следующей опцией, после указания базы идет как раз список таблиц.
Собственно таблицы нужно указывать друг за другом, последовательно, через пробелы. Но нельзя использовать шаблоны (например prefix_*).

mysqldump databasename table1 table2 table3

Также есть ключик --ignore-table, работающий таким же образом. Иногда бывает проще исключить что-то и задампить все таблицы, кроме нескольких.

Другой способ состоит в том, чтобы получить список таблиц в файл с помощью чего-то такого:

mysql -N information_schema -e "select table_name from tables where table_schema = 'databasename' and table_name like 'bak_%'" > tables.txt

Данный запрос даст нам список всех таблиц, удовлетворяющих указанному условию. Имя каждой таблицы будет отдельной строкой в файле. Файл можно отредактировать руками, например, удалить что-то лишнее или добавить. В источнике написано ‘get all databases into one line’, не очень понял что именно автор имел в виду, так как дальнейшая операция

mysqldump dbname `cat tables.txt` > dump_file.sql

замечательно делает дамп всех нужных таблиц, взяв их имена из указанного файла. Ну и не забываем, если нужно, написать --opt.
Чтобы дропнуть таблицы одной строкой (не рекомендуется так делать, естественно, если нету бэкапа и вы не уверены вообще в том, что делаете :) ), можно сделать так:

mysql -NB information_schema -e "select table_name from tables where table_name like 'bak_%'"| xargs -I"{}" mysql dbname -e "DROP TABLE {}"

Там (по ссылке в начале) есть еще варианты, но мне понравился именно этот.

Мне это пригодилось, решил сохранить в виде рецепта.