9

H2Databaseファイルにいくつかのデータがあり、それを MySQL.sqlデータベース ファイルに変換したいと考えています。私が従うことができる方法は何ですか?

4

5 に答える 5

9

Thomas Mueller への回答として、SquirrelSQL はうまく機能しました。Windows で H2 データベースを変換する手順は次のとおりです。

  1. デフォルトですべてが赤になっている「ドライバーリスト」に移動します。

  2. 「H2」ドライバーを選択し、「Extra Class Path」に「h2-1.3.173.jar」などのフルパスを指定します。H2 ドライバーは、リストに青いチェックを表示する必要があります。

  3. ターゲット ドライバー (PostgreSQL、MySQL) を選択し、同じことを行います。たとえば、PostgreSQL の場合は、Extra Class Path で "postgresql-9.4-1201.jdbc41.jar" へのフル パスを指定します。

  4. 「エイリアス」に移動し、H2 の「+」をクリックします: JDBC チェーンを構成します。たとえば、H2 を起動したときに取得した jdbc チェーンをコピーして貼り付け、ターゲット データベースに対して同じことを行います。「+」をクリックし、構成して「テスト」します。

  5. エイリアスをダブルクリックすると、データベース内のすべてが新しいタブに表示されます。ソースデータベースのテーブルに移動し、すべてのテーブルで複数選択を行い、右クリックして「テーブルのコピー」を実行します。

  6. Alias からターゲット データベースに移動し、「テーブルの貼り付け」を実行します。すべてのテーブルがまとめてコピーされると、外部キー参照も生成されます。

  7. 主キーを確認してください: H2 から PostgreSQL へ、主キーの制約と自動インクリメント機能を失いました。右クリックで列とテーブルの名前を変更することもできます:「リファクタリング」。オプションで名前チェックを無効にすることにより、フルコピー後に予約語列の名前を変更するために使用しました。

    これは私にとってはうまくいきました。

于 2015-05-27T08:36:03.377 に答える
6

H2 データベースによって生成された SQL スクリプトは、MySQL によってサポートされている SQL と完全には互換性がありません。SQL スクリプトを手動で変更する必要があります。これには、H2 と MySQL の両方を十分に理解している必要があります。

この問題を回避するには、H2 から MySQL にデータをコピーするためのおそらくより簡単な代替方法は、SQuirreL SQLなどのサードパーティ ツールをSQuirreL DB Copy Pluginプラグインと一緒に使用することです。(最初に SQuirreL SQL をインストールし、その上に SQuirreL DB Copy Plugin をインストールする必要があります。)

于 2012-07-08T08:04:32.273 に答える
3

h2 から mysql への移行を行う Groovy スクリプトを作成しました。そこから、mysqldump を実行できます。テーブルが Mysql データベースに存在する必要があります。マイナーな変更を加えれば、他の DBMS でも機能するはずです。

@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)
}
于 2014-08-20T12:53:42.793 に答える
1

SCRIPTH2 データベースでは、 SQL ステートメントまたはスクリプト コマンド ライン ツールを使用して SQL スクリプトを作成できます。おそらく、MySQL データベースに対してスクリプトを実行する前に、スクリプトを微調整する必要があります。

于 2012-07-06T10:24:54.040 に答える
1

fullconvert を使用してデータベースを変換できます。使いやすいです。

ここに示されている手順に従ってください

https://www.fullconvert.com/howto/h2-to-mysql

于 2018-11-30T10:07:31.910 に答える