
Привет,
В MySQL има много начини да се мигрира една таблица от MyISAM към InnoDB.
В този пост ще споделя, как се прави това чрез mysqldump. Този тип миграция се нарича offline, тъй като има downtime. Разбира се, ако имаме повече от един MySQL сървър, този downtime може да бъде избегнат. А като цяло, главната идята на тази схема, е rebuild-ване на индексите на таблицата(те) – тоест оптимизирането им.
Стъпките са следните :
- Бекъп на структурата на таблиците в базата.
- Бекъп на данните на самата база.
- Конвертиране на бекъпа със структурата от MyISAM към InnoDB.
- Изтриване и създаване на базата, и наливане на данните й на ново (постигайки така желаната оптимизация)
Стъпка едно:
Базата ни се казва crm – правим й два бекъпа – на структурата и на данните :
mysqldump -uroot -p --no-data -R --triggers crm > crm_schema.sql
mysqldump -uroot -p --no-data -R --triggers crm > crm_schema.sql
mysqldump -uroot -p --no-data -R --triggers crm > crm_schema.sql
и на данните :
mysqldump -uroot -p --no-create-info -R --triggers crm > crm_data.sql
mysqldump -uroot -p --no-create-info -R --triggers crm > crm_data.sql
mysqldump -uroot -p --no-create-info -R --triggers crm > crm_data.sql
Следва конвертирането към InnoDB:
sed -i.bak 's#MyISAM#InnoDB#g' crm_schema.sql
sed -i.bak 's#MyISAM#InnoDB#g' crm_schema.sql
sed -i.bak 's#MyISAM#InnoDB#g' crm_schema.sql
И последната стъпка : създаване на база на ново и наливане на информацията от двата бекъпа :
mysql -uroot -p -e "create database crm"
mysql -uroot -p crm < crm_schema.sql
mysql -uroot -p crm < crm_data.sql
mysql -uroot -p -e "create database crm"
mysql -uroot -p crm < crm_schema.sql
mysql -uroot -p crm < crm_data.sql
mysql -uroot -p -e "create database crm"
mysql -uroot -p crm < crm_schema.sql
mysql -uroot -p crm < crm_data.sql
Това е!
PS. Намерих много полезен линк за MySQL репликация без downtime. 10х BRYAN KENNEDY