J'ai des données dans h2database fichier et je veux le convertir en mysql < Code> .SQL code> fichier de base de données. Quelles sont les méthodes que je peux suivre? P>
5 Réponses :
La base de données H2 vous permet de créer un script SQL à l'aide du script code>
instruction SQL ou Outil de ligne de commande de script . Peut-être que vous devrez modifier le script avant de pouvoir l'exécuter contre la base de données MySQL. P>
J'ai essayé de le faire. Mais ça échoue. Pouvez-vous me donner un exemple de script à elle
Comme je l'ai écrit, vous devrez peut-être modifier le script avant de pouvoir l'exécuter contre MySQL.
Quelle est la modification que je dois faire? Toujours im obtenir une erreur. Im en utilisant mysql 5.1.61.
MySQL et H2 ne sont pas entièrement compatibles. Quelles modifications vous devez faire exactement dépendent du script SQL.
J'ai ajouté une autre réponse: utiliser le "plugin de copie db écureuil" au lieu de la fonction de script de H2. Voir ci-dessous.
Le script SQL généré par la base de données H2 n'est pas entièrement compatible avec le SQL pris en charge par MySQL. Vous devriez changer le script SQL manuellement. Cela nécessite que vous sachiez très bien H2 et MySQL. P>
Pour éviter ce problème, une solution alternative, probablement plus simple de copier les données de H2 à MySQL consiste à utiliser un outil de 3ème partie tel que le Squirrel SQL avec le plug-in Squirrel DB Cople Plugin. (Tout d'abord, vous devez installer Squirrel SQL et en plus de ce plug-in Squirrel DB Copy.) P>
J'ai utilisé SQL Squirrel SQL avec le plug-in plugin de copie db écureuil. Mais il ne fonctionne pas de tâche que cela donne une copie échouée: Aucune base de données sélectionnée (code SQL erro = 1046) a échoué SQL était: Table Créée ...... .... ..... (pas de variables de liaison) Comment réparer cela.
Eh bien, je suppose que vous devriez demander à la liste de diffusion du plugin Copier Squirrel DB Copy. Mais je me demande si le message d'erreur est "Aucun numéro de base de données" - Avez-vous sélectionné une base de données?
Dans le coin supérieur gauche, il y a une liste déroulante appelée "catalogue", sélectionnez la base de données à laquelle vous souhaitez copier les tables. Cette question aurait pu être résolue, mais je frappe aujourd'hui le même problème et ajoute ce commentaire pour quelqu'un d'autre ayant le même problème
J'ai créé un script groovy qui fait la migration de H2 sur MySQL. De là, vous pourriez faire un mysqldump. Cela nécessite que les tables existent dans la base de données MySQL. Il devrait fonctionner pour Ohter SGM avec des modifications mineures.
@Grapes( [ @Grab(group='mysql', module='mysql-connector-java', version='5.1.26'), @Grab(group='com.h2database', module='h2', version='1.3.166'), @GrabConfig(systemClassLoader = true) ]) import groovy.sql.Sql def h2Url='jdbc:h2:C:\\Users\\xxx\\Desktop\\h2\\sonardata\\sonar' def h2User='sonar' def h2Passwd='sonar' def mysqlUrl='jdbc:mysql://10.56.xxx.xxx:3306/sonar?useunicode=true&characterencoding=utf8&rewritebatchedstatements=true' def mysqlUser='sonar' def mysqlPasswd='xxxxxx' def mysqlDatabase='sonar' sql = Sql.newInstance(h2Url, h2User, h2Passwd, 'org.h2.Driver' ) def tables = [:] sql.eachRow("select * from information_schema.columns where table_schema='PUBLIC'") { if(!it.TABLE_NAME.endsWith("_MY")) { if (tables[it.TABLE_NAME] == null) { tables[it.TABLE_NAME] = [] } tables[it.TABLE_NAME] += it.COLUMN_NAME; } } tables.each{tab, cols -> println("processing $tab") println("droppin $tab"+"_my") sql.execute("DROP TABLE IF EXISTS "+tab+"_my;") sql.execute("create linked table "+tab+"_my ('com.mysql.jdbc.Driver', '"+mysqlUrl+"', '"+mysqlUser+"', '"+mysqlPasswd+"', '"+mysqlDatabase+"."+tab.toLowerCase()+"');") sql.eachRow("select count(*) as c from " + tab + "_my"){println("deleting $it.c entries from mysql table")} result = sql.execute("delete from "+tab+"_my") colString = cols.join(", ") sql.eachRow("select count(*) as c from " + tab){println("starting to copy $it.c entries")} sql.execute("insert into " + tab + "_my ("+colString+") select "+colString+" from " + tab) }
En réponse à Thomas Mueller, SquirrelSQL a fonctionné bien pour moi. Voici la procédure pour Windows pour convertir une base de données H2: P>
Allez à "Liste des pilotes", où tout est rouge par défaut. p> li>
Sélectionnez le pilote "H2" et spécifiez le chemin complet de "H2-1.3.173.jar" (pour exemple) dans "Path de classe supplémentaire". Le pilote H2 doit afficher un bleu Vérifiez la liste. P> li>
Sélectionnez votre pilote cible (PostgreSQL, MySQL) et Faites de même, par exemple pour PostgreSQL, spécifiez le chemin complet de "PostgreSQL-9.4-1201.jdbc41.jar" dans un chemin de classe supplémentaire. P> li>
aller dans "Alias", puis cliquez sur "+" pour H2: Configurez votre chaîne JDBC, par exemple Copier / coller la chaîne JDBC que vous obtenez lorsque vous lancez H2 et faites de même pour votre base de données cible: Cliquez sur "+", configurer et "Test". P> LI>
Lorsque vous double-cliquez sur votre alias, vous devez tout voir dans votre base de données dans un nouvel onglet. Accédez aux tables de la base de données source, faites une sélection multiple sur toutes vos tables et effectuez un clic droit: "Table de copie". P> Li>
Allez dans votre base de données cible à partir d'alias et faites une "table de pâte". Lorsque toutes les tables sont complètement copiées, les références de clés étrangères sont également générées. p> li>
Vérifiez vos touches principales: de H2 à PostgreSQL, j'ai perdu les principales contraintes de clé et la capacité d'incrémentation automatique. Vous pouvez également renommer les colonnes et les tables par un clic droit: "Refactor". Je l'ai utilisé pour renommer des colonnes de mots réservées après une copie complète, en désactivant le nom d'archivage des options. P>
Cela a bien fonctionné pour moi. P> Li> ol>
Hey @Elo, im essayant de faire cela ce que vous avez expliqué et que j'obtiens cette erreur: Erreur: Erreur: la colonne "Contenu" est de type OID mais l'expression est de type bytea. Avez-vous une idée?
Désolé @ user14073111, je n'ai pas pu aider: je n'ai plus eu ce problème et je ne travaille plus avec ces bases de données.
Vous pouvez utiliser FullConvert pour convertir la base de données. C'est facile à utiliser. p>
Suivez les étapes indiquées ici p>
Cet outil coûte 699 $; L'édition d'essai mangue délibérément des données