Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vider sélectivement toutes les tables innodb dans une base de données mysql ?

S'il s'agissait d'une opération ponctuelle, je ferais :

use DB;
show table status name where engine='innodb';

et faites un copier/coller rectangulaire depuis la colonne Nom :

+-----------+--------+---------+------------+-
| Name      | Engine | Version | Row_format |
+-----------+--------+---------+------------+-
| countries | InnoDB |      10 | Compact    |
| foo3      | InnoDB |      10 | Compact    |
| foo5      | InnoDB |      10 | Compact    |
| lol       | InnoDB |      10 | Compact    |
| people    | InnoDB |      10 | Compact    |
+-----------+--------+---------+------------+-

dans un éditeur de texte et convertissez-le en commande

mysqldump -u USER DB countries foo3 foo5 lol people > DUMP.sql

puis importez après avoir remplacé toutes les instances de ENGINE=InnoDB avec ENGINE=MyISAM dans DUMP.sql

Si vous voulez éviter la magie du copier/coller rectangulaire, vous pouvez faire quelque chose comme :

use information_schema;
select group_concat(table_name separator ' ') from tables 
    where table_schema='DB' and engine='innodb';

qui renverra countries foo3 foo5 lol people