I created a Groovy script that does the transition from h2 to mysql. From there you can do mysqldump. This requires tables to exist in the Mysql database. It should work on a DBMS with minor changes.
@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) }
source share