Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Gérer les catalogues MySQL

Dernière mise à jour :Aug 09, 2026

Un catalogue MySQL vous permet d'interroger directement les tables d'une instance MySQL dans Realtime Compute for Apache Flink, sans enregistrer de DDL. Une fois créées, les tables du catalogue servent de tables source CDC (Change Data Capture), de tables de destination (sink) et de tables de dimension dans les déploiements Flink SQL.

Bases de données prises en charge

ApsaraDB RDS for MySQL, PolarDB for MySQL et les bases de données MySQL autogérées sont pris en charge. Seules les versions MySQL 5.7 et MySQL 8.0.x sont compatibles.

Limites

  • L'instance MySQL et Realtime Compute for Apache Flink doivent se trouver dans le même VPC (Virtual Private Cloud). Pour établir une connexion entre différents VPC ou via Internet, consultez la section FAQ sur la connectivité réseau.

  • Il est impossible de modifier la configuration d'un catalogue après sa création. Pour changer la configuration, supprimez le catalogue et créez-en un nouveau.

  • Vous pouvez uniquement interroger les tables des bases de données existantes. La création de bases de données ou de tables via Realtime Compute for Apache Flink n'est pas prise en charge.

  • Les tables source MySQL CDC ne peuvent être lues qu'en mode streaming, et non en mode batch.

  • Les vues ne peuvent pas être utilisées comme tables dans un catalogue MySQL créé avec Ververica Runtime (VVR) 8.0.7 ou version ultérieure.

  • Le catalogue MySQL n'identifie pas les tables créées avec une syntaxe spécifique à PolarDB (par exemple, PARTITION BY KEY(...) PARTITIONS 16, UNIQUE KEY ... dans une instruction CREATE TABLE).

Remarques d'utilisation

  • Activez la journalisation binaire (binary logging) sur ApsaraDB RDS for MySQL, PolarDB for MySQL ou votre base de données MySQL autogérée avant d'utiliser une table comme table source MySQL CDC. Pour plus d'informations, consultez la rubrique Configurer une base de données MySQL.

  • Définissez un server-id unique par déploiement lors de la lecture d'une table source MySQL CDC. Utilisez une plage de valeurs lorsque vous exécutez plusieurs déploiements simultanément ; cette plage doit contenir au moins autant de valeurs que le parallélisme du déploiement.

  • Stockez le mot de passe de la base de données sous forme de variable plutôt que de le spécifier en texte clair. Pour plus d'informations, consultez la rubrique Créer une variable.

  • Le champ de commentaire n'est pas affiché dans les détails du schéma de la table.

  • La suppression d'un catalogue n'entraîne pas la suppression des tables sous-jacentes dans MySQL. Les déploiements en cours d'exécution continuent de fonctionner sans interruption, mais le redéploiement ou le redémarrage d'un déploiement qui fait référence à un catalogue supprimé génère une erreur « table introuvable ».

Créer un catalogue MySQL

Créez un catalogue MySQL depuis la console (recommandé) ou en exécutant une instruction SQL CREATE CATALOG.

Console (recommandée)

  1. Accédez à la page Catalogs.

    1. Connectez-vous à la console Realtime Compute for Apache Flink. Recherchez l'espace de travail que vous souhaitez gérer et cliquez sur Console dans la colonne Actions.

    2. Dans le volet de navigation de gauche, cliquez sur Data Management.

  2. Sur la page Catalog List, cliquez sur Create Catalog. Dans l'onglet Built-in Catalog, sélectionnez MySQL, puis cliquez sur Next.

  3. À l'étape Configure Catalog, renseignez les paramètres.

    Important

    Il est impossible de modifier la configuration d'un catalogue après sa création. Pour changer la configuration, supprimez le catalogue et créez-en un nouveau.

    Paramètre Description Obligatoire
    catalogname Nom du catalogue MySQL. Oui
    hostname Adresse IP ou nom d'hôte de la base de données MySQL. Si l'instance MySQL se trouve dans un autre VPC ou doit être accessible via Internet, établissez d'abord les connexions réseau nécessaires. Consultez la section FAQ sur la connectivité réseau. Oui
    port Numéro de port de la base de données MySQL. Valeur par défaut : 3306. Non
    default-database Nom de la base de données MySQL par défaut. Oui
    username Nom d'utilisateur pour la base de données MySQL. Oui
    password Mot de passe de la base de données MySQL. Stockez-le sous forme de variable pour éviter toute exposition en texte clair. Consultez la rubrique Créer une variable. Oui

    Configure catalog parameters

  4. Cliquez sur Confirm. Le nouveau catalogue apparaît dans le volet Catalogs situé à gauche de la page Catalog List.

