DataX est un outil open source de synchronisation de données hors ligne développé par Alibaba. Utilisez-le pour migrer par lots les données d'une base de données MySQL vers LindormTSDB.
La migration s'appuie sur deux plugins DataX :
MySQL Reader : lit les lignes de MySQL via JDBC (Java Database Connectivity).
TSDB Writer : écrit les points de données dans LindormTSDB via les API HTTP
/api/mputet/api/put.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une machine Linux pour exécuter DataX.
JDK 1.8 ou version ultérieure — téléchargez-le depuis Oracle.
Python 2.6.x (recommandé) — téléchargez-le depuis python.org.
Une base de données MySQL compatible avec la version 5.x.
Une instance LindormTSDB en cours d'exécution.
Une connectivité réseau entre l'hôte DataX et MySQL (port JDBC) ainsi qu'entre l'hôte DataX et LindormTSDB (port HTTP). L'absence de connectivité entraîne une erreur
Connect Exception.
Configurer DataX
Télécharger et extraire
Téléchargez le package DataX avec les plugins préconfigurés pour cette migration :
wget https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
tar -xzf datax.tar.gz
Définissez DATAX_HOME sur le répertoire extrait :
export DATAX_HOME=$(pwd)/datax
Vérifier l'installation
Exécutez le job de test intégré Stream Reader vers Stream Writer pour confirmer que DataX fonctionne correctement. Ces plugins n'ont aucune dépendance externe : Stream Reader génère des chaînes aléatoires et Stream Writer les affiche dans la console.
cd ${DATAX_HOME}
python bin/datax.py job/job.json
Une exécution réussie se termine par un résumé similaire à celui-ci :
Task start time : 2019-04-26 11:18:07
Task end time : 2019-04-26 11:18:17
Total time : 10s
Average traffic : 253.91KB/s
Record write speed : 10000rec/s
Total records read : 100000
Total read/write failures : 0
La mention Total read/write failures: 0 confirme que le job s'est terminé sans erreur. La vitesse d'écriture reflète le débit de Stream Writer, et non celui de LindormTSDB.
Configurer le job de migration
Créez un fichier de configuration nommé mysql2tsdb.json. Ce fichier définit un lecteur (MySQL Reader) et un rédacteur (TSDB Writer).
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "xxx",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"columnType": [
"tag",
"tag",
"timestamp",
"field_double",
"field_string",
"field_bool"
],
"sourceDbType": "RDB",
"endpoint": "http://localhost:8242",
"table": "my_book",
"multiField": "true",
"username": "xxx",
"password": "xxx",
"ignoreWriteError": "false",
"database": "default"
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
Le tableau column du MySQL Reader et le tableau column du TSDB Writer doivent lister les colonnes dans le même ordre. DataX effectue un mappage positionnel ; un ordre incorrect corrompt les données.
Paramètres du MySQL Reader
| Paramètre | Type | Obligatoire | Description | Par défaut | Exemple |
|---|---|---|---|---|---|
jdbcUrl |
String | Oui | Chaîne de connexion JDBC pour la base de données MySQL | — | jdbc:mysql://127.0.0.1:3306/datax |
username |
String | Oui | Nom d'utilisateur MySQL | — | root |
password |
String | Oui | Mot de passe associé au nom d'utilisateur spécifié | — | root |
table |
String | Oui | Table à lire | — | book |
column |
Array | Oui | Colonnes à lire, dans l'ordre. Doit correspondre à l'ordre de column dans le TSDB Writer. |
[] |
["name","type","create_time"] |
splitPk |
String | Non | Colonne utilisée pour partitionner les lectures afin d'exécuter les tâches en parallèle | (vide) | id |
Paramètres du TSDB Writer
| Paramètre | Type | Obligatoire | Description | Par défaut | Exemple |
|---|---|---|---|---|---|
sourceDbType |
String | Non | Type de système source. Utilisez RDB pour les bases de données relationnelles (MySQL, Oracle, PostgreSQL, DRDS) et TSDB pour les bases de données séries temporelles (OpenTSDB, InfluxDB, Prometheus, TimeScale). |
TSDB |
RDB |
column |
Array | Oui | Colonnes à écrire, dans le même ordre que le paramètre column du MySQL Reader. DataX effectue un mappage positionnel des colonnes. |
[] |
["name","type","create_time","price"] |
columnType |
Array | Oui | Type de champ LindormTSDB correspondant à chaque colonne du tableau column. Valeurs prises en charge : timestamp, tag, metric_num, metric_string. Consultez le tableau de mappage ci-dessous. |
[] |
["tag","tag","timestamp","metric_num"] |
endpoint |
String | Oui | Adresse et port de l'endpoint LindormTSDB | — | ld-xxxx:8242 |
multiField |
Bool | Oui | Définissez ce paramètre sur true pour écrire les données en mode multi-champs. |
false |
true |
table |
String | Oui | Nom de la table cible dans LindormTSDB | — | my_book |
username |
String | Non | Nom d'utilisateur LindormTSDB | — | tsdbuser |
password |
String | Non | Mot de passe LindormTSDB | — | tsdbpsw |
ignoreWriteError |
Bool | Oui | Si la valeur est true, les lignes dont l'écriture échoue sont ignorées au lieu d'arrêter le job. |
false |
false |
database |
String | Non | Nom de la base de données cible dans LindormTSDB | default |
default |
Mappage des types de colonnes
Le tableau columnType mappe chaque colonne MySQL à un type de champ LindormTSDB. Les valeurs prises en charge sont les suivantes :
**Valeur de columnType** |
Description | Type de colonne MySQL typique |
|---|---|---|
timestamp |
Champ d'horodatage | DATETIME, BIGINT (epoch en ms) |
tag |
Champ de dimension utilisé pour filtrer et grouper les requêtes | VARCHAR, CHAR |
metric_num |
Valeur de métrique numérique | INT, FLOAT, DOUBLE, DECIMAL |
metric_string |
Valeur de métrique sous forme de chaîne | TEXT, VARCHAR |
Exécuter la migration
Placez le fichier mysql2tsdb.json dans le répertoire parent du dossier datax/, puis exécutez la commande suivante :
cd ${DATAX_HOME}/..
python datax/bin/datax.py mysql2tsdb.json
Votre structure de répertoires doit ressembler à ceci avant l'exécution :
datax/
datax.tar.gz
mysql2tsdb.json
Vérifier la migration
Une migration réussie se termine par un résumé indiquant Total read/write failures égal à 0 :
Task start time : 2019-05-21 18:25:16
Task end time : 2019-05-21 18:25:27
Total time : 11s
Average traffic : 3B/s
Record write speed : 0rec/s
Total records read : 3
Total read/write failures : 0
Si Total read/write failures est supérieur à 0 et que ignoreWriteError est défini sur false, le job s'arrête et signale l'erreur. Consultez la sortie de la console pour identifier la ligne spécifique et le message d'erreur.
FAQ
Puis-je augmenter la mémoire JVM allouée au processus de migration ?
Transmettez les indicateurs JVM avec l'option -j :
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Comment ajouter l'hôte DataX à la liste d'autorisation de LindormTSDB ?
Consultez la rubrique Configurer une liste d'autorisation.
La migration échoue avec une Connect Exception. Que dois-je vérifier ?
Pour LindormTSDB : vérifiez que l'hôte DataX peut atteindre l'endpoint LindormTSDB sur le port HTTP spécifié dans le paramètre
endpoint.Pour MySQL : vérifiez que l'hôte DataX peut atteindre le port JDBC de MySQL.
Si vous exécutez DataX sur une instance ECS, consultez les cas d'utilisation de la configuration des groupes de sécurité ECS et la FAQ sur le VPC.