创建 Windows 数据库备份服务

She*_*ena 1 mysql backup c#

我正在用 C# 创建一个 Windows 服务,它将在我们的系统上运行,以便在凌晨 3 点到 5 点之间在我们的数据库上运行备份。

我首先创建了一个方法,当 SQL 语句传递到备份方法时,该方法基本上会运行备份,如下所示。

 private void BackupData()
        {
            try
            {
 RunBackupSQL("INSERT IGNORE INTO new table_backup SELECT * FROM current table", 
"Backup current table data");
Run Code Online (Sandbox Code Playgroud)

然而,这是一次做 1 个表。我需要为具有超过 56 个不同表的 5 个数据库执行此操作。

我想知道是否有一种方法可以创建一个 SQL 命令来获取每个数据库中的所有表并进行备份,以便只有 5 个 SQL 语句而不是 56 个?

我工作的公司希望以这种方式完成,因为他们当前的备份系统非常困难,因为它加密了所有内容并且很难再次提取数据。我需要完全在不同的数据库上创建备份,以便有效地创建当前的快照。

它需要在每天凌晨 3 点到 5 点之间运行一次,因此实际上在这些时间范围之外所做的任何更改都将在计时器启动时被拾取,并会覆盖其他数据库。我需要备份服务器中的 5 个数据库,因此实际上我需要复制到 5 个数据库。因此,如果当前数据库出现任何问题,我们就有一个可以带回来的精确副本。它将创建新的 dbs,然后每次更改当前的 dbs 时,它都会运行计时器,该计时器会将更改发送到新的 dbs 并不断执行此操作。

它是 MySQL。仅供参考,我目前是一名学徒,所以他们可能希望我使用 Visual Studio 将其作为 C# 中的项目形式来让我创建 Windows 服务。

ype*_*eᵀᴹ 6

您似乎正在尝试推出自己的增量备份脚本。简短的回答是:

不要


进行备份时要考虑的事情太多,增量备份时要考虑的事情更多,因此很难正确完成。使用简单的INSERT IGNORE(忽略许多错误,不仅是重复的关键错误)是行不通的,也不会为您提供增量备份。

还要注意,数据库除了表之外还有一些东西。您可能还想备份一些视图定义和事件。并且该表被创建、删除和更改(添加、删除、修改、添加或删除触发器等)。

此外,备份必须是数据库的一致快照,因此无论脚本做什么,都必须是单个事务,或者数据库没有被任何其他会话修改。

我建议您首先阅读 MySQL 文档:

备份和恢复

它解释了可以使用的各种备份类型和方法。没有涵盖所有情况的解决方案,因此针对您的具体情况的答案取决于您的目标(正常备份、增量备份)以及许多其他详细信息,例如版本、版本、表引擎(MyISAM、InnoDB、NBD、等),在备份期间是否会访问数据库等。

您可能会发现,mysqldump您只需要 5 个数据库中的一个即可。