Use Data Transmission Service (DTS) para migrar datos de un clúster de PolarDB for PostgreSQL a una instancia de SelectDB y ejecutar análisis de grandes volúmenes de datos.
Elección de una estrategia de migración
DTS admite tres tipos de migración que se pueden combinar según sus necesidades:
|
Estrategia |
Tipos de migración |
Cuándo usarla |
Tiempo de inactividad |
|
Migración completa |
Schema Migration + Full Data Migration |
Migración única; no se escriben datos nuevos durante el proceso |
Obligatorio |
|
Migración en línea |
Schema Migration + Full Data Migration + Incremental Data Migration |
Migración sin tiempo de inactividad; el origen sigue recibiendo escrituras |
Ninguna |
Para la mayoría de las cargas de trabajo en producción, utilice la estrategia de migración en línea. Si elige únicamente la migración completa, detenga todas las escrituras en la base de datos de origen antes de iniciar el proceso. De lo contrario, se producirá una inconsistencia de datos entre el origen y el destino.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia de SelectDB de destino cuyo espacio de almacenamiento sea mayor que el espacio utilizado en el clúster de PolarDB for PostgreSQL de origen. Para consultar las instrucciones de configuración, consulte Create an instance
Una cuenta de base de datos con privilegios en el clúster de PolarDB for PostgreSQL de origen (la cuenta debe ser propietaria de la base de datos). Para consultar las instrucciones de configuración, consulte Create a database account y Database management
Una cuenta de base de datos en la instancia de SelectDB de destino con los siguientes permisos: Usage_priv, Select_priv, Load_priv, Alter_priv, Create_priv y Drop_priv. Para consultar las instrucciones de configuración, consulte Cluster permission management y Basic permission management
Para la incremental data migration: el parámetro
wal_leveldel clúster de PolarDB for PostgreSQL de origen debe establecerse enlogical. Compruebe y actualice este parámetro en la configuración de parámetros del clústerPara el cambio entre nodo principal y secundario durante la migración: la función de conmutación por error de ranuras de replicación lógica debe estar habilitada en el clúster de origen. Consulte Conmutación por error de ranuras de replicación lógica
Si el clúster de PolarDB for PostgreSQL de origen no es compatible con la función de conmutación por error de ranuras de replicación lógica (por ejemplo, cuando Database Engine está configurado como PostgreSQL 14 ) y se activa un cambio entre nodo principal y secundario, la tarea de migración presentará errores y no se podrá recuperar.
Límites
Base de datos de origen
-
Las tablas que se van a migrar deben tener una clave primaria o un índice UNIQUE NOT NULL. Según el tipo de tablas:
Si todas las tablas tienen una clave primaria o un índice único no nulo: asegúrese de que los campos de las tablas sean únicos. De lo contrario, podrían existir datos duplicados en la base de datos de destino.
Si algunas tablas no tienen ni clave primaria ni índice único no nulo: al configurar la instancia, seleccione Schema Migration en Migration Types. Después, en el paso Configurations for Databases, Tables, and Columns, establezca Engine en duplicate para estas tablas. De lo contrario, la instancia de migración podría presentar errores o se podrían perder datos.
Durante la migración de esquemas y la migración completa de datos, no ejecute operaciones DDL que modifiquen el esquema de la base de datos o de las tablas, ya que la tarea de migración presentará errores.
Durante la migración incremental de datos, un solo cambio de datos que supere los 256 MB provoca que la instancia de migración presente errores de forma irrecuperable. En ese caso, deberá volver a configurar la instancia de migración.
Las transacciones de larga duración durante la migración incremental pueden provocar la acumulación de registros de escritura anticipada (WAL), lo que podría agotar el espacio de almacenamiento de la base de datos de origen.
Base de datos de destino
Las tablas de la instancia de SelectDB de destino deben usar el motor Unique o Duplicate.
Los nombres de bases de datos y de tablas deben comenzar con una letra. Use la función object name mapping para cambiar el nombre de los objetos que no comiencen con una letra o que contengan caracteres chinos.
No agregue nodos de backend (BE) a la instancia de SelectDB durante la migración, ya que la tarea presentará errores. Reinicie la instancia de migración para reanudar el proceso.
No cree clústeres en la instancia de SelectDB de destino durante la migración, ya que la tarea presentará errores. Reinicie la instancia de migración para reanudar el proceso.
Comportamiento de la migración
Una instancia de migración solo puede migrar una base de datos. Para migrar varias bases de datos, cree una instancia de migración independiente para cada una.
DTS no es compatible con las tablas de la extensión TimescaleDB ni con las tablas que usan herencia entre esquemas.
DTS no valida metadatos como las secuencias. Compruebe manualmente la validez de los metadatos después de la migración.
Al migrar tablas particionadas, incluya tanto la tabla principal como todas las particiones secundarias como objetos de migración. La tabla principal de una tabla particionada de PostgreSQL no almacena datos directamente, ya que todos los datos residen en las particiones secundarias. Si faltan particiones secundarias, se producirá una inconsistencia de datos.
En un escenario de fusión de varias tablas (varias tablas de origen migradas a una sola tabla de destino), los esquemas de todas las tablas de origen deben ser idénticos.
No es posible ejecutar operaciones DDL que modifiquen varias columnas de forma simultánea o que modifiquen la misma tabla de manera consecutiva.
DTS crea las siguientes tablas temporales en la base de datos de origen durante la migración incremental. No las elimine, ya que esto provocaría errores en la tarea. DTS las elimina automáticamente después de liberar la instancia de migración:
public.dts_pg_class,public.dts_pg_attribute,public.dts_pg_type,public.dts_pg_enum,public.dts_postgres_heartbeat,public.dts_ddl_command,public.dts_args_sessionypublic.aliyun_dts_instance
Comportamiento del motor Unique
Si la tabla de destino usa el motor Unique, todas las claves únicas de dicha tabla deben existir en la tabla de origen e incluirse como objetos de migración. De lo contrario, podría producirse una inconsistencia de datos.
Comportamiento del motor Duplicate
Si la tabla de destino usa el motor Duplicate:
DTS convierte las instrucciones UPDATE y DELETE en instrucciones INSERT.
Pueden aparecer filas duplicadas en el destino en estos casos: si se produjo un reintento, si se reinició la instancia de migración o si se ejecutaron dos o más operaciones DML en la misma fila después de iniciar la migración. Use las columnas adicionales (
_is_deleted,_versiony_record_id) para identificar y eliminar los duplicados.
Requisitos de la migración incremental de datos
Antes de escribir datos en las tablas incluidas en una migración incremental, ejecute el siguiente comando en cada tabla de la base de datos de origen:
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Reemplace schema y table con el nombre real del esquema y de la tabla. Ejecute este comando fuera del horario de mayor actividad y no bloquee las tablas, ya que hacerlo podría causar un interbloqueo.
Si omite el elemento de comprobación previa correspondiente, DTS ejecuta este comando automáticamente durante la inicialización de la instancia. Esto ocurre cuando la instancia se ejecuta por primera vez, o cuando la granularidad del objeto de migración se establece en Schema y se crea o reconstruye una tabla nueva mediante el comando RENAME.
Gestión de ranuras de replicación
DTS crea una ranura de replicación con el prefijo dts_sync_ en la base de datos de origen para replicar los datos incrementales. Esta ranura conserva hasta 15 minutos de registros incrementales.
Cuando una tarea de migración presenta errores o se libera la instancia de migración, DTS intenta limpiar la ranura de replicación automáticamente. Sin embargo, se requiere una limpieza manual en los siguientes casos:
La contraseña de la cuenta de la base de datos de origen se modificó durante la migración.
La dirección IP de DTS se eliminó de la lista blanca durante la migración.
Se produjo una conmutación por error entre el nodo principal y el secundario. En este caso, inicie sesión en la base de datos secundaria para realizar la limpieza.
Las ranuras de replicación que no se limpian se acumulan y consumen espacio en disco, lo que podría dejar la base de datos de origen no disponible.
Facturación
|
Tipo de migración |
Costo de configuración del enlace |
Costo de transferencia de datos |
|
Migración de esquemas + migración completa de datos |
Gratis |
Gratis |
|
Migración incremental de datos |
Con cargo. Consulte Billing overview. |
— |
Operaciones SQL compatibles con la migración incremental
|
Tipo |
Operaciones |
|
DML |
INSERT, UPDATE, DELETE |
|
DDL |
ADD COLUMN, DROP COLUMN |
Migración de datos de PolarDB for PostgreSQL a SelectDB
Paso 1: Ir a la página Data Migration
Utilice uno de los siguientes métodos:
Consola de DTS
Inicie sesión en DTS console
En el panel de navegación izquierdo, haga clic en Data Migration.
En la esquina superior izquierda, seleccione la región donde reside la instancia de migración.
Consola de DMS
Nota
La operación real puede variar según el modo y el diseño de la consola de DMS. Para obtener más información, consulte Modo simple y Personalizar el diseño y el estilo de la consola de DMS.
Inicie sesión en DMS console
En la barra de navegación superior, mueva el puntero sobre .
En la lista desplegable situada a la derecha de Data Migration Tasks, seleccione la región donde reside la instancia de migración.
Paso 2: Crear una tarea
Haga clic en Create Task para ir a la página de configuración de la tarea.
Paso 3: Configurar las bases de datos de origen y de destino
Configure los parámetros descritos en la siguiente tabla.
| Sección | Parámetro | Descripción |
|---|---|---|
| — | Task Name | Nombre de la tarea de DTS. DTS genera un nombre automáticamente. Especifique un nombre descriptivo para facilitar su identificación; no es necesario que sea único. |
| Source Database | Select Existing Connection | Si tiene una instancia de base de datos registrada en DTS, selecciónela en la lista desplegable y DTS completará automáticamente los parámetros restantes. Consulte Gestionar conexiones de bases de datos. De lo contrario, configure los siguientes parámetros. |
| Database Type | Seleccione PolarDB for PostgreSQL. | |
| Access Method | Seleccione Alibaba Cloud Instance. | |
| Instance Region | Seleccione la región donde reside el clúster de PolarDB for PostgreSQL de origen. | |
| Replicate Data Across Alibaba Cloud Accounts | Seleccione No (este ejemplo utiliza una instancia de la cuenta actual). | |
| Instance ID | Seleccione el identificador del clúster de PolarDB for PostgreSQL de origen. | |
| Database Name | Introduzca el nombre de la base de datos que contiene los objetos que se van a migrar. | |
| Database Account | Introduzca la cuenta de la base de datos. Consulte Requisitos previos para conocer los permisos obligatorios. | |
| Database Password | Introduzca la contraseña de la cuenta de la base de datos. | |
| Destination Database | Select Existing Connection | Si tiene una instancia de base de datos registrada en DTS, selecciónela en la lista desplegable. De lo contrario, configure los siguientes parámetros. |
| Database Type | Seleccione SelectDB. | |
| Access Method | Seleccione Alibaba Cloud Instance. | |
| Instance Region | Seleccione la región donde reside la instancia de SelectDB de destino. | |
| Replicate Data Across Alibaba Cloud Accounts | Seleccione No (este ejemplo utiliza una instancia de la cuenta actual). | |
| Instance ID | Seleccione el identificador de la instancia de SelectDB de destino. | |
| Database Account | Introduzca la cuenta de la base de datos. Consulte Requisitos previos para conocer los permisos obligatorios. | |
| Database Password | Introduzca la contraseña de la cuenta de la base de datos. |
Una vez completada la configuración, haga clic en Test Connectivity and Proceed en la parte inferior de la página.
Las direcciones IP de los servidores de DTS deben agregarse a la configuración de seguridad tanto de la base de datos de origen como de la de destino. DTS puede agregar estas direcciones IP automáticamente o usted puede agregarlas de forma manual. Consulte Agregar direcciones IP de servidores de DTS a una lista blanca .
Paso 4: Configurar los objetos de migración
En la página Configure Objects, configure los siguientes parámetros.
| Parámetro | Descripción |
|---|---|
| Migration Types | Seleccione los tipos de migración según su estrategia: <br>- Full migration (sin tolerancia al tiempo de inactividad): seleccione Schema Migration y Full Data Migration. Detenga todas las escrituras en el origen antes de iniciar el proceso. <br>- Migración en línea (sin tiempo de inactividad): seleccione Schema Migration, Full Data Migration y Incremental Data Migration. |
| Processing Mode of Conflicting Tables | - Precheck and Report Errors: DTS comprueba si existen tablas con el mismo nombre en el destino. Si hay duplicados, la comprobación previa presenta errores. Para resolverlo, cambie el nombre de la tabla de destino mediante la función de asignación de nombres de objetos. <br>- Ignore Errors and Proceed: DTS omite la comprobación de nombres duplicados. Aviso
Esto puede provocar una inconsistencia de datos. Si los esquemas coinciden, los registros de origen sobrescriben los registros de destino con la misma clave primaria; si difieren, la migración podría presentar errores o generar datos incompletos. Utilice esta opción con precaución. |
| Capitalization of Object Names in Destination Instance | Controla el uso de mayúsculas y minúsculas en los nombres de bases de datos, tablas y columnas del destino. El valor predeterminado es DTS default policy. Consulte Especificar el uso de mayúsculas y minúsculas en los nombres de objetos de la instancia de destino. |
| Source Objects | Seleccione los objetos que desea migrar. Haga clic en el icono |
| Selected Objects | - Para asignar un objeto a un nombre o destino diferente, haga clic con el botón derecho en el objeto y seleccione la opción de asignación. Consulte Asignar nombres de objetos. <br>- Para quitar un objeto, haga clic en él y luego en el icono bucket_count de una tabla (disponible cuando se selecciona Schema Migration y la granularidad del objeto de migración es tabla): haga clic con el botón derecho en la tabla, establezca Enable Parameter Settings en Yesconfiguración de notificaciones de alertas, introduzca el valor y haga clic en OK. <br>- Para filtrar filas mediante condiciones SQL, haga clic con el botón derecho en una tabla y especifique las condiciones. Consulte Especificar condiciones de filtro. <br>- Para seleccionar qué operaciones SQL se migrarán de forma incremental, haga clic con el botón derecho en un objeto y seleccione las operaciones. |
Si no selecciona Schema Migration, cree manualmente las tablas de destino con el modelo de datos Unique o Duplicate antes de iniciar la migración. Consulte Data type mappings, Additional columns y Data models.
El valor del parámetro
bucket_countdebe ser un número entero positivo. El valor predeterminado es auto.Si utiliza la asignación de nombres de objetos para cambiar el nombre de un objeto, otros objetos que dependan de él podrían no migrarse correctamente.
La asignación de nombres de objetos se aplica a bases de datos, tablas y columnas. Si un nombre contiene caracteres chinos, cámbielo por uno que use únicamente caracteres ASCII; de lo contrario, la tarea podría presentar errores.
Paso 5: Configurar los ajustes avanzados
Haga clic en Next: Advanced Settings y configure los siguientes parámetros.
|
Parámetro |
Descripción |
|
Dedicated Cluster for Task Scheduling |
De forma predeterminada, DTS utiliza un clúster compartido. Adquiera un clúster dedicado para mejorar la estabilidad de la tarea de migración. Consulte Qué es un clúster dedicado de DTS. |
|
Retry Time for Failed Connections |
Tiempo durante el cual DTS reintenta la conexión tras un error de conexión. Rango válido: de 10 a 1440 minutos. Valor predeterminado: 720 minutos. Establezca un valor mayor que 30. Si DTS restablece la conexión dentro de la ventana de reintento, la tarea se reanuda; de lo contrario, presenta errores. Nota: si varias tareas comparten la misma base de datos de origen o de destino, prevalece el último tiempo de reintento configurado. DTS cobra por la instancia durante los reintentos. |
|
Retry Time for Other Issues |
Tiempo durante el cual DTS reintenta la operación tras errores distintos a los de conexión (como errores DDL o DML). Rango válido: de 1 a 1440 minutos. Valor predeterminado: 10 minutos. Establezca un valor mayor que 10. Debe ser menor que Retry Time for Failed Connections. |
|
Enable Throttling for Full Data Migration |
Limita la carga de lectura y escritura en las bases de datos de origen y de destino durante la migración completa. Configure Queries per second (QPS) to the source database, RPS of Full Data Migration y Data migration speed for full migration (MB/s). Disponible únicamente cuando se selecciona Full Data Migration. |
|
Enable Throttling for Incremental Data Migration |
Limita la carga durante la migración incremental. Configure RPS of Incremental Data Migration y Data migration speed for incremental migration (MB/s). Disponible únicamente cuando se selecciona Incremental Data Migration. |
|
Environment Tag |
(Opcional) Etiquete la instancia con una etiqueta de entorno. |
|
Configure ETL |
Habilita la función de extracción, transformación y carga (ETL). Seleccione Yes para introducir las instrucciones de procesamiento de datos. Consulte Configurar ETL en una tarea de migración o sincronización de datos. |
|
Monitoring and Alerting |
Configura alertas para errores de tareas o latencias que superen un umbral determinado. Seleccione Yes para configurar los umbrales de alerta y los ajustes de notificación. Consulte Configurar monitoreo y alertas. |
Paso 6: Configurar los campos de bases de datos y tablas (opcional)
Haga clic en Next: Configure Database and Table Fields para establecer Primary Key Column, Distribution Key y Engine para las tablas de destino.
Este paso está disponible únicamente cuando se selecciona Schema Migration . Para ver todas las tablas, establezca Definition Status en All .
Primary Key Column puede ser una clave primaria compuesta. Seleccione una o más columnas de Primary Key Column para usarlas como Distribution Key .
Para las tablas sin clave primaria ni restricción UNIQUE, establezca Engine en duplicate ; de lo contrario, la migración podría presentar errores o se podrían perder datos.
Paso 7: Ejecutar la comprobación previa
Haga clic en Next: Save Task Settings and Precheck.
Para obtener una vista previa de los parámetros de API necesarios para configurar esta tarea, coloque el puntero sobre Next: Save Task Settings and Precheck y haga clic en Preview OpenAPI parameters antes de continuar.
DTS ejecuta una comprobación previa antes de iniciar la migración. Si la comprobación previa presenta errores:
Para los elementos con errores: haga clic en View Details, analice los resultados, resuelva los problemas y luego haga clic en Precheck Again.
Para los elementos de advertencia: si la advertencia se puede ignorar, haga clic en Confirm Alert Details > Ignore > OK > Precheck Again. Tenga en cuenta que ignorar las advertencias puede provocar una inconsistencia de datos.
Paso 8: Adquirir la instancia
Espere hasta que Success Rate alcance 100% y luego haga clic en Next: Purchase Instance.
-
En la página Purchase Instance, configure la clase de instancia:
Sección Parámetro Descripción New Instance Class Resource Group El resource group de la instancia de migración. Valor predeterminado: default resource group. Consulte What is Resource Management?. Instance Class La clase de instancia determina la velocidad de migración. Consulte Clases de instancias de migración de datos. Lea y seleccione la casilla de verificación Data Transmission Service (Pay-as-you-go) Service Terms.
Haga clic en Buy and Start y luego en OK en el cuadro de diálogo de confirmación.
Supervise el progreso en la página Data Migration:
Solo migración completa: la tarea se detiene automáticamente al finalizar. El estado muestra Completed.
Migración incremental incluida: la tarea se ejecuta de forma continua y nunca se detiene automáticamente. El estado muestra Running.
Durante la migración completa de datos, DTS consume recursos de lectura y escritura tanto en la base de datos de origen como en la de destino, lo que aumenta la carga de ambas. Ejecute la migración fuera del horario de mayor actividad, cuando la carga de CPU de ambas bases de datos sea inferior al 30 %.
Asignaciones de tipos de datos
Los tipos de datos se convierten al migrar de PolarDB for PostgreSQL a SelectDB. Revise las asignaciones antes de la migración, especialmente en los tipos con posibles diferencias de precisión o semánticas.
| Categoría | Tipo de PolarDB for PostgreSQL | Tipo de SelectDB |
|---|---|---|
| Numérico | SMALLINT | SMALLINT |
| INTEGER | INT | |
| BIGINT | BIGINT | |
| DECIMAL | DECIMAL | |
| NUMERIC | DECIMAL | |
| REAL | DOUBLE | |
| DOUBLE | DOUBLE | |
| SMALLSERIAL | SMALLINT | |
| SERIAL | INT | |
| BIGSERIAL | BIGINT | |
| Monetario | MONEY | STRING |
| Carácter | CHAR(n), VARCHAR(n) | VARCHAR |
| TEXT | STRING | |
| Binario | BYTEA | STRING |
| Fecha y hora | TIMESTAMP [(P)] [WITHOUT TIME ZONE] | DATETIMEV2 |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | |
| DATE | DATEV2 | |
| TIME [(P)] [WITHOUT TIME ZONE] | VARCHAR(50) | |
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | |
| INTERVAL [FIELDS] [(P)] | STRING | |
| Booleano | BOOLEAN | BOOLEAN |
| Geométrico | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING |
| Dirección de red | CIDR, INET, MACADDR, MACADDR8 | STRING |
| Búsqueda de texto | TSVECTOR | STRING |
| XML | XML | STRING |
| JSON | JSON | JSON |
Notas importantes sobre la conversión:
CHAR(n) y VARCHAR(n): Se convierten a
VARCHAR(4*n)para evitar la pérdida de datos causada por caracteres multibyte. Si no se especifica una longitud, SelectDB utiliza el valor predeterminadoVARCHAR(65533). Si la longitud resultante supera 65 533, los datos se convierten aSTRING.
Columnas adicionales
DTS agrega automáticamente las siguientes columnas a las tablas de destino que utilizan el motor Duplicate. Estas columnas le permiten identificar y eliminar registros duplicados.
|
Columna |
Tipo de datos |
Valor predeterminado |
Valor |
|
|
Int |
0 |
INSERT o UPDATE: |
|
|
Bigint |
0 |
Migración completa: |
|
|
Bigint |
0 |
Migración completa: |
Notas de uso
Latencia de la migración incremental
DTS utiliza una política de sincronización por lotes para reducir la carga en el destino. De forma predeterminada, cada objeto de sincronización se escribe como máximo una vez cada 5 segundos, lo que genera una latencia de sincronización normal generalmente inferior a 10 segundos.
Para reducir la latencia, ajuste el parámetro selectdb.reservoir.timeout.milliseconds de la instancia de migración en la consola de DTS. El rango válido es de 1000 a 10 000 milisegundos.
Un tiempo de procesamiento por lotes más corto aumenta la frecuencia de escritura, lo que eleva la carga y el tiempo de respuesta en el destino. Esto, a su vez, puede incrementar la latencia de sincronización. Ajústelo según la carga real del destino.
Recuperación tras errores de instancia
Si una instancia de migración presenta errores, el equipo de soporte de DTS intentará recuperarla en un plazo de 8 horas. Durante la recuperación, es posible que se reinicie la instancia o que se ajusten sus parámetros (solo se modifican los parámetros de la instancia de DTS, no los de la base de datos). Para consultar la lista de parámetros que podrían modificarse, consulte Modificar parámetros de instancia.
Migración fuera del horario de mayor actividad
Ejecute la migración fuera del horario de mayor actividad, cuando la carga de CPU de las bases de datos de origen y de destino sea inferior al 30 %. Esto reduce el riesgo de degradación del rendimiento en las cargas de trabajo de producción.