如何将H2数据库文件转换为MySQL数据库.sql文件?
文件中有一些数据,我想将其转换为MySQL如何将H2数据库文件转换为MySQL数据库.sql文件?,mysql,h2,Mysql,H2,文件中有一些数据,我想将其转换为MySQL.sql数据库文件。我可以遵循哪些方法?H2数据库允许您使用SQL语句或创建SQL脚本。在MySQL数据库上运行脚本之前,可能需要调整脚本。H2数据库生成的SQL脚本与MySQL支持的SQL不完全兼容。您必须手动更改SQL脚本。这要求您非常了解H2和MySQL 为了避免这个问题,将数据从H2复制到MySQL的另一种可能更简单的方法是使用第三方工具,例如与插件一起使用。(首先需要安装SQuirreL SQL,最重要的是安装SQuirreL DB Copy插
.sql
数据库文件。我可以遵循哪些方法?H2数据库允许您使用SQL语句或创建SQL脚本。在MySQL数据库上运行脚本之前,可能需要调整脚本。H2数据库生成的SQL脚本与MySQL支持的SQL不完全兼容。您必须手动更改SQL脚本。这要求您非常了解H2和MySQL
为了避免这个问题,将数据从H2复制到MySQL的另一种可能更简单的方法是使用第三方工具,例如与插件一起使用。(首先需要安装SQuirreL SQL,最重要的是安装SQuirreL DB Copy插件。)我创建了一个Groovy脚本,用于从h2迁移到mysql。从那里你可以做一个mysqldump。它要求表存在于Mysql数据库中。它应该适用于ohter 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)
}
作为对托马斯·穆勒的回答,SquirreSQL对我来说工作得很好。 以下是Windows转换H2数据库的过程:
可以使用fullconvert转换数据库。它很容易使用 按照此处显示的步骤操作
我试着去做。但它失败了。你能给我一个例子脚本到ITA我写的,你可能必须修改脚本,然后才能对MySQL运行它。我必须做什么修改?我总是犯错误。Im使用mysql 5.1.61。mysql和H2不完全兼容。您需要做的修改完全取决于SQL脚本。我添加了另一个答案:使用“SquirrelDB Copy插件”而不是H2的脚本功能。见下文。我使用了SquirrelSQL和SquirrelDB复制插件。但它不提供复制失败的工作:未选择任何数据库(SQL Erro Code=1046)失败的SQL was:CREARE表。。(没有绑定变量)如何解决这个问题。我想你应该在SQuirreL DB Copy插件邮件列表中询问。但我想知道,如果错误消息是“No database select”-是否选择了数据库?在左上角,有一个名为“Catalog”的下拉列表,其中选择了要将表复制到的数据库。这个问题可能已经解决了,但我今天遇到了同样的问题,并为其他有同样问题的人添加了此评论。此工具的成本为699美元;试用版故意破坏了dataHey@Elo,我正试图按照你解释的那样做,我得到了这个错误:错误:错误:列“内容”的类型是oid,但表达式的类型是bytea。你知道吗?抱歉@user14073111,帮不上忙:我没有这个问题,我不再处理这些数据库了。