Как выборочно сбросить все таблицы innodb в базе данных mysql? - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть база данных av2web, которая содержит 130 таблиц MyISAM и 20 таблиц innodb. Я хочу взять mysqldump из этих 20 таблиц innodb и экспортировать его в другую базу данных в виде таблиц MyISAM.

Можете ли вы сказать мне более быстрый способ достичь этого?

Спасибо Педро Альварес Эспиноза.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2010

Если бы это была разовая операция, я бы сделал:

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

и сделал бы прямоугольное копирование / вставку из столбца Имя:

+-----------+--------+---------+------------+-
| 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    |
+-----------+--------+---------+------------+-

в текстовый редактори преобразовать его в команду

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

, а затем импортировать после замены всех экземпляров ENGINE=InnoDB на ENGINE=MyISAM в DUMP.sql

Если вы хотите избежать прямоугольного копирования / вставкимагией вы можете сделать что-то вроде:

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

, который вернет countries foo3 foo5 lol people

1 голос
/ 14 марта 2017

Я знаю, что это старый вопрос. Я просто хочу поделиться этим скриптом, который генерирует команду mysqldump, а также показывает, как его восстановить

В следующей части скрипта будет сгенерирована команда для создания резервной копии / дампа mysql

SET SESSION group_concat_max_len = 100000000; -- this is very important when you have lots of table to make sure all the tables get included
SET @userName = 'root'; -- the username that you will login with to generate the dump
SET @databaseName = 'my_database_name'; -- the database name to look up the tables from
SET @extraOptions = '--compact --compress'; -- any additional mydqldump options https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html
SET @engineName = 'innodb'; -- the engine name to filter down the table by
SET @filename = '"D:/MySQL Backups/my_database_name.sql"'; -- the full path of where to generate the backup too

-- This query will generate the mysqldump command to generate the backup
SELECT
 CASE WHEN tableNames IS NULL 
            THEN 'No tables found. Make sure you set the variables correctly.' 
      ELSE CONCAT_WS(' ','mysqldump -p -u', @userName, @databaseName, tableNames, @extraOptions, '>', @filename)
      END AS command  
FROM (
    SELECT GROUP_CONCAT(table_name SEPARATOR ' ') AS tableNames 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE table_schema= @databaseName AND ENGINE= @engineName
) AS s;

В следующей части скрипта будет сгенерирована команда восстановления резервной копии / дампа mysql в конкретную базу данных на том же или на другом сервере.

SET @restoreIntoDatabasename = @databaseName; -- the name of the new database you wish to restore into
SET @restoreFromFile = @filename; -- the full path of the filename you want to restore from
-- This query will generate the command to use to restore the generated backup into mysql
SELECT CONCAT_WS(' ', 'mysql -p -u root', @restoreIntoDatabasename, '<', @restoreFromFile); 
...