gpt4 book ai didi

mysql - AWS RDS - 自动备份与使用 MyISAM 表的快照

转载 作者:行者123 更新时间:2023-11-29 04:15:38 25 4
gpt4 key购买 nike

我有一个带有 MyISAM 表的 AWS RDS MySQL 5.7 数据库,我想将其迁移到自定义 VPC 中的另一个 RDS,迁移后,将这些 MyISAM 表转换为 InnoDB。如果我理解正确,创建正确自动备份的唯一方法是使用此处说明的以下过程:“使用不受支持的 MySQL 存储引擎进行自动备份” https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#Overview.BackupDeviceRestrictions

  1. 停止对 MyISAM 表的所有事件(即关闭所有 session )。您可以通过为从 SHOW FULL PROCESSLIST 命令返回的每个进程调用 mysql.rds_kill 命令来关闭所有 session 。
  2. 锁定并刷新您的每个 MyISAM 表
  3. 创建数据库实例的快照。快照完成后,释放锁并恢复 MyISAM 表上的事件

有人做过这个程序吗?快照是如何每晚从当前 RDS DBInstance 成功创建的,即使它包含 MyISAM 表?

谢谢!

最佳答案

问题不在于快照创建。当您实际尝试使用其中一个快照时,可能会出现问题。

如果您的 RDS 实例的底层 EBS 卷(您看不到该卷,但它就在那里——RDS 在 EC2 上运行,具有“隐藏”实例和卷),则 RDS 快照通过捕获快照来工作。

EBS 快照捕获硬盘驱动器的全部内容,与快照过程开始时碰巧存在的内容完全相同。

如果执行 sudo killall -9 mysqld,快照上的结果与 MySQL 服务器上的结果基本相同——就好像服务器立即停止了一切, 没有做任何它通常做的清理以正常关闭的事情。对于 RDS,事情并没有那么戏剧化,因为 RDS 确实采取了一些预防措施,但从根本上说,这就是正在发生的事情的本质。

当您从快照创建 RDS 实例时,实例启动时发生的第一件事与您假设的服务器在您重新启动被杀死的 MySQL 服务器守护进程时会做的事情相同:InnoDB 崩溃恢复。

InnoDB Crash Recovery

To recover from a MySQL server crash, the only requirement is to restart the MySQL server. InnoDB automatically checks the logs and performs a roll-forward of the database to the present. InnoDB automatically rolls back uncommitted transactions that were present at the time of the crash.

https://dev.mysql.com/doc/refman/5.7/en/innodb-recovery.html#innodb-crash-recovery

崩溃恢复是 InnoDB 的机制,用于使内部数据结构中的所有内容恢复和谐,并确保所有数据完好无损,与您的应用程序离开时完全一样。这是可能的,因为 InnoDB 是一个事务存储引擎。这意味着很多不同的事情,但在这种情况下它的具体含义是 InnoDB 不只是在您更改表时更改表数据。它经历了一个可以像这样简化的过程:

  • 将建议的更改存储到磁盘¹
  • 实际做出改变
  • 将更改标记为完成

这意味着在更改完成之前,InnoDB 可以被中断,随后能够从中断的地方继续,而不会损坏或丢失数据。

MyISAM 没有这样的机制。它只是直接写入数据文件。即使 MyISAM 表没有被主动使用,它可能仍然需要在服务器启动时进行修复,以清理其结构。在某些情况下,可能无法修复表,表中的全部或部分数据将丢失。

如果您的 MyISAM 表在快照发生时被刷新并锁定,它们在磁盘上处于静止状态,就好像服务器实际上在快照发生之前已经正常关闭一样,因此它们将在快照上保持稳定.

但是快照过程似乎总是成功的,因为快照只是复制磁盘上的任何内容,因为它出现在快照开始的时刻。

问题是捕获的快照可能无法使用,您无法知道快照是否完全可用。


¹ 请注意,第一步“将建议的更改存储到磁盘”与系统变量 innodb_flush_log_at_trx_commit 相关,如果设置为 1 会使系统变慢,但也会是最安全的设置,因为在第一步完成之前,您的查询实际上并没有成功。 2 的设置仍然相当安全,因为它仍然会写入更改,但会继续,而无需操作系统在您的查询返回成功之前确认它们实际上已写入硬盘...但是在崩溃中,您的应用程序认为已提交的事务可能会或可能不会幸存。

关于mysql - AWS RDS - 自动备份与使用 MyISAM 表的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com