mysqldump игнорируют таблицу с подстановочным знаком

Ваше понимание чрезвычайно корректно.

Разрешение контроллера кэшировать данные записи в его локальной RAM улучшает скорость записи, однако это подвергает Вас риску наличия ОС, думают, что данные были записаны в диск (потому что контроллер имеет его), и имеющий сбой питания, прежде чем контроллер завершит ту запись. Резервное копирование батареи позволяет данным в кэше выживать, пока машина не включается снова, снижая тот риск.

До преимущества, если Ваша система уже находится на UPS, что происходит, если Вы превышаете свое время выполнения UPS (возможный даже с умным UPS), или если источники питания сервера аварийно завершаются? Или если кто-то случайно дергает шнуры питания?
Многие вещь могут вызвать сбой питания. UPS только защищает от нескольких из них.

8
задан 6 November 2015 в 06:20
3 ответа

Нет, в команде mysqldump нет такой опции, как сказано в документах :

- ignore-table = db_name .tbl_name

Не выгружать данную таблицу, которая должна быть указана с использованием обоих
имена баз данных и таблиц. Чтобы игнорировать несколько таблиц, используйте этот параметр
многократно. Этот параметр также можно использовать для игнорирования представлений.

13
ответ дан 2 December 2019 в 22:50

Вы можете получить таблицу имена, которые вы хотите получить из mysql, а затем используйте их для создания параметров дампа mysql.

В приведенном ниже примере просто замените «someprefix» своим префиксом (например, «экзамен _»).

SHOW TABLES запрос можно изменить, чтобы найти другие наборы таблиц. Или вы можете использовать запрос к таблице INFORMATION_SCHEMA , чтобы использовать еще больше критериев.

#/bin/bash

#this could be improved but it works
read -p "Mysql username and password" user pass

#specify your database, e.g. "mydb"
DB="mydb"

SQL_STRING='SHOW TABLES LIKE "someprefix%";'
DBS=$(echo $SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )

#next two lines untested, but intended to add a second excluded table prefix
#ANOTHER_SQL_STRING='SHOW TABLES LIKE "otherprefix%";'
#DBS="$DBS""\n"$(echo $ANOTHER_SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )

#-B is for batch - tab-separated columns, newlines between rows
#-s is for silent - produce less output
#both result in escaping special characters

#but the following might not work if you have special characters in your table names
IFS=$'\n' read -r -a TABLES <<< $DBS

IGNORE="--ignore_table="$DB"."
IGNORE_TABLES=""

for table in $TABLES; do
        IGNORE_TABLES=$IGNORE_TABLES" --ignore_table="$DB"."$table
done

#Now you have a string in $IGNORE_TABLES like this: "--ignore_table=someprefix1 --ignore_table=someprefix2 ..."

mysqldump $DB --routines -u $user -p$pass $IGNORE_TABLES > specialdump.sql

Это было построено с помощью этого ответа о получении «всех таблиц с исключением в bash»: https: / /stackoverflow.com/a/9232076/631764[128 visible и этот ответ о пропуске таблиц с использованием некоторого bash: https://stackoverflow.com/a/425172/631764

2
ответ дан 2 December 2019 в 22:50

Я думаю, что использование information_schema - хороший путь для этого.

select group_concat(concat('--ignore-table=', TABLE_SCHEMA, '.', table_name) SEPARATOR ' ') 
from information_schema.tables 
where TABLE_SCHEMA = 'Actual_DB_NAME' and TABLE_NAME like 'Actual_TABLE_NAME%';
0
ответ дан 2 December 2019 в 22:50

Теги

Похожие вопросы