Вот одна строка BASH для усечения всех таблиц из списка баз данных:
for j in database_name1 database_name2; \
do for i in `echo 'show tables ' |mysql $j \
|grep -v 'Tables_in'`; do mysql $j -e "truncate $i"; done; done
Обратите внимание, что усечение удалит все данные из целевых таблиц без каких-либо запросов. Возможно, сначала измените «truncate $ i» на «description $ i», чтобы убедиться, что таблицы в результирующем наборе предназначены для опустошения.
Еще одна вещь: если вы хотите выполнить итерацию по каждой таблице во всех базах данных MySQL (за исключением information_schema
и mysql
, я надеюсь!), Замените следующее для вышеупомянутого «database_name1 database_name2»:
`echo 'show databases' | mysql | awk '$1 != "information_schema" && \
$1 != "mysql" {if (NR > 1) {print}}'`
Итак, вот образец, который менее разрушителен; он выполняет OPTIMIZE для всех таблиц в каждой базе данных MySQL (исключения, как отмечено выше):
for j in `echo 'show databases' | mysql | \
awk '$1 != "information_schema" && $1 != \
"mysql" {if (NR > 1) {print}}'`; do for i in \
`echo 'show tables ' |mysql $j |grep -v \
'Tables_in'`; do mysql -e "optimize table $j.$i"; \
done; done
Изменить "действие", выполняемое по мере необходимости и с большим трепетом!