Làm cách nào để chuyển đổi tệp MDB (Access) sang MySQL (hoặc tệp SQL thuần túy)?


77

Có thể tạo Tập hợp các lệnh SQL từ cơ sở dữ liệu Microsoft Access không? Tôi hy vọng chuyển đổi tệp MDB này thành cơ sở dữ liệu MySQL để nhập, do đó tôi không phải thực hiện bước CSV.

Tôi mong đợi ngay cả một tệp kết xuất MSSQL vẫn chứa các lệnh SQL khả thi, nhưng tôi không biết gì về MSSQL, vui lòng cho tôi biết.

Câu trả lời:


73

Bạn muốn chuyển đổi mdb sang mysql (chuyển trực tiếp sang mysql hoặc mysql dump)?

Hãy thử một phần mềm có tên là Access to MySQL .

Access to MySQL là một chương trình nhỏ sẽ chuyển đổi Cơ sở dữ liệu Microsoft Access sang MySQL.

  • Giao diện thuật sĩ.
  • Truyền dữ liệu trực tiếp từ máy chủ này sang máy chủ khác.
  • Tạo tệp kết xuất.
  • Chọn bảng để chuyển.
  • Chọn các trường để chuyển.
  • Chuyển cơ sở dữ liệu được bảo vệ bằng mật khẩu.
  • Hỗ trợ cả bảo mật chia sẻ và bảo mật cấp người dùng.
  • Tùy chọn chuyển chỉ mục.
  • Tùy chọn chuyển hồ sơ.
  • Tùy chọn chuyển các giá trị mặc định trong định nghĩa trường.
  • Xác định và chuyển các loại trường số tự động.
  • Giao diện dòng lệnh.
  • Dễ dàng cài đặt, gỡ cài đặt và nâng cấp.

Xem liên kết nói trên để biết hướng dẫn từng bước với ảnh chụp màn hình.


2
cập nhật: đã làm tê liệt phiên bản miễn phí. tìm kiếm & thay thế hoạt động cho các cuộc di cư nhỏ hơn ..
Teson

7
Nó hoạt động cho cái mới định dạng Accdb truy cập bằng cách
golimar

Chỉ cần thêm rằng, phiên bản hiện tại của chương trình không hoạt động đúng cách (ít nhất đó là những gì tôi có thể kết luận). Nó không kết xuất tệp đúng cách (gây ra nhiều lỗi khi bạn muốn nhập) và kết nối trực tiếp với cơ sở dữ liệu (ngay cả trên localhost) không hoạt động.
mát mẻ

3
Nếu bạn có hệ điều hành 64 bit, bạn sẽ cần trình điều khiển ODBC 32 bit. dev.mysql.com/downloads/connector/odbc
blackandorangecat

1
Hơn 7 năm sau, và chương trình này vẫn hữu ích (và được duy trì!)
Sean O

47

Nếu bạn có quyền truy cập vào một hộp linux có cài đặt mdbtools, bạn có thể sử dụng tập lệnh Bash shell này (lưu dưới dạng mdbconvert.sh):

#!/bin/bash

TABLES=$(mdb-tables -1 $1)

MUSER="root"
MPASS="yourpassword"
MDB="$2"

MYSQL=$(which mysql)

for t in $TABLES
do
    $MYSQL -u $MUSER -p$MPASS $MDB -e "DROP TABLE IF EXISTS $t"
done

mdb-schema $1 mysql | $MYSQL -u $MUSER -p$MPASS $MDB

for t in $TABLES
do
    mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t | $MYSQL -u $MUSER -p$MPASS $MDB
done

Để gọi nó chỉ cần gọi nó như thế này:

./mdbconvert.sh accessfile.mdb mysqldatabasename

Nó sẽ nhập tất cả các bảng và tất cả dữ liệu.


