Migración de datos a RDS for MySQL mediante mysqldump
Preparación para la migración de datos
Puede acceder a instancias de base de datos de RDS a través de un EIP o a través de un ECS.
- Prepare un ECS para acceder a instancias de base de datos en la misma VPC o prepare un dispositivo para acceder a RDS a través de una EIP.
- Para conectarse a una instancia de base de datos a través de un ECS debe crear un ECS primero.
- Para conectarse a una instancia de base de datos a través de una EIP, debe:
- Vincule una EIP a la instancia de base de datos. Para obtener más información, consulte Vinculación de un EIP.
- Asegúrese de que el dispositivo local pueda acceder a la EIP.
- Instale un cliente MySQL en el ECS o dispositivo preparado.
Para obtener más información, consulte ¿Cómo puedo instalar el cliente de MySQL?
La versión del cliente MySQL debe ser la misma que la versión del motor de base de datos de su instancia de RDS for MySQL. Una base de datos o cliente de MySQL proporcionará mysqldump y mysql.
Después de migrar los datos a RDS, es posible que tenga que cambiar la dirección IP. Para obtener más información, consulte Consulta y cambio de una dirección IP flotante.
Las bases de datos del sistema RDS mysql y sys no se pueden importar de una instancia RDS for MySQL a otra.
Exportación de datos
Antes de migrar una base de datos a RDS es necesario exportar sus datos.
- La herramienta de exportación debe coincidir con la versión del motor de base de datos.
- La migración de la base de datos se realiza sin conexión. Antes de la migración, debe detener todas las aplicaciones que utilizan la base de datos de origen.
- Inicie sesión en la base de datos de origen.
- Utilice la herramienta mysqldump para exportar la estructura de la tabla a un archivo SQL.
La base de datos mysql es necesaria para la gestión del RDS. Al exportar la estructura de la tabla, no especifique --all-database. De lo contrario, se producirá un error en la base de datos.
mysqldump--databases<DB_NAME>--single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF-u <DB_USER>-p -h<DB_ADDRESS>-P <DB_PORT>|sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' ><BACKUP_FILE>
- DB_NAME indica el nombre de la base de datos que se va a migrar.
- DB_USER indica el nombre de usuario de la base de datos.
- DB_ADDRESS indica la dirección de la base de datos.
- DB_PORT indica el puerto de la base de datos.
- BACKUP_FILE indica el nombre del archivo al que se exportarán los datos.
Introduzca la contraseña de la base de datos cuando se le solicite.
Ejemplo:
mysqldump --databases rdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.168.151.18 -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > dump-defs.sql
Enter password:
Si usa mysqldump con una versión anterior a la 5.6, quite --set-gtid-purged=OFF antes de ejecutar este comando.
Después de ejecutar este comando, se generará un archivo dump-defs.sql de la siguiente manera:
[rds@localhost ~]$ ll dump-defs.sql -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-defs.sql
- Utilice la herramienta mysqldump para exportar datos a un archivo SQL.
La base de datos mysql es necesaria para la gestión del RDS. Al exportar datos, no especifique --all-database. De lo contrario, se producirá un error en la base de datos.
mysqldump --databases<DB_NAME>--single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers-u<DB_USER>-p-h<DB_ADDRESS>-P<DB_PORT>-r<BACKUP_FILE>
Para obtener más información sobre los parámetros del comando anterior, consulte 2.
Introduzca la contraseña de la base de datos cuando se le solicite.
Ejemplo:
mysqldump --databases rdsdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -P 3306 -r dump-data.sql
Si usa mysqldump con una versión anterior a la 5.6, quite --set-gtid-purged=OFF antes de ejecutar este comando.
Después de ejecutar este comando, se generará un archivo dump-data.sql de la siguiente manera:
[rds@localhost ~]$ ll dump-data.sql -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-data.sql
Importación de datos
Puede conectar su cliente a RDS e importar archivos SQL exportados a RDS.
Si la base de datos de origen invoca a activadores, procedimientos almacenados, funciones o eventos, debe establecer log_bin_trust_function_creators en ON en la base de datos de destino antes de importar datos.
- Inicie sesión en el ECS o en el dispositivo que puede acceder a la instancia de base de datos de RDS.
- Conéctese a la instancia de base de datos de RDS a través de un cliente.
- Importe la estructura de la tabla a RDS.
# mysql -f -h<RDS_ADDRESS>-P<DB_PORT>-uroot-p < <BACKUP_DIR>/dump-defs.sql
- RDS_ADDRESS indica la dirección IP de la instancia de base de datos de RDS.
- DB_PORT indica el puerto de instancia de base de datos de RDS.
- BACKUP_DIR indica el directorio donde se almacena dump-defs.sql.
Ejemplo:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-defs.sql
Enter password:
Si desea importar sentencias SQL de una tabla a RDS, especifique una base de datos en el comando. De lo contrario, puede mostrarse el mensaje de error "No database selected". Por ejemplo, si desea importar instrucciones SQL de una tabla a mydb de base de datos, ejecute el siguiente comando:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql
Enter password:
- Importe datos a RDS.
# mysql -f -h<RDS_ADDRESS>-P<DB_PORT>-uroot-p< <BACKUP_DIR>/dump-data.sql
- RDS_ADDRESS indica la dirección IP de la instancia de base de datos de RDS.
- DB_PORT indica el puerto de instancia de base de datos de RDS.
- BACKUP_DIR indica el directorio donde se almacena dump-data.sql.
Ejemplo:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-data.sql
Enter password:
Si desea importar sentencias SQL de una tabla a RDS, especifique una base de datos en el comando. De lo contrario, puede mostrarse el mensaje de error "No database selected". Por ejemplo, si desea importar instrucciones SQL de una tabla a mydb de base de datos, ejecute el siguiente comando:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql
Enter password:
- Vea el resultado de la importación.
mysql> show databases;
El siguiente resultado indica que se ha importado rdsdb de base de datos.
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | rdsdb | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)