Миграция с MyISAM на XtraDB

Несколько вопросов, которые я не могу найти нигде о переходе на XtraDB.

Моя группа использовала базы данных MyISAM для производства и интересовалась, насколько сложно перейти на XtraDB Percona и как бы вы поступили?

Должен ли я сначала перенести MyISAM на InnoDB или я могу перейти прямо к XtraDB?

Я установил Percona Server с пакетом XtraDB на моем компьютере с Fedora, но документация не очень полезна в отношении того, как его использовать, поэтому мне было интересно, Percona просто совмещает стандартную установку MySQL или это отдельная сущность?

Ссылки на документацию о том, как решить мои вопросы, были бы фантастическими.

2 ответа

Решение

Вы можете конвертировать до или после. Я предпочитаю раньше, потому что данные будут готовы, когда Percona Server установлен, запущен и работает. Я говорю это, потому что есть некоторые проблемы, с которыми вам нужно разобраться в отношении таблиц грантов. (Это особенно относится к таблице mysql.user, поскольку таблицы MySQL 5.0 в mysql.user имеют 37 столбцов, а таблицы MySQL 5.5 в mysql.user - 42 столбца). Мне бы не хотелось сначала связываться с проблемами подключения или SQL Grants.

Вот скрипт для выполнения преобразования InnoDB:

Шаг 01) Запустите эти команды

echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
MYSQL_CONN="-u... -p..."
mysql ${MYSQL_CONN} -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql

Скрипт ищет все таблицы во всех базах данных, может конвертировать их в порядке размера, начиная с самого маленького.

Шаг 02) Запустите скрипт

mysql ${MYSQL_CONN} -A < /root/ConvertMyISAMToInnoDB.sql

Шаг 03) Запустите этот запрос

SELECT SUM(data_length+index_length)/POWER(1024,2) RecommendedInnoDBBufferPoolSize
FROM information_schema.tables WHERE engine='InnoDB';

Это даст вам предложенное (идеальный, идеальный мир) значение для innodb_buffer_pool_size. Если это число превышает 75% ОЗУ сервера, используйте 75% ОЗУ.

Шаг 04) service mysql stop

Шаг 05) rm -f /var/lib/mysql/ib_logfile* /var/lib/mysql/ibdata1

Шаг 06) Добавьте следующее в /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_buffer_pool_size=<SizeFromStep03>M
innodb_log_file_size=512M
innodb_log_buffer_size=64M
innodb_open_files=4096
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=5000
key_buffer_size=8M

ПРЕДОСТЕРЕЖЕНИЯ

  • innodb_log_file_size должен составлять 25% от innodb_buffer_pool_size
  • key_buffer_size теперь можно уменьшить

Шаг 07) service mysql start

Это займет некоторое время (2-4 минуты), потому что mysqld создаст

  • ib_logfile0
  • отформатировать
  • создать ib_logfile1
  • отформатируйте это.

Шаг 08) Выполните обновление Percona

XtraDB является заменой для InnoDB. Существующие таблицы MyISAM не затрагиваются. Чтобы реально получить какую-либо выгоду от XtraDB, вам придется конвертировать их в InnoDB. Вы можете сделать это до или после установки XtraDB.

Другие вопросы по тегам