Migrando do MyISAM para o XtraDB

4

Apenas algumas perguntas que não consigo encontrar em nenhum lugar sobre como migrar para o XtraDB.

Meu grupo tem usado o MyISAM dbs para produção e queria saber o quão difícil é migrar para o XtraDB da Percona e como você faria isso?

Eu teria que migrar o MyISAM para o InnoDB primeiro ou posso ir direto para o XtraDB?

Eu instalei o Percona Server com o pacote XtraDB na minha máquina Fedora, mas a documentação não é muito útil para usá-lo, por isso fiquei me perguntando se o Percona apenas suporta uma instalação padrão do MySQL ou é uma entidade separada?

Links para documentação sobre como resolver minhas perguntas seriam fantásticos.

    
por Aaron Nguyen 14.09.2012 / 22:56

2 respostas

5

Você pode converter antes ou depois. Eu prefiro antes porque os dados estarão prontos quando o Percona Server estiver instalado, funcionando. Digo isso porque há algumas coisas difíceis que você deve abordar em relação às tabelas de concessão. (Isto inclui especialmente a tabela mysql.user já que as tabelas mysql.user do MySQL 5.0 possuem 37 colunas enquanto as tabelas mysql.user do MySQL 5.5 possuem 42 colunas) Eu não gostaria de mexer com problemas de conectividade ou SQL Grants primeiro.

Aqui está o script para realizar a conversão do InnoDB:

Passo 01) Execute estes comandos

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

O script procura todas as tabelas em todos os bancos de dados pode convertê-las em ordem de tamanho, começando com o menor.

Passo 02) Execute o script

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

Passo 03) Execute esta consulta

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

Isso lhe dará o valor sugerido (ideal, mundo perfeito) para innodb_buffer_pool_size. Se esse número exceder 75% da RAM do servidor, use 75% da RAM.

Etapa 04) service mysql stop

Etapa 05) rm -f /var/lib/mysql/ib_logfile* /var/lib/mysql/ibdata1

Passo 06) Adicione o seguinte para /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

CAVEATS

  • innodb_log_file_size deve ser de 25% de innodb_buffer_pool_size
  • key_buffer_size agora pode ser reduzido

Etapa 07) service mysql start

Isso levará algum tempo (2-4 min) porque o mysqld irá criar

  • ib_logfile0
  • formate-o
  • crie ib_logfile1
  • formate-o.

Passo 08) Realize o upgrade da Percona

    
por 15.09.2012 / 05:55
2

O XtraDB é um substituto imediato do InnoDB. Tabelas MyISAM existentes não são afetadas. Para realmente obter qualquer benefício do XtraDB, você terá que convertê-los para o InnoDB. Você pode fazer isso antes ou depois de instalar o XtraDB.

    
por 14.09.2012 / 23:08