Як я можу перетворити файл MDB (Access) у MySQL (або звичайний файл SQL)?


77

Чи можна створити дамп команд SQL з бази даних Microsoft Access? Я сподіваюсь перетворити цей файл MDB у базу даних MySQL для імпорту, тому мені не доведеться проходити крок CSV.

Я би очікував, що навіть файл дампа MSSQL все ще містить дієздатні команди SQL, але я нічого не знаю про MSSQL, будь ласка, дайте мені знати.

Відповіді:


73

Ви хочете перетворити mdb на mysql (прямий перехід у mysql або дамп mysql)?

Спробуйте програмне забезпечення під назвою Access to MySQL .

Доступ до MySQL - це невелика програма, яка перетворить бази даних Microsoft Access на MySQL.

  • Інтерфейс майстра.
  • Передача даних безпосередньо з одного сервера на інший.
  • Створіть файл дампа.
  • Виберіть таблиці для передачі.
  • Виберіть поля для передачі.
  • Передайте захищені паролем бази даних.
  • Підтримує як загальну, так і безпеку на рівні користувача.
  • Необов’язкова передача індексів.
  • Передача записів за бажанням.
  • Необов’язкова передача значень за замовчуванням у визначеннях полів.
  • Визначає та передає типи полів автоматичного номера.
  • Інтерфейс командного рядка.
  • Проста установка, видалення та оновлення.

Дивіться вищезгадане посилання для покрокового підручника зі скріншотами.


2
оновлення: скалічила безкоштовну версію. пошук і заміна робіт для менших міграцій, хоча ..
Тесон,

7
До речі, це працює для нового формату
.accdb

Просто додайте, що поточна версія програми не працює належним чином (принаймні це те, про що я зміг зробити висновок). Він не скидає файл належним чином (викликає багато помилок, коли потрібно імпортувати), і пряме підключення до бази даних (навіть на localhost) не працює.
круто

3
Якщо у вас 64-розрядна ОС, вам знадобиться 32-розрядний драйвер ODBC. dev.mysql.com/downloads/connector/odbc
blackandorangecat

1
7 років тому, і ця програма все ще корисна (і підтримується!)
Шон О,

47

Якщо у вас є доступ до вікна Linux із встановленими mdbtools, ви можете скористатися цим сценарієм оболонки Bash (зберегти як 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

Щоб викликати його, просто зателефонуйте так:

./mdbconvert.sh accessfile.mdb mysqldatabasename

Він імпортує всі таблиці та всі дані.


1
Дякую мільйон за цей сценарій. Всього дві підказки, я думаю , ви можете видалити AWKі GREPвари і я додав варіанти , -b strip -Hщоб , mdb-exportтому що у мене були деякі дивні об'єкти OLE в MDB і тому , що заголовки завантажуються раніше. Я думаю, що в деяких випадках -b octalце також спрацює, але у мене були проблеми з двійковими даними при завантаженні їх у mysql.
white_gecko

3
Я імпортую таблиці з пробілами в назві, і це не спрацювало для мене. Мені довелося додати IFS=$(echo -en "\n\b")після шебанга.
Стів Алмонд,

Чудово! вдалося експортувати MDB до MySQL на Mac. єдине, про що я наткнувся, це назви таблиць з пробілами, але виправлені, поставивши: $ MYSQL -u $ MUSER -p $ MPASS $ MDB -e "ТАБЛИЦЯ ПАДАННЯ, ЩО ІСНУЄ` $ t` "та ​​mdb-export -D '% Y- % m-% d% H:% M:% S '-I mysql $ 1 "$ t" | $ MYSQL -u $ MUSER -p $ MPASS $ MDB І, на жаль, потрібно створити масив з іменами таблиць, оскільки 'for t in $ TABLES' токенізується простором. Дякую!!
Херардо Камачо

Привіт ... Я намагаюся змусити це працювати з базою даних, яка в іменах містить% символів. Я не новачок у MySQL, але схоже, це символи підстановки для зіставлення рядків. Будь-які ідеї щодо того, як їм уникнути? \%і \\%не робите це для мене ...
cjolley

{ echo ‘set autocommit=0;’; mdb-export ... ;echo ‘commit;’ } | mysql може бути швидше
Мартін Ван

33

Я модифікував сценарій Nicolay77 для виведення бази даних у stdout (звичайний спосіб UNIX-сценаріїв), щоб я міг виводити дані в текстовий файл або передавати їх до будь-якої програми, яку я хочу. Отриманий сценарій дещо простіший і працює добре.

Кілька прикладів:

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

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

Ось модифікований скрипт (зберегти у 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

Дякую, @mikkom та @ Nicolay77! Я створив Gist після того, як копіювати-вставляти звідси до CLI було боляче: gist.github.com/togume/83b4bf40e1528742374bbce338270f34
перемикання

Чи можете ви перетворити цей сценарій на пакетний сценарій?
muneeb_ahmed

7

Користувачі OSX можуть слідувати по Nicolay77 або mikkom , який використовує mdbtools утиліту. Ви можете встановити його через Homebrew . Просто встановіть домашнє пиво, а потім ідіть

$ homebrew install mdbtools

Потім створіть один із сценаріїв, описаних хлопцями, і використовуйте його. Я використав файл mikkom, перетворив усі свої файли mdb на sql.

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

(який до речі містить більше 1 таблиці)


3
Новіші версії macOS / Homebrew командаbrew install mdbtools
Toby Mellor

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.