1
Cảm ơn một triệu cho kịch bản đó. Chỉ cần hai gợi ý, tôi đoán bạn có thể loại bỏ AWKGREPvars và tôi đã thêm các tùy chọn -b strip -Hvào mdb-exportvì tôi có một số đối tượng OLE lạ trong mdb và vì các tiêu đề đã được tải trước đó. Tôi đoán trong một số trường hợp -b octalcũng sẽ hoạt động nhưng tôi đã gặp sự cố với dữ liệu nhị phân khi tải nó vào mysql.
white_gecko

3
Tôi đang nhập các bảng có dấu cách trong tên và điều này không hiệu quả với tôi. Tôi phải thêm IFS=$(echo -en "\n\b")sau shebang.
Steve Almond

Tuyệt vời! quản lý để xuất MDB sang MySQL trên Mac. điều duy nhất tôi vấp phải là Tên bảng có khoảng trắng, nhưng được sửa bằng cách đặt: $ MYSQL -u $ MUSER -p $ MPASS $ MDB -e "DROP TABLE IF TỒN TẠI` $ t` "và mdb-export -D '% Y- % m-% d% H:% M:% S '-I mysql $ 1 "$ t" | $ MYSQL -u $ MUSER -p $ MPASS $ MDB Và, thật không may, phải tạo một mảng có tên bảng vì 'for t in $ TABLES' được mã hóa theo khoảng trắng. Cảm ơn!!
Gerardo Camacho

Xin chào ... Tôi đang cố gắng làm cho điều này hoạt động với cơ sở dữ liệu có ký hiệu% trong tên. Tôi mới sử dụng MySQL, nhưng có vẻ như đó là một ký tự đại diện để đối sánh chuỗi. Bất kỳ ý tưởng về cách thoát khỏi chúng? \%\\%không làm nó cho tôi ...
cjolley

{ echo ‘set autocommit=0;’; mdb-export ... ;echo ‘commit;’ } | mysql có thể nhanh hơn
Martin Wang

33

Tôi đã sửa đổi tập lệnh bởi Nicolay77 để xuất cơ sở dữ liệu sang stdout (cách thông thường của các tập lệnh unix) để tôi có thể xuất dữ liệu ra tệp văn bản hoặc chuyển nó sang bất kỳ chương trình nào tôi muốn. Tập lệnh kết quả đơn giản hơn một chút và hoạt động tốt.

Vài ví dụ:

./mdb_to_mysql.sh database.mdb > data.sql

./mdb_to_mysql.sh database.mdb | mysql destination-db -u user -p

Đây là tập lệnh đã sửa đổi (lưu vào mdb_to_mysql.sh)

#!/bin/bash
TABLES=$(mdb-tables -1 $1)

for t in $TABLES
do
    echo "DROP TABLE IF EXISTS $t;"
done

mdb-schema $1 mysql

for t in $TABLES
do
    mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t
done

Cảm ơn @mikkom và @ Nicolay77! Tôi tạo ra một Gist sau khi copy-paste từ đây đến CLI là một nỗi đau: gist.github.com/togume/83b4bf40e1528742374bbce338270f34
togume

Bạn có thể chuyển đổi tập lệnh này thành tập lệnh hàng loạt không?
muneeb_ahmed

7

Người dùng OSX có thể theo dõi bằng Nicolay77 hoặc mikkom sử dụng tiện ích mdbtools . Bạn có thể cài đặt nó qua Homebrew . Chỉ cần cài đặt homebrew của bạn và sau đó đi

$ homebrew install mdbtools

Sau đó, tạo một trong những tập lệnh được mô tả bởi những người đó và sử dụng nó. Tôi đã sử dụng một của mikkom, chuyển đổi tất cả các tệp mdb của tôi thành sql.

$ ./to_mysql.sh myfile.mdb > myfile.sql

(btw chứa nhiều hơn 1 bảng)


3
Phiên bản mới của hệ điều hành MacOS / Homebrew lệnh làbrew install mdbtools
Toby Mellor

mdbtools không thoát đúng dấu gạch chéo không may và không xuất hiện để được duy trì: github.com/brianb/mdbtools/issues/89
John Mellor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.