Go to content Go to menu Go to search

Перенос существующих таблиц Mysql в отдельные файлы (innodb_file_per_table)

Задача

Есть Mysql сервер, в котором все базы хранятся в одном innodb файле (ibdata1), необходимо перевести сервер на опцию innodb_file_per_table, вынести все существующие таблицы в отдельные файлы, и уменьшить размер ibdata1.

Решение

Отключаем сетевой доступ к Mysql (добавить skip-networking в /etc/my.cnf) и останавливаем все локальные сервисы, которые ее используют.

Делаем дамп БД:

mysqldump --all-databases > all-databases.sql

Дропаем все базы кроме mysql и information_schema

echo "show databases" | mysql
echo "drop database <db_name>" | mysql
...
echo "drop database <db_name>" | mysql

Останавливаем mysql

Добавляем опцию innodb_file_per_table в /etc/my.cnf

service mysqld stop

Удаляем файлы с данными и лог

rm -f /var/lib/mysql/ibdata1
rm -f /var/lib/mysql/ib_logfile0
rm -f /var/lib/mysql/ib_logfile1

Запускаем mysql

service mysqld start

Заливаем базы обратно

cat ./all-databases.sql | mysql

Открываем сетевой доступ к Mysql и страртуем локальные сервисы.

Готово!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved