【发布时间】:2011-04-07 14:04:59
【问题描述】:
我们的 Java 服务器应用程序将数据记录到 SQL 数据库中,该数据库可能在也可能不在同一台机器上。目前我们使用 MS SQL Server,我们现在正在移植到 MySQL。用户在我们的应用服务器上配置数据库备份参数,例如运行备份的时间,应用服务器在适当的时间通过 sproc 执行 SQL Server 的 BACKUP DATABASE 命令。它每天进行增量备份,每周进行完整备份。
MySQL 缺少一个等效的功能来告诉数据库从客户端连接备份自己。我们正在考虑的选项是:
- 创建一个 UDF 以输出到 mysqldump(或复制数据库文件),它可以通过存储过程从我们的应用服务器调用。本质上,我们会为 MySQL 实现一个 BACKUP DATABASE 版本。
- 创建一个在 MySQL 机器上运行的服务,该服务可以从应用服务器获取备份设置并在本地运行 mysqldump(或文件复制)。
- 创建一个备份存储过程来模拟 mysqldump,例如为每个表显示 CREATE TABLES 和 SELECT INTO OUTFILE。
不推荐设置 cron 作业、Perl 脚本、第三方应用程序或其他在数据中心工作得很好的技巧;这是一个收缩包装,需要非常健壮并且可以放手。
数据库大小可以从大约 10MB 到 10GB 不等。
我知道增量部分的二进制日志。如果我们决定使用它们,我认为通用解决方案也可能适用于它们。
这一切都在 Windows 2003 32 位或 2008R2 64 位 MySQL 5.1 上。
UDF 选项对我来说似乎是最好的。 UDF 存储库 (http://www.mysqludf.org/) 有 mysqludf_sys,这可能是我们所需要的,但我想我会征求意见,因为经过广泛的谷歌搜索后,其他人似乎没有得出相同的结论,或者我们的需求只是与众不同。我们的应用是 MySQL 中唯一的东西,所以我不担心其他用户可以访问我们的 UDF。
我忽略了任何解决方案?有以这种方式使用 UDF 的经验吗?
谢谢, 埃里克
【问题讨论】:
-
它可能更便宜,但与 mssql 相比,有上百万个小东西让 MySQL 难以处理。我确实喜欢并一直使用它,但是从 mssql 到 mysql 是一个步骤,恕我直言。
-
@Byron Whitlock:证明 MySQL 从 SQL Server 降级的不仅仅是备份......
-
@OMG Ponies,是的,在日期时间字段上没有微秒精度,不允许在时间戳的表定义中使用默认的 GETDATE(),这是一个挑剔的查询优化器,它会强制您重写查询。名单还在继续:(
-
除此之外更好(我喜欢这两者的东西),如果我们只处理
-
是的,我支持你,因为缺少亚秒级时间戳。但这是另一个问题......