Migrer d'une base de données X à une base de données Y en ligne de commandes
Vous pouvez vouloir migrer d'une base de données, par exemple H2, vers une autre base de données, par exemple MySQL. Pour ce faire, vous devez utiliser la commande de la MetaServlet nommée migrateDatabase.
Comme la base de données source est mise à jour pendant le processus de migration, il est obligatoire de la sauvegarder avant de la migrer.
L'application MetaServlet se trouve dans le dossier <TomcatPath>/webapps/<TalendAdministrationCenter>/WEB-INF/classes.
Pour afficher l'aide de cette commande (avec les paramètres associés), vous devez saisir ce qui suit dans l'application MetaServlet :
./MetaServletCaller.sh --tac-url=<yourApplicationURL> -h migrateDatabase
Pour plus d'informations concernant la MetaServlet, consultez Opérations sans interface graphique dans la MetaServlet.
Ci-dessous, un exemple de migration entre une base données H2 et une base de données MySQL.
Pour pouvoir utiliser cette commande, vous devez au préalable la mettre sur une seule ligne.
./MetaServletCaller.sh --tac-url http://localhost:8080/org.talend.administrator --json-params="{'actionName':'migrateDatabase','dbConfigPassword':'admin','mode':'synchronous','sourcePasswd':'tisadmin','sourceUrl':'jdbc:h2:/home/Talend/<version>/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/database/talend_administrator','sourceUser':'tisadmin','targetPasswd':'root','targetUrl':'jdbc:mysql://localhost:3306/base','targetUser':'root'}"
- Encode des caractères spéciaux dans l'URL de la base de données source/cible. Par exemple, encodez & comme %26 et ; comme %3B.
- Utilisez les guillemets simples pour *json-params, par exemple :
./MetaServletCaller.sh --tac-url http://192.168.30.36:8080/org.talend.administrator-7.3.1/ -v --json-params="{'actionName':'migrateDatabase','skipBackup':'true','dbConfigPassword':'admin','mode':'synchronous','sourcePasswd':'root','sourceUrl':'jdbc:mysql://mysql-8:3306/tac?useSSL=false%26serverTimezone=UTC%26allowPublicKeyRetrieval=true','sourceUser':'root','targetPasswd':'Root1234!','targetUrl':'jdbc:sqlserver://mssql-2017:1433%3BdatabaseName=tac','targetUser':'sa'}"
Cas d'utilisation : Migrer d'une base de données X à une base de données Y à l'aide de la MetaServlet
Les exemples utilisent les conventions suivantes :
URL de Talend Administration Center
http://tac.test.fr:8081/org.talend.administrator/
DB config password: admin
MySQL
user: mysql8
password: mysqlpass
database: mysql
database server: mysql8.test.fr
jdbc:mysql://mysql8.test.fr:3306/mysql_source?useSSL=false&allowPublicKeyRetrieval=true
MSSQL2017
user: SA
password: MSSQLpass2017
database: MSSQL
database server: mssql2017.test.fr
jdbc:sqlserver://mssql2017.test.fr:1433;databaseName=MSSQL_DEST
Dossier Tomcat recommandé
Vous pouvez stocker tous les pilotes JDBC que vous utilisez dans le dossier suivant : tac/apache-tomcat/endorsed ou, selon Tomcat, <TomcatPath>/webapps/org.talend.administrator/WEB-INF/lib.
Redémarrez Tomcat si vous ajoutez un pilote.
Par exemple, sous Linux :
'jdbc:mysql://mysql8.test.fr:3306/mysql?useSSL=false&allowPublicKeyRetrieval=true'
Cela doit être saisi comme ceci :
'jdbc:mysql://mysql8.test.fr:3306/mysql?useSSL=false\&allowPublicKeyRetrieval=true'
Migration de MySQL à MySQL
Exécutez la commande suivante :
mysql> drop database mysql_dest;
Query OK, 12 rows affected (0.10 sec)
mysql> create database mysql_dest;
Query OK, 1 row affected (0.00 sec)
mysql> grant ALL PRIVILEGES on *.* to 'mysql8'@'%';
Query OK, 0 rows affected (0.01 sec)
# /opt/Talend/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/classes/MetaServletCaller.sh
--tac-url http://tac.test.fr:8081/org.talend.administrator/ -v
--json-params="{'actionName':'migrateDatabase','skipBackup':'true','dbConfigPassword':'admin','mode':'synchronous','sourcePasswd':'mysqlpass','sourceUrl':'jdbc:mysql://mysql8.test.fr:3306/mysql?useSSL=false\&allowPublicKeyRetrieval=true','sourceUser':'mysql8','targetPasswd':'mysqlpass','targetUrl':'jdbc:mysql://mysql8.test.fr:3306/mysql_dest?useSSL=false\&allowPublicKeyRetrieval=true','targetUser':'mysql8'}"
-> URL: http://tac.test.fr:8081/org.talend.administrator/
-> Json parameters:
"{
'actionName': 'migrateDatabase',
'dbConfigPassword': 'admin',
'mode': 'synchronous',
'skipBackup': 'true',
'sourcePasswd': 'mysqlpass',
'sourceUrl': 'jdbc:mysql://mysql8.test.fr:3306/mysql?useSSL=false&allowPublicKeyRetrieval=true',
'sourceUser': 'mysql8',
'targetPasswd': 'mysqlpass',
'targetUrl': 'jdbc:mysql://mysql8.test.fr:3306/mysql_dest?useSSL=false&allowPublicKeyRetrieval=true',
'targetUser': 'mysql8'
}"
-> Complete request: http://tac.test.fr:8081/org.talend.administrator//metaServlet?eyJhY3Rpb25OYW1lIjoibWlncmF0ZURhdGF...
{'executionTime':{'millis':20052,'seconds':20},'returnCode':0}
Migration de MySQL à MSSQL
Si vous migrez vers MSSQL/SQLServer, le nom de la base de données source et de la base de données cible doit être dbo. La base de données source dbo doit être la base de données active de Talend Administration Center.
Utilisez la commande suivante pour créer une base de données et un schéma de destination :
$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P MSSQLpass2017
1> CREATE DATABASE dbo;
2> go
# /opt/Talend/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/classes/MetaServletCaller.sh
--tac-url http://tac.test.fr:8081/org.talend.administrator/ -v
--json-params="{'actionName':'migrateDatabase','skipBackup':'true','dbConfigPassword':'admin','mode':'synchronous','sourcePasswd':'mysqlpass','sourceUrl':'jdbc:mysql://mysql8.test.fr:3306/dbo?useSSL=false\&allowPublicKeyRetrieval=true','sourceUser':'mysql8','targetPasswd':'MSSQLpass2017','targetUrl':'jdbc:jtds:sqlserver://mssql2017.test.fr:1433/dbo','targetUser':'SA'}"
-> URL: http://tac.test.fr:8081/org.talend.administrator/
-> Json parameters:
"{
'actionName': 'migrateDatabase',
'dbConfigPassword': 'admin',
'mode': 'synchronous',
'skipBackup': 'true',
'sourcePasswd': 'mysqlpass',
'sourceUrl': 'jdbc:mysql://mysql8.test.fr:3306/dbo?useSSL=false&allowPublicKeyRetrieval=true',
'sourceUser': 'mysql8',
'targetPasswd': 'MSSQLpass2017',
'targetUrl': 'jdbc:jtds:sqlserver://mssql2017.test.fr:1433/dbo',
'targetUser': 'SA'
}"
-> Complete request: http://tac.test.fr:8081/org.talend.administrator//metaServlet?eyJhY3Rpb25OYW1lIjoibWlncmF0ZURhdGF...
{'executionTime':{'millis':20062,'seconds':20},'returnCode':0}
Migration de MySQL à MySQL
Exécutez la commande suivante :
# /opt/Talend/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/classes/MetaServletCaller.sh
--tac-url http://tac.test.fr:8081/org.talend.administrator/ -v
--json-params="{'actionName':'migrateDatabase','skipBackup':'true','dbConfigPassword':'admin','mode':'synchronous','sourcePasswd':'MSSQLpass2017','sourceUrl':'jdbc:jtds:sqlserver://mssql2017.test.fr:1433/mssql_test','sourceUser':'SA','targetPasswd':'mysqlpass','targetUrl':'jdbc:mysql://mysql8.test.fr:3306/mysql_dest?useSSL=false\&allowPublicKeyRetrieval=true','targetUser':'mysql8'}"
-> URL: http://tac.test.fr:8081/org.talend.administrator/
-> Json parameters:
"{
'actionName': 'migrateDatabase',
'dbConfigPassword': 'admin',
'mode': 'synchronous',
'skipBackup': 'true',
'sourcePasswd': 'MSSQLpass2017',
'sourceUrl': 'jdbc:jtds:sqlserver://mssql2017.test.fr:1433/mssql_test',
'sourceUser': 'SA',
'targetPasswd': 'mysqlpass',
'targetUrl': 'jdbc:mysql://mysql8.test.fr:3306/mysql_dest?useSSL=false&allowPublicKeyRetrieval=true',
'targetUser': 'mysql8'
}"
-> Complete request: http://tac.test.fr:8081/org.talend.administrator//metaServlet?eyJhY3Rpb25OYW1lIjoibWlncmF0ZURhdGF...
{'executionTime':{'millis':28108,'seconds':28},'returnCode':0}