我在Windows机器上有一个访问数据库,我必须在linux webserver上导入mysql。目前访问dabatbase表导出为文本文件,自动用ftp复制,然后加载到mysql中。
有没有更好的方法来执行此操作,可能使用ODBC连接或其他?
限制已经存在的复制信息的最佳方法是什么,即仅传输访问数据库中但尚未存在于mysql中的记录。
访问数据库由另一个程序处理,如果我不必对其进行更改,甚至打开它,那将是最好的。无法从访问数据库导入更新的记录。 mysql数据库将成为主要来源,一些记录将被删除或更改。我只想导入从未在mysql数据库中的记录,而不是恢复那些故意删除的记录。
答案 0 :(得分:3)
为什么不按照Keltia的建议通过ODBC链接表,然后使用一系列查询来添加缺失的记录并更新已更改的记录。查询可以通过VBA运行。 ADO也适用于MySQL和Access。
关于Access中使用的代码的一些注释:
Set db = CurrentDb
strSQL = "Insert INTO [ODBC;DSN=DSNName;].NameOfMySQLTable " _
& "Select AnyField As NameOfMySQLField FROM AnyAccessTable;"
db.Execute strSQL, dbFailOnError
End Sub
答案 1 :(得分:1)
如果您确实需要增量更新,那么执行此操作的方法是编写一个连接到两个数据库的脚本(至少在Access端通过ODBC)并比较所有表。复制整个东西的好处是你肯定不会忘记任何东西,缺点可能是大小以及在重新加载期间mysql不可用的事实。
答案 2 :(得分:0)
为了帮助仅传输更改,我建议您在Access数据库中添加一个名为RecordChanges的新表。
表结构如下:
RecordChangeID (int) - Primary Key (Autonumber)
TableName (varchar(250)) - Name of table that changed
RecordID (int) - ID of the record in that table that was added / modified
RecordAction (char(1)) - 'A' if add, 'M' if modified or 'D' if deleted
注意 - 通过向此添加用户ID和其他详细信息,您可以获得良好的审计跟踪。
这是一个痛苦的部分 - 但是我会在你的应用程序中创建一个子程序,以便每次在要与MySQL数据库同步的表中更改记录时向该表添加记录。
一旦完成,我将创建另一个只有一条记录的表,名为ExportStatus,具有以下结构:
LastRecordChangeID (int) - ID of the last Record Change
you exported in the Record Changes table
然后创建一个子例程来完成自上次导出以来的所有记录更改(从ExportStatus表中检索)并生成SQL语句以更新MySQL数据库,确保在完成后更新ExportStatus表。您可以删除已成功导出的所有RecordChange记录,或将其保留为审计跟踪。
在实现之前,您需要按照当前的方式进行初始同步。
答案 3 :(得分:0)
在
中查看我的回答答案 4 :(得分:-1)
我会做以下事情:
将所有Access数据转储到MySQL中的临时表中,这将暂时成为您的“主”数据源。您应该可以通过设置指向MySQL的ODBC数据源,右键单击Access表,然后点击“导出”来完成此操作。
可以通过链接表从MS Access内部完成所有这些操作。但是性能不会那么好,并且如果你的MySql表发生变化,它将需要更改Access语句。