如何将MDB(访问)文件转换为MySQL(或普通SQL文件)?


76

是否可以从Microsoft Access数据库创建SQL命令转储?我希望将此MDB文件转换为MySQL数据库以进行导入,因此不必执行CSV步骤。

我希望即使一个MSSQL转储文件仍然包含可行的SQL命令,但我对MSSQL一无所知,请告诉我。

Answers:


73

您想将mdb转换为mysql(直接传输到mysql或mysql dump)吗?

尝试使用一种名为Access to MySQL的软件。

访问MySQL是一个小程序,它将Microsoft Access数据库转换为MySQL。

  • 向导界面。
  • 将数据直接从一台服务器传输到另一台服务器。
  • 创建一个转储文件。
  • 选择要传输的表。
  • 选择要传输的字段。
  • 传输受密码保护的数据库。
  • 支持共享安全性和用户级安全性。
  • 索引的可选传输。
  • 可选的记录转移。
  • 字段定义中默认值的可选传输。
  • 标识并传输自动编号字段类型。
  • 命令行界面。
  • 易于安装,卸载和升级。

请参阅前面提到的链接,获取带屏幕截图的分步教程。


2
更新:已经降低了免费版本。search&replace可用于较小的迁移
。.– Teson,2012年

7
顺便说一下,它适用于新的.accdb Access格式
golimar 2014年

只需补充一点,该程序的当前版本无法正常运行(至少这是我能够得出的结论)。它不能正确地转储文件(要导入时会导致很多错误),并且无法直接连接到数据库(即使在本地主机上)。
很酷的

3
如果您具有64位操作系统,则将需要32位ODBC驱动程序。dev.mysql.com/downloads/connector/odbc
blackandorangecat

1
7年多以后,该程序仍然有用(并得以维护!)
Sean O

47

如果您可以访问安装了mdbtools的Linux机器,则可以使用以下Bash shell脚本(另存为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
感谢一百万的脚本。仅有两个提示,我想您可以删除AWKGREPvars,并且将选项添加-b strip -H到,mdb-export因为我在mdb中有一些奇怪的OLE对象,并且因为标头是以前加载的。我想在某些情况下-b octal也可以,但是在将二进制数据加载到mysql时遇到了麻烦。
white_gecko 2014年

3
我正在导入名称中带有空格的表,这对我来说不起作用。我不得不IFS=$(echo -en "\n\b")在shebang之后添加。
史蒂夫·杏仁

太棒了!设法在Mac上将MDB导出到MySQL。我唯一碰巧的是带有空格的表名,但是通过以下方式进行了固定:$ 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 $ in $ TABLES”中的表名,必须创建一个带有表名的数组,并按空间标记。谢谢!!
Gerardo Camacho

您好...我正在尝试使其与名称中包含%符号的数据库一起使用。我是MySQL的新手,但看起来它们是字符串匹配的通配符。关于如何摆脱它们的任何想法?\%而且\\%不是为我做的……
cjolley

{ echo ‘set autocommit=0;’; mdb-export ... ;echo ‘commit;’ } | mysql 可能会更快
Martin Wang

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!从这里复制粘贴到CLI感到很痛苦之后,我创建了一个Gist:gist.github.com/togume/83b4bf40e1528742374bbce338270f34
togume

您可以将此脚本转换为批处理脚本吗?
muneeb_ahmed

7

OSX用户可以通过遵循Nicolay77mikkom使用该mdbtools效用。您可以通过Homebrew安装它。只需安装自制软件,然后再去

$ homebrew install mdbtools

然后创建家伙描述的脚本之一并使用它。我用过mikkom的,将我所有的mdb文件都转换成sql。

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

(顺便说一下,其中包含多个表)


3
较新版本的macOS / Homebrew,命令是brew install mdbtools
Toby Mellor

不幸的是,mdbtools
John Mellor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.