Миграция с 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.