Migrando para Databases for MySQL
Duas opções existem para migrar dados de bancos de dados MySQL existentes para IBM Cloud® Databases for MySQL. Recomendamos duas opções: mysqldump
e mydumper
. A melhor ferramenta para você depende de determinadas condições,
incluindo conexão de rede, o tamanho do seu conjunto de dados e as necessidades de esquema intermediário.
Antes de iniciar
Antes de iniciar a sua migração de dados, você precisa de MySQL instalado localmente para que você tenha as ferramentas mysql
e mysqldump
.
O MySQL Workbench também fornece uma ferramenta gráfica para trabalhar com servidores e bancos de dados MySQL. Embora não seja estritamente necessário, também é possível usar a CLI do Cloud Databases, pois facilita a conexão e a restauração para uma nova implementação do Databases for MySQL.
mysqldump
Este utilitário cliente MySQL nativo é instalado por padrão e pode fazer backups lógicos, reproduzindo a estrutura e os dados da tabela, sem de fato copiar os arquivos de dados. mysqldump permite fazer dump de um ou mais bancos de dados MySQL para fins de backup ou para a transferência para outro servidor MySQL. Para obter mais informações, consulte a documentação do mysqldump.
mysqldump
é apropriado para utilizar nas seguintes condições:
- O conjunto de dados é menor que 10 GB.
- O tempo de migração não é crítico, e o custo de retentativa da migração é baixo.
- Não é necessário criar esquemas intermediários ou fazer transformações de dados.
Nós não recomendamos o mysqldump se alguma das seguintes condições forem atendidas:
- Seu conjunto de dados é maior que 10 GB.
- A conexão de rede entre os bancos de dados de origem e de destino é instável ou lenta.
Siga estas etapas usando a ferramenta mysqldump
:
Execute mysqldump
em seu banco de dados de origem para criar um arquivo SQL, que pode ser usado para recriar o banco de dados. No mínimo, a migração do mysql
por meio da CLI requer os seguintes argumentos:
- Hostname (
-h
bandeira) - número da porta (sinalização
-P
) - Username (
-u
bandeira) - -- ssl-mode = VERIFY_IDENTITY (os clientes requerem uma conexão criptografada e realizam verificação contra o certificado CA do servidor e contra o nome do hostname do servidor em seu certificado)
- --ssl-ca (o nome do caminho do arquivo de autoridade de certificação (CA), que pode ser encontrado na guia da CLI de Terminais da página Visão geral na IU.)
- Nome do banco de dados
- arquivo de resultado (sinalização
-r
)
Seu comando CLI se parece com este
mysqldump -h <host_name> -P <port_number> -u <user_name> --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p <database_name> -r dump.sql
Para gerar um arquivo de log do job mysqldump que rastreia erros enquanto ele está em execução, use um comando como este
mysqldump -h <host_name> -P <port_number> -u <user_name> --log-error=error.log --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p ibmclouddb -r dump.sql
O mesmo pode ser feito enquanto importa, por exemplo
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql > import_logfile.log
Para obter mais informações sobre o uso do MySQL Replicação com Global Transaction Identifiers (GTIDs), consulte o Usando GTIDs para Failover e Scaleout no Manual de Referência MySQL .
O comando mysql
tem muitas opções; ver a documentação oficial e referência de comando para uma visão fuller de suas capacidades.
Restaurando a saída de mysqldump
A saída resultante de mysqldump
pode, então, ser transferida por upload para uma nova implementação do Databases for MySQL. Por ser SQL, a saída pode ser simplesmente enviada para o banco de dados por meio do comando mysql
.
Recomendamos que as importações sejam executadas com o usuário administrativo.
Veja a documentação Conectando com mysql
para obter detalhes sobre conexão como admin usando mysql
. Para se conectar usando o comando
mysql
, é necessário ter a sequência de conexões e o certificado TLS do usuário administrativo, que podem ser obtidos a partir da IU. O certificado precisa ser decodificado por meio de Base64 e armazenado como um arquivo local
arbitrário. Para importar o dump.sql
criado anteriormente para uma implementação de banco de dados chamada example-mysql
, é possível chamar o comando mysql
usando -f dump.sql
como parâmetro.
O parâmetro informa mysql
para ler e executar as instruções SQL no arquivo.
Conforme observado na documentação Conectando-se ao mysql
, o plug-in da CLI do Cloud Databases simplifica a conexão. A importação anterior mysql
pode ser executada usando um comando como:
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql
Caso nenhum usuário seja especificado, o comando automaticamente utilizará o usuário administrativo e solicitará a senha de maneira interativa. O certificado TLS é recuperado e usado automaticamente.
Durante a execução do processo de restauração, são emitidas várias mensagens relacionadas às mudanças que estão sendo feitas na implementação do banco de dados.
mydumper
mydumper e sua ferramenta de backup lógica correlacionada, myloader, usam recursos de multiencadeamento, semelhantes a mysqldump para a execução da migração de dados; no entanto, mydumper oferece várias melhorias, como backups paralelos, leituras consistentes e facilidade de gerenciamento da saída. O paralelismo melhora o desempenho durante os processos de importação e de exportação, e o gerenciamento da saída é mais fácil pois as tabelas individuais são colocadas em arquivos separados.
O uso de mydumper é adequado nas seguintes condições:
- O conjunto de dados tem mais que 10 GB.
- A conexão de rede entre bancos de dados de origem e destino é rápida e estável.
- É necessário criar esquemas intermediários ou fazer transformações de dados.
O uso de mydumper não é recomendado caso alguma das condições a seguir seja verdadeira:
- Seu conjunto de dados é menor que 10 GB.
- A conexão de rede entre os bancos de dados de origem e de destino é instável ou muito lenta.
Antes de iniciar a migração de dados utilizando mydumper, consulte Projeto mydumper para obter detalhes e instruções passo a passo sobre a instalação e o ambiente de desenvolvedor necessário.
Em seguida, consulte a página Como utilizar mydumper para obter informações sobre como usar as ferramentas mydumper e myloader para a execução da migração de dados completa.
Ajustando as variáveis configuráveis de InnoDB
É possível configurar as seguintes opções de InnoDB do MySQL para ajustar o desempenho com base na capacidade da máquina e na carga de trabalho do banco de dados.
- innodb_buffer_pool_size_percentage
- innodb_flush_log_at_trx_commit
- innodb_log_buffer_size
- innodb_log_file_size
- innodb_lru_scan_depth
- innodb_read_io_threads
- innodb_write_io_threads
- net_read_timeout
- net_write_timeout
innodb_buffer_pool_size_percentage
- Descrição: o parâmetro
innodb_buffer_pool_size_percentage value
define a quantidade de memória dedicada do contêiner de banco de dados. - Configuração padrão: 50
- Máximo: 100
- Mín: 10
- Requer reinicialização: True
Como o rpóprio banco de dados usa uma determinada quantidade de memória, caso o parâmetro innodb_buffer_pool_size_percentage value
seja configurado com um valor muito alto, os requisitos de memória do banco de dados + innodb_buffer_pool_size_percentage
podem ultrapassar os limites de memória disponíveis, resultando em um estado de falta de memória (OOM).
O valor do parâmetro innodb_buffer_pool_size_percentage
difere baseado no tamanho do seu banco de dados. O valor padrão é 50%
, considerado seguro para bancos de dados de todos os tamanhos. Configure o valor conforme
necessário; em caso de OOM, a configuração do valor está muito alta e deve ser diminuída.
innodb_flush_log_at_trx_commit
-
Descrição: controla o balanceamento entre a conformidade ACID restrita para operações de confirmação e mais alto desempenho
-
Configuração padrão: 2
A configuração padrão 2 não é totalmente compatível com ACID (para obter a compatibilidade total, é necessário usar a configuração padrão 1), mas apresenta melhor desempenho e ainda é considerada segura.
- Máximo: 2
- Mín: 0
- Requer reinicialização: false
Para mais informações, consulte MySQL innodb_flush_log_at_trx_commit documentação.
innodb_log_buffer_size
- Descrição: o tamanho em bytes do buffer utilizado por InnoDB para a gravação nos arquivos de log do disco.
- Configuração padrão: 32 MiB
- Máximo: 4294967295
- Mínimo: 1048576
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação innodb_log_buffer_size.
innodb_log_file_size
- Descrição: tamanho do arquivo de log do InnoDB em bytes.
- Configuração padrão: 64 MB
- Máximo: 274877906900
- Mínimo: 4194304
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação innodb_log_file_size.
innodb_lru_scan_depth
- Descrição: um parâmetro que influencia os algoritmos e a heurística da operação de liberação do buffer pool do InnoDB.
- Configuração padrão: 1024
- Máximo: não há valor máximo
- Mínimo: 100
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação innodb_lru_scan_depth.
innodb_read_io_threads
- Descrição: o número de encadeamentos de E/S para operações de leitura no InnoDB.
- Configuração padrão: 4
- Máximo: 64
- Mínimo: 1
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação innodb_read_io_threads.
innodb_write_io_threads
- Descrição: o número de encadeamentos de E/S para operações de leitura no InnoDB.
- Configuração padrão: 4
- Máximo: 64
- Mínimo: 1
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação innodb_write_io_threads.
net_read_timeout
- Descrição: o número de segundos de espera para a obtenção de mais dados de uma conexão antes da interrupção da leitura.
- Configuração padrão: 30
- Max:
- Mínimo: 1
- Requer reinicialização: True
Para mais informações, consulte MySQL documentação net_read_timeout.
net_write_timeout
- Descrição: o número de segundos de espera para a gravação de um bloco em uma conexão antes da interrupção da gravação.
- Configuração padrão: 60
- Max:
- Mínimo: 1
- Requer reinicialização: True
Para mais informações, consulte net_write_timeout
documentação.