O rds_dbsync é uma ferramenta open source para migrar ou sincronizar dados do MySQL para o AnalyticDB for PostgreSQL (e outros bancos de dados compatíveis com PostgreSQL). O recurso mysql2pgsql conecta-se diretamente a ambos os bancos de dados, lê os dados do MySQL e os carrega no destino usando uma instrução COPY, sem necessidade de armazenamento intermediário. A importação dos dados ocorre em paralelo por meio de múltiplas threads de trabalho, cada uma responsável por um conjunto específico de tabelas.
Pré-requisitos
Antes de começar, verifique se você possui:
Permissão de leitura em todas as tabelas de usuário no banco de dados MySQL de origem
Permissão de gravação nas tabelas de destino no banco de dados AnalyticDB for PostgreSQL
O binário
mysql2pgsqlbaixado da página de releases do rds_dbsync ou compilado a partir do código-fonte
Início rápido
Para migrar todas as tabelas do MySQL para o AnalyticDB for PostgreSQL:
Configure as conexões de origem e destino no arquivo
my.cfg(consulte Configurar conexões).-
Gere o DDL das tabelas de destino:
./mysql2pgsql -d Execute o DDL gerado no AnalyticDB for PostgreSQL para criar as tabelas. Especifique uma chave de distribuição para cada tabela.
-
Importe todos os dados:
./mysql2pgsql
Por padrão, essa execução realiza a migração utilizando cinco threads simultâneas.
Configurar conexões
Edite o arquivo my.cfg para definir os detalhes de conexão dos bancos de dados de origem e destino.
Banco de dados MySQL de origem — seção [src.mysql]:
[src.mysql]
host = "192.168.1.1"
port = "3306"
user = "test"
password = "test"
db = "test"
encodingdir = "share"
encoding = "utf8"
Banco de dados de destino — seção [desc.pgsql] (compatível com PostgreSQL, PPAS e AnalyticDB for PostgreSQL):
[desc.pgsql]
connect_string = "host=192.168.1.2 dbname=test port=3432 user=test password=pgsql"
Executar mysql2pgsql
./mysql2pgsql -l <tables_list_file> -d -n -j <thread_count> -s <schema>
Todos os parâmetros são opcionais:
|
Parâmetro |
Descrição |
Padrão |
Exemplo |
|
|
Caminho para um arquivo de texto que lista as tabelas a serem sincronizadas. Se omitido, todas as tabelas do banco de dados de origem serão sincronizadas. |
Todas as tabelas |
|
|
|
Gera apenas a instrução DDL para criação da tabela de destino. Os dados não são sincronizados. |
Desativado |
|
|
|
Exclui definições de partição da instrução DDL. Utilize em conjunto com |
Desativado |
|
|
|
Quantidade de threads simultâneas para importação de dados. |
|
|
|
|
Schema da tabela de destino. Defina como |
— |
|
Formato do arquivo de lista de tabelas
Ao utilizar o parâmetro -l, crie um arquivo de texto simples onde cada linha especifica o nome de uma tabela e uma condição de filtro opcional:
table1 : select * from table_big where column1 < '2016-08-05'
table2 :
table3
table4: select column1, column2 from tableX where column1 != 10
table5: select * from table_big where column1 >= '2016-08-05'
Linhas sem condição (por exemplo,
table3) migram todas as linhas da tabela.Linhas com uma condição
SELECTmigram apenas as linhas correspondentes ao filtro.
Cenários comuns
Migração completa de banco de dados
-
Gere a instrução DDL:
./mysql2pgsql -d Execute o DDL no AnalyticDB for PostgreSQL para criar as tabelas. Especifique uma chave de distribuição para cada tabela.
-
Migre todos os dados:
./mysql2pgsqlPor padrão, cinco threads simultâneas leem e importam os dados.
Migração parcial de tabelas
-
Crie um arquivo chamado
tab_list.txte liste as tabelas a serem migradas. Adicione uma condição de filtro para migrar apenas um subconjunto de linhas:t1 t2 : select * from t2 where c1 > 138888Esse procedimento migra todas as linhas de
t1e apenas as linhas ondec1 > 138888det2. -
Execute a migração:
./mysql2pgsql -l tab_list.txt