如何将H2Database数据库文件转换为MySQL数据库.sql文件?

时间:2012-07-06 09:46:27

标签: mysql h2

我在H2Database文件中有一些数据,我想将其转换为MySQL .sql数据库文件。我可以遵循哪些方法?

5 个答案:

答案 0 :(得分:8)

在回答Thomas Mueller时,SquirrelSQL对我很好。 以下是Windows转换H2数据库的过程:

  1. 转到“驱动程序列表”,默认情况下一切都是红色。

  2. 选择“H2”驱动程序,并指定“h2-1.3.173.jar”的完整路径(对于     例子)在“Extra Class Path”中。 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,我丢失了主键约束和自动增量功能。 您还可以通过右键单击重命名列和表:“refactor”。我通过在选项中禁用名称检查,使用它在完全复制后重命名保留字列。

    这对我有用。

答案 1 :(得分:6)

H2数据库生成的SQL脚本与MySQL支持的SQL不完全兼容。您必须手动更改SQL脚本。这要求你很好地了解H2和MySQL。

为了避免这个问题,将数据从H2复制到MySQL的另一种可能更简单的方法是使用第三方工具,例如SQuirreL SQLSQuirreL DB Copy Plugin插件。 (首先,您需要安装SQuirreL SQL以及SQuirreL DB Copy插件。)

答案 2 :(得分:2)

我创建了一个Groovy脚本,用于从h2迁移到mysql。从那里你可以做一个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)
}

答案 3 :(得分:1)

H2数据库允许您使用SCRIPT SQL语句或Script command line tool创建SQL脚本。可能您需要先调整脚本,然后再针对MySQL数据库运行它。

答案 4 :(得分:1)

您可以使用fullconvert转换数据库。易于使用。

按照此处显示的步骤进行操作

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