Aquí es una fiesta de una sola línea para truncar todas las tablas de una lista de bases de datos:
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
Tenga en cuenta, el truncamiento se eliminarán todos los datos de las tablas de destino sin ninguna petición. Quizás cambie "truncar $ i" por "describir $ i" primero para asegurarse de que las tablas en el conjunto de resultados sean las destinadas a ser vaciadas.
Una cosa más: si desea iterar sobre cada mesa en todas las bases de datos MySQL (excepto information_schema
y mysql
, espero!), Sustituir lo siguiente para el anterior "database_name1 database_name2":
`echo 'show databases' | mysql | awk '$1 != "information_schema" && \
$1 != "mysql" {if (NR > 1) {print}}'`
Entonces, aquí hay una muestra que es menos destructiva; Realiza Optimizar para todas las tablas en cada base de datos MySQL (excepciones como se señaló anteriormente):
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
Modificar la "acción" realizado según sea necesario y con mucha inquietud!
¿Hay alguna manera de seleccionar los nombres de todas las tablas en el esquema de alimentar en esto? De lo contrario, tendré que actualizar el script cuando se agreguen nuevas tablas. –
Intenté con TRUNCATE * pero no funcionó. Parece que tendrás que ejecutar una consulta SHOW TABLES y actuar de esa manera. – Ross
Encontré este enlace http://sqlblogcasts.com/blogs/madhivanan/archive/2007/08/27/truncate-all-tables-part-i.aspx que tiene un procedimiento almacenado que se puede adaptar fácilmente a lo que necesita , o puede funcionar de la caja. – UnkwnTech