Samber
@Samber
Full Stack Web Developer

Как быстро сменить систему хранения таблицы с MyISAM на InnoDB?

В таблице 123,937,301 строк, весит 19.4 ГБ
Есть ли способ быстро сменить систему хранения?
Так как insert into new_table select * from old_table ооочень долго будет думать
Спасибо!
  • Вопрос задан
  • 3089 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Так понимаю, вопрос не в "быстро", а в "без длительного простоя". Правильно?

Могу предложить:
Довольно просто и на коленке:
добавляете таблицу "need_update_rows", в которую триггерами на insert и update пишете первичный ключ записей, которые соответственно добавились и изменились. Достаточно того же самого первичного ключа (только без AI) и insert ignore
Когда удостоверились, что данные триггерами пишутся, создаете новую таблицу, какую хотите. Заполняете её insert select'ом, читая по первичному ключу диапазонами этак в пару сотен тысяч строк. Когда дописали основной объём - блокируете базу, дописываете и обновляете строки из need_update_rows, делаете RENAME TABLE (он делается очень быстро независимо от размера таблиц), снимаете блокировку с базы.

Другой вариант:
поднять реплику. Mysql умеет реплицировать в другой storage engine.

С такой табличкой не забудьте сделать партицирование. Пригодится.
Ответ написан
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Вот скриптик конверта всей базы без выключения:

<?php

$host = 'localhost';
$log = 'логин';
$pass = 'Пароль';
$db = 'Имя базы';

mysql_connect($host,$log,$pass);
mysql_select_db($db);

$q = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_array($q))
{
        mysql_query("ALTER TABLE `".$table['Tables_in_'.$db]."` ENGINE = InnoDB");
}


?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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