Назад | Перейти на главную страницу

Переход с MyISAM на XtraDB

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

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

Придется ли мне сначала перенести MyISAM на InnoDB или я могу сразу перейти на XtraDB?

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

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

Вы можете конвертировать до или после. Я предпочитаю раньше, потому что данные будут готовы после установки, запуска и запуска 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.