2012-07-06 48 views

Trả lời

1

Cơ sở dữ liệu H2 cho phép bạn tạo tập lệnh SQL bằng cách sử dụng câu lệnh SQL SCRIPT hoặc Script command line tool. Có thể bạn sẽ cần phải chỉnh sửa kịch bản trước khi bạn có thể chạy nó với cơ sở dữ liệu MySQL.

+0

Tôi đã cố gắng thực hiện. Nhưng nó không thành công.Bạn có thể cho tôi một kịch bản mẫu cho nó –

+0

Như tôi đã viết, bạn có thể phải sửa đổi kịch bản trước khi bạn có thể chạy nó với MySQL. –

+0

Sửa đổi tôi phải làm là gì? luôn luôn nhận được lỗi. Im sử dụng mysql 5.1.61. –

5

Tập lệnh SQL được tạo bởi cơ sở dữ liệu H2 không hoàn toàn tương thích với SQL được MySQL hỗ trợ. Bạn sẽ phải thay đổi tập lệnh SQL theo cách thủ công. Điều này đòi hỏi bạn phải biết cả H2 và MySQL khá tốt.

Để tránh vấn đề này, một cách thay thế, có lẽ đơn giản hơn để sao chép dữ liệu từ H2 sang MySQL là sử dụng công cụ của bên thứ 3 chẳng hạn như SQuirreL SQL cùng với plugin SQuirreL DB Copy Plugin. (Đầu tiên bạn cần phải cài đặt SquirreL SQL và trên hết là SquirreL DB Copy Plugin.)

+0

Tôi đã sử dụng SquirreL SQL cùng với plugin SQuirreL DB Copy Plugin. Nhưng nó không làm việc nó mang lại cho Sao chép thất bại: Không có cơ sở dữ liệu được lựa chọn (SQL Erro Mã = 1046) SQL Lỗi là: CREARE TABLE ..... .... ... .. (Không có biến liên kết) Cách sửa lỗi này. –

+0

Vâng, tôi đoán bạn nên hỏi tại danh sách gửi thư SquirreL DB Copy Plugin. Nhưng tôi tự hỏi, nếu thông báo lỗi là "Không có cơ sở dữ liệu chọn" - bạn đã chọn một cơ sở dữ liệu? –

+0

Ở góc trên bên trái, có một danh sách thả xuống được gọi là "Danh mục", có chọn cơ sở dữ liệu mà bạn muốn sao chép các bảng. Sự cố này có thể đã được giải quyết, nhưng tôi đã gặp phải vấn đề tương tự ngay hôm nay và thêm nhận xét này cho người khác có cùng vấn đề –

2

Tôi đã tạo một kịch bản Groovy thực hiện di chuyển từ h2 sang mysql. Từ đó bạn có thể làm một mysqldump. Nó đòi hỏi rằng các bảng tồn tại trong cơ sở dữ liệu Mysql. Nó sẽ làm việc cho DBMS ohter với những thay đổi nhỏ.

@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) 
} 
6

Để trả lời cho Thomas Mueller, SquirrelSQL đã làm việc tốt cho tôi. Dưới đây là thủ tục cho Windows để chuyển đổi cơ sở dữ liệu H2:

  1. Đến "danh sách trình điều khiển", nơi mà tất cả mọi thứ là màu đỏ theo mặc định.

  2. Chọn trình điều khiển "H2" và chỉ định đường dẫn đầy đủ tới "h2-1.3.173.jar" (ví dụ ) trong "Đường dẫn lớp bổ sung". Trình điều khiển H2 sẽ hiển thị một kiểm tra màu xanh trong danh sách.

  3. Chọn tài xế mục tiêu của bạn (PostgreSQL, MySQL), và làm tương tự, ví dụ cho PostgreSQL, chỉ định đường dẫn đầy đủ đến "postgresql-9.4-1201.jdbc41.jar" trong hảo hạng Path.

  4. Đi tới "Bí danh", sau đó nhấp vào "+" cho H2: định cấu hình chuỗi JDBC của bạn, ví dụ: sao chép/dán chuỗi jdbc bạn có được khi khởi chạy H2 và thực hiện tương tự cho cơ sở dữ liệu đích: trên "+", định cấu hình và "kiểm tra".

  5. Khi bạn nhấp đúp vào bí danh của mình, bạn sẽ thấy mọi thứ bên trong cơ sở dữ liệu của mình trong Tab mới. Chuyển đến các bảng trong cơ sở dữ liệu nguồn, thực hiện chọn nhiều trên tất cả các bảng của bạn và thực hiện nhấp chuột phải: "Sao chép Bảng".

  6. Chuyển đến cơ sở dữ liệu đích của bạn từ Bí danh và thực hiện "Dán bảng". Khi tất cả các bảng được sao chép hoàn toàn, các tham chiếu khóa ngoài cũng được tạo ra.

  7. Kiểm tra các khóa chính của bạn: từ H2 đến PostgreSQL, tôi đã mất các ràng buộc khóa chính và khả năng tăng tự động. Bạn cũng có thể đổi tên cột và bảng bằng cách nhấp chuột phải: "refactor". Tôi đã sử dụng nó để đổi tên các cột từ dành riêng sau khi sao chép đầy đủ, bằng cách tắt tùy chọn kiểm tra tên.

    Điều này phù hợp với tôi.

Các vấn đề liên quan