Use o recurso Download Backup para converter um backup de snapshot de uma instância baseada em disco do ApsaraDB RDS for MySQL em um arquivo CSV ou SQL. Em seguida, restaure esse arquivo em um banco de dados MySQL autogerenciado em uma máquina local ou em uma instância ECS.
Pré-requisitos
-
A instância do ApsaraDB RDS for MySQL deve atender aos seguintes requisitos:
Versão do banco de dados: 8.0 ou 5.7 (há suporte para instâncias Serverless)
Tipo de armazenamento: ESSD ou disco de desempenho premium
Status: em execução
NotaVisualize essas informações na página Basic Information da instância.
O recurso de download avançado não é compatível com instâncias que usam discos de desempenho premium e têm o recurso de arquivamento de dados ativado. As tarefas de download dessas instâncias falham.
Desative o TDE na instância do ApsaraDB RDS for MySQL. Se a instância contiver tabelas criptografadas, o processo de restauração falhará. É necessário descriptografar as tabelas antes.
-
Ative o parâmetro
local_infileno seu banco de dados MySQL autogerenciado.NotaPara verificar o status do parâmetro
local_infile(ON indica que está ativado), execute o comando:SHOW GLOBAL VARIABLES LIKE 'local_infile';Para ativar o parâmetro
local_infile, execute o seguinte comando:SET GLOBAL local_infile=1;
Limitações
As limitações a seguir se aplicam aos tipos de dados na restauração de um conjunto de backups baixado para um banco de dados MySQL autogerenciado.
-
Tipos de campos binários não suportados: BIT, BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB e LONGBLOB.
NotaSe um conjunto de backups contiver esses tipos de dados, eles serão armazenados em formato hexadecimal. Durante a importação, o MySQL os trata como strings. Use manualmente a função
UNHEX()no comandoload data local infilepara convertê-los de volta ao formato binário.-
Como alternativa, para dados BLOB, use o
mysqldumppara fazer backup e restaurar os dados no seu banco de dados MySQL local.Faça backup dos dados:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <self-managed_database_name> --skip-triggers --skip-lock-tables > /tmp/<self-managed_database_name>.sqlRestaure os dados:
mysql -h 127.0.0.1 -u username -p database_name < backup_file.sql
Tipos de dados espaciais não suportados: GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON e GEOMETRYCOLLECTION.
Antes de começar
Manutenção do script: O script
restore_from_downloads.pyfornecido neste tópico é apenas para referência e não é mais mantido. Use-o com cuidado e verifique sua compatibilidade com o seu ambiente.Consistência da versão do banco de dados: Certifique-se de que a versão principal do seu banco de dados MySQL autogerenciado corresponda à da instância do ApsaraDB RDS for MySQL. Incompatibilidades de versão podem causar falhas na restauração devido a recursos incompatíveis.
Conflitos de nomenclatura: Certifique-se de que o banco de dados autogerenciado de destino não tenha conflitos de nomenclatura com os bancos de dados ou tabelas do conjunto de backups. Conflitos de nomenclatura causarão falhas na restauração.
Interrupção da tarefa: Interromper a tarefa de restauração pode resultar em dados incompletos ou falha na restauração. Não interrompa o processo depois de iniciá-lo.
-
Tratamento de caracteres especiais: Se um caminho de arquivo, conta de banco de dados ou senha contiver caracteres especiais, como
&,#ou umspace, coloque o valor entre aspas duplas (""). Caso contrário, o comando falhará. Por exemplo:# If a file path contains special characters, such as &, enclose the path in double quotation marks. python ./restore_from_downloads.py "/path/to/data&test" 127.0.0.1 3306 root zhtpasswordtest # If a password contains special characters, such as # or @, enclose the password in double quotation marks. python ./restore_from_downloads.py /data 127.0.0.1 3306 root "#Test@20250821"
Procedimento
Este exemplo demonstra como restaurar um arquivo SQL de uma instância baseada em disco do ApsaraDB RDS for MySQL para um banco de dados MySQL autogerenciado. O banco de dados autogerenciado neste exemplo é executado em uma instância ECS com Alibaba Cloud Linux 3.2104 LTS 64-bit. Adapte os comandos para o seu ambiente.
-
Baixe e descompacte o arquivo de backup
Acesse o console do RDS e use o recurso Download Backup para converter o arquivo de backup da sua instância baseada em disco do ApsaraDB RDS for MySQL em um arquivo CSV ou SQL. Em seguida, baixe o arquivo para a sua máquina local ou instância ECS.
-
Descompacte o arquivo de backup baixado em sua máquina local ou instância ECS.
-
Se o arquivo de backup estiver no formato
.tar.gz, execute o comando:tar -izxvf <compressed_file_name>.tar.gz -C <destination_directory> # Example: Decompress the backup.tar.gz file to the /home/mysql/data directory. The file name and directory in the command are for reference only. tar -izxvf backup.tar.gz -C /home/mysql/data -
Se o arquivo de backup estiver no formato
.tar.zst, execute o seguinte comando:zstd -d -c <compressed_file_name>.tar.zst | tar -xvf - -C <destination_directory> # Example: Decompress the backup.zst file to the /home/mysql/data directory. The file name and directory in the command are for reference only. zstd -d -c backup.tar.zst | tar -xvf - -C /home/mysql/data
-
-
(Opcional) Execute o comando abaixo para verificar se o arquivo de backup foi descompactado no local especificado (/home/mysql/data):
ls -al /home/mysql/data
-
Prepare o script de restauração
-
Prepare um script de restauração.
Baixe o arquivo de script Python do MySQL para a sua máquina local ou para uma instância ECS.
ImportanteEste script é fornecido apenas para referência. Modifique o script para adequá-lo ao seu ambiente. Use o script com cuidado.
-
Execute o comando a seguir para conceder permissão de execução ao script:
chmod +x ./<script_name>.py # Example: chmod +x ./restore_from_downloads.py
-
-
Execute o comando de restauração
ImportanteSe aparecer uma mensagem de erro como
Command 'python' not found, o Python não está instalado ou o comandopythonnão está no PATH do sistema. Nesse caso, verifique a versão do Python instalada e use o comando correto para executar o script. Por exemplo, se você tiver o Python 3 instalado, execute o comandopython3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx".python ./<script_name>.py <path_to_CSV_or_SQL_directory> <database_host> <database_port> <database_account> <database_password> # Example: python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"[root@ixxx ~]# python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tesxxx" [INFO]: restore data from /home/mysql/data to 127.xxx:3306 mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure database: zhxxx ends mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure table: zhxxx ends [INFO]: trying to exec: mysql -h127.xxx -P3306 -uroot -p#Tesxxx </home/mysql/data/zxxx mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore data [1/1] of table zhxxx.zhxxx
Referências
Esta solução se aplica apenas à restauração de um backup de snapshot de uma instância baseada em disco. Caso precise restaurar um backup de uma instância com discos locais de alto desempenho, consulte Restore a physical backup file from ApsaraDB RDS for MySQL to a self-managed database ou Restore a logical backup file from ApsaraDB RDS for MySQL to a self-managed database.
A Alibaba Cloud também oferece o Data Transmission Service (DTS) to help you migrate data from an ApsaraDB RDS for MySQL instance to a self-managed MySQL database.
Para obter mais soluções de restauração de dados, consulte Overview of data restoration solutions.