Consulter et supprimer un catalogue MySQL

Console (recommandée)

Sur la page Catalogs, cliquez sur le nom du catalogue pour afficher son Name et son Type dans la section Catalog List.

  • Afficher les bases de données et les tables : Cliquez sur View dans la colonne Actions.

  • Supprimer le catalogue : Cliquez sur Delete dans la colonne Actions.

Utiliser un catalogue MySQL

Lire à partir d'une table source CDC

Utilisez les indications SQL (SQL hints) pour définir le server-id pour chaque déploiement. Lorsque plusieurs déploiements lisent simultanément depuis la même table source, utilisez une plage de valeurs ; celle-ci doit contenir au moins autant de valeurs que le parallélisme du déploiement.

INSERT INTO `<othersinktable>`
SELECT ...
FROM `<mysqlcatalog>`.`<dbname>`.`<tablename>` /*+ OPTIONS('server-id' = '6000-6008') */;

Lire à partir de tables fragmentées (sharded)

Interrogez les tables fragmentées comme une seule table logique en utilisant des expressions régulières dans les segments du nom de la base de données et de la table. Le résultat de la requête inclut deux champs système, _db_name (STRING) et _table_name (STRING), qui, combinés aux clés primaires d'origine, forment la nouvelle clé primaire conjointe.

Par exemple, pour les tables user01 à user99 réparties sur les fragments de base de données db01 à db10 :

SELECT ... FROM `db.*`.`user.*` /*+ OPTIONS('server-id'='6000-6018') */;

La clé primaire conjointe de cette table logique est (_db_name, _table_name, id), où id représente la clé primaire d'origine.

Pour fusionner et synchroniser les données entre plusieurs tables dans une base de données fragmentée, consultez la rubrique Consolider et synchroniser les fragments de table et de base de données.

Synchroniser les données avec CTAS et CDAS

Utilisez CREATE TABLE AS (CTAS) pour synchroniser une seule table, y compris les modifications de schéma, ou pour fusionner les données de tables fragmentées. Utilisez CREATE DATABASE AS (CDAS) pour synchroniser une base de données entière, y compris les modifications de schéma en cours.

Remarque

CTAS et CDAS nécessitent des magasins de données amont et aval pris en charge. Si le connecteur aval n'implémente pas CatalogTableProvider, une erreur est renvoyée.

-- Single-table sync: propagates schema changes and data changes in real time
CREATE TABLE IF NOT EXISTS `<targetcatalog>`.`<targetdbname>`.`<targettablename>`
WITH (...)
AS TABLE `<mysqlcatalog>`.`<dbname>`.`<tablename>`
/*+ OPTIONS('server-id'='6000-6018') */;

-- Full-database sync: propagates schema changes and data changes in real time
CREATE DATABASE `<targetcatalog>`.`<targetdbname>` WITH (...)
AS DATABASE `<mysqlcatalog>`.`<dbname>` INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='6000-6018') */;

L'exemple suivant synchronise une table MySQL vers Hologres :

USE CATALOG holocatalog; -- Set the target catalog

CREATE TABLE IF NOT EXISTS holotable   -- Target table name; defaults to the catalog's default database if no database is specified
WITH ('jdbcWriteBatchSize' = '1024')   -- Optional sink connector options
AS TABLE mysqlcatalog.dbmysql.mysqltable
/*+ OPTIONS('server-id'='8001-8004') */; -- Additional options for the MySQL CDC source table

Pour une procédure détaillée complète, consultez la rubrique Utiliser un catalogue Hologres.

Pour plus d'informations, consultez les rubriques CREATE TABLE AS (CTAS) pour la synchronisation de tables uniques et fragmentées, et CREATE DATABASE AS (CDAS) pour la synchronisation de bases de données complètes.

Lire à partir d'une table de dimension

INSERT INTO `<othersinktable>`
SELECT ...
FROM `<othersourcetable>` AS e
JOIN `<mysqlcatalog>`.`<dbname>`.`<tablename>` FOR SYSTEM_TIME AS OF e.proctime AS w
ON e.id = w.id;

Écrire dans une table MySQL

INSERT INTO `<mysqlcatalog>`.`<dbname>`.`<tablename>`
SELECT ...
FROM `<othersourcetable>`;