PolarDB permite exportar una copia de seguridad de instantánea desde un clúster basado en discos en la nube como archivo CSV o SQL. Después, puede usar este archivo para restaurar los datos en una base de datos MySQL autogestionada.
El script de restauración en Python ya no recibe mantenimiento. Evalúe el script antes de utilizarlo.
Requisitos previos
Requisitos del clúster de PolarDB for MySQL
Para que la restauración sea exitosa, la versión de su base de datos autogestionada debe coincidir con la versión del clúster de origen de PolarDB for MySQL.
El clúster debe cumplir con los siguientes requisitos:
Clúster: esta función solo está disponible para la edición Cluster Edition de los clústeres de Enterprise Edition.
-
Región: China (Chengdu), China (Guangzhou), China (Qingdao), China (Beijing), China (Shanghai), China (Zhangjiakou), China (Hangzhou), China (Shenzhen), China (Hong Kong), Malaysia (Kuala Lumpur), Indonesia (Jakarta), Japan (Tokyo), Singapore, US (Silicon Valley), US (Virginia) y Germany (Frankfurt).
NotaEsta función estará disponible en otras regiones próximamente.
-
Otros:
El usuario de RAM debe tener permisos para descargar archivos de copia de seguridad. Para otorgar permisos a un usuario de RAM, consulte RAM user permissions.
Los datos de copia de seguridad no están cifrados. No es posible descargar archivos de copia de seguridad desde clústeres de PolarDB cifrados.
Solo se permite una tarea de descarga (en ejecución o con errores) por clúster o instancia a la vez.
Requisitos de la base de datos MySQL autogestionada
Asegúrese de que el parámetro local_infile esté habilitado en su base de datos MySQL autogestionada.
Compruebe el estado del parámetro
local_infile. El valorONindica que el parámetro está habilitado:SHOW GLOBAL VARIABLES LIKE 'local_infile';Habilite el parámetro
local_infile:SET GLOBAL local_infile=1;
Límites
Se aplican los siguientes límites al restaurar datos desde una copia de seguridad descargada hacia una base de datos MySQL autogestionada:
-
No son compatibles los siguientes tipos de campos binarios: BIT, BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB.
NotaSi un conjunto de copia de seguridad contiene estos tipos de campos, se almacenan en formato hexadecimal. En ese caso, debe usar manualmente la función
UNHEXdentro del comandoload data local infilepara convertir los valores hexadecinales a su formato binario original. No son compatibles los siguientes tipos de campos espaciales: GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON y GEOMETRYCOLLECTION.
Notas de uso
Utilice la misma versión de base de datos tanto en el clúster de PolarDB for MySQL como en la base de datos MySQL autogestionada. Las funciones incompatibles entre versiones distintas pueden provocar que la operación de restauración falle.
Antes de ejecutar el comando de restauración, asegúrese de que la base de datos de destino no contenga bases de datos ni tablas con los mismos nombres que las de los datos de la copia de seguridad. Esto evita conflictos y posibles pérdidas de datos. Elimine previamente cualquier base de datos o tabla que genere conflicto.
Interrumpir una tarea de restauración puede generar datos incompletos o provocar que la tarea termine con errores.
Procedimiento
Este ejemplo muestra cómo restaurar datos desde un archivo de copia de seguridad SQL de un clúster de PolarDB for MySQL hacia una base de datos MySQL autogestionada en una instancia de ECS (CentOS 7.8 de 64 bits). Adapte los comandos según su entorno específico.
En la consola de PolarDB, utilice la función Download backup files para convertir el archivo de copia de seguridad del clúster al formato CSV o SQL. Luego, descargue el archivo en su computadora local o en una instancia de ECS.
-
Descomprima el archivo de copia de seguridad.
-
Para archivos
.tar.gz:tar -izxvf <compressed_package_name>.tar.gz -C <destination_directory>Ejemplo: descomprime
backup.tar.gzen/home/mysql/data:tar -izxvf backup.tar.gz -C /home/mysql/data -
Para archivos
.tar.zst:zstd -d -c <compressed_package_name>.tar.zst | tar -xvf - -C <destination_directory>Ejemplo: descomprime
backup.tar.zsten/home/mysql/data:zstd -d -c backup.tar.zst | tar -xvf - -C /home/mysql/data
-
-
(Opcional) Compruebe que el archivo de copia de seguridad se haya descomprimido en el directorio especificado (
/home/mysql/data).ls -al /home/mysql/data -
Descargue el script de Python en su computadora local o en la instancia de ECS.
ImportanteEste script es únicamente de referencia y podría requerir modificaciones para su entorno. Úselo con precaución.
-
Otorgue permisos de ejecución al script
restore_from_downloads.pymediante el siguiente comando:chmod +x ./restore_from_downloads.py -
Restaure los datos del archivo CSV o SQL en su base de datos autogestionada:
python ./restore_from_downloads.py <path_to_csv_or_sql_directory> <database_endpoint> <database_port> <database_username> <database_password>Ejemplo:
python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"NotaSi cierra la ventana de la terminal, el script deja de ejecutarse. Para ejecutar el script en segundo plano, utilice el siguiente comando:
nohup python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" > app.log 2>&1 &Salida:
[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.zhxxxImportanteAsegúrese de que su base de datos autogestionada no contenga ninguna base de datos con el mismo nombre que alguna de las incluidas en la copia de seguridad. De lo contrario, la operación de restauración fallará.
Si el nombre de usuario o la contraseña de la base de datos contienen caracteres especiales, como signos de número (#) o espacios, encierre el valor entre comillas dobles ("") cuando lo pase como parámetro en la línea de comandos. Por ejemplo, si la contraseña de la base de datos es
#1234, debe pasar"#1234"en la línea de comandos.Si recibe un error como
Command 'python' not found, significa que Python no está instalado o no se encuentra en la variable PATH de su sistema. Compruebe la instalación de Python y el comando utilizado para ejecutarlo. Por ejemplo, si tiene instalado Python 3, puede usarpython3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx".Si aparece el mensaje de advertencia
[Warning] Using a password on the command line interface can be insecureal ejecutar un script de Python, se debe a que el script utiliza el comandomysql -h<database endpoint> -P<database port> -u<database username> -p<database password> -e<SQL>. Este método no es seguro porque otros usuarios del sistema pueden ver la contraseña al ejecutar comandos como ps. Esta advertencia no afecta la operación de recuperación. Una vez completada la recuperación, puede iniciar sesión en la base de datos MySQL autogestionada y cambiar la contraseña de la cuenta.Un error como
Access denied for user 'xxx'@'xxx' (using password: YES)indica que el nombre de usuario o la contraseña de la base de datos son incorrectos. Compruebe que haya introducido las credenciales correctamente.