200块钱3小时上门二维码-400元3小时快餐,约附近学生50一次,51品茶快约

公司新闻

如何破坏你的PostgreSQL数据库?

作者:admin 日期:2023-10-11 浏览:

如何破坏你的PostgreSQL数据库?

  当然,大多数人不想破坏他们的数据库。这些人将从避免本文中使用的技术中受益。但对于某些人来说,损坏数据库可能很有用,例如,如果您想测试将用于检测或修复数据损坏的工具或过程。

  先决条件

  我们需要一个包含一些数据的数据库,对于我们的一些实验,我们需要进行一些持续的活动。为此我们可以使用内置的: PostgreSQL benchmark pgbench。我们使用比例因子 100,因此最大的表包含 1000 万行:

  将使用 5 个并发客户端会话生成负载:

  通过设置fsync = off创建一个损坏的数据库

  让我们在postgresql.conf中设置fsync = off,并在服务器处于负载状态时关闭服务器。

南通数据恢复

  经过几次尝试,我们可以用amcheck扩展检测数据损坏:

  发生了什么事?数据不再按正确的顺序刷新到磁盘,因此数据修改可以在WAL之前到达磁盘。这将导致崩?;指雌诩涞氖菟鸹怠?/p>

  从备份中创建损坏的数据库

  当pgbench运行时,我们创建一个基本备份:

  注意,由于我使用的是PostgreSQL v15,

  所以启动备份模式的函数是:pg_backup_start()而不是pg_start_backup()。

  这是因为自PostgreSQL 9.6以来就被弃用的独占备份API最终在v15中被删除了。

  让我们找出数据库和pgbench_accounts主键索引的对象id:

  我们通过复制数据目录来创建备份。然后,我们再次复制pgbench_accounts的主键索引和提交日志,以确保它们比其他的更近:

  关键部分:不要创造backup_label

  现在我们退出备份模式。

  但是忽略pg_backup_stop()返回的backup_label文件的内容

  然后,让我们确??刂莆募械淖詈笠桓黾觳榈悴煌?/p>

  让我们启动服务器:

  现在索引扫描pgbench_accounts失败了,因为索引包含比表更多的最新数据:

  发生了什么事?通过从备份中省略backup_label文件,我们从错误的检查点恢复,因此表中的数据及其索引不再一致。注意,没有pg_backup_start()和pg_backup_stop()也能得到同样的效果,我只是想强调backup_label的重要性。

  使用pg_resetwal创建一个损坏的数据库

  当数据库在pgbench负载下时,我们使用

  然后我们运行pg_resetwal:

  然后我们启动服务器并用amcheck像以前一样使用来检查索引的完整性:

  发生了什么事?Pg_resetwal只在干净关闭的集群上使用是安全的。选项-f只在作为启动损坏的服务器和抢救一些数据的最后努力。只有专家才应该使用它。

  使用pg_upgrade——link创建一个损坏的数据库

  我们创建第二个集群initdb:

  然后我们编辑postgresql.conf并选择一个不同的端口号。关闭原始集群后,我们以链接模式运行“升级”:

  pg_upgrade重命名旧集群的控制文件,以免误启动。我们将撤消它:

  现在我们可以启动两个集群并pgbench在两者上运行。很快我们就会看到类似的错误信息

  发生了什么?由于两个集群共享相同的数据文件,我们设法在相同的数据文件上启动了两台服务器。这会导致数据损坏。

  通过操作数据文件创建一个损坏的数据库

  为此,我们找出属于pgbench_accounts表的文件名:

  现在我们停止服务器并将一些垃圾写入第一个数据块:

  然后我们启动服务器并尝试从表中选择:

  发生了什么?我们篡改了数据文件,因此表损坏也就不足为奇了。

  用目录修改创建一个损坏的数据库

  谁需要ALTER TABLE来删除表列?我们可以直接运行

  之后,再查询这张表就会报错:

  发生了什么事?我们忽略了在pg_attribute中删除一列会将attisdrop设置为TRUE,而不是实际删除条目。此外,我们没有检查pg_depend中的依赖关系,也没有正确地锁定表以防止并发访问。不支持修改编目表,如果它破坏了数据库,则必须保留这两部分。

  结论

扬州数据恢复

  我们已经看到了几种破坏PostgreSQL数据库的方式。其中一些是显而易见的,一些可能会让初学者感到惊讶。如果你不想数据库损坏,

常州数据恢复

  不要打乱系统目录

  永远不要修改数据目录中的任何内容(配置文件除外)

  不要使用fsync = off运行

  不要在崩溃的服务器上调用pg_resetwal -f

  使用pg_upgrade——link进行升级后移除旧集群

  不要删除或省略backup_label

  运行支持的PostgreSQL版本以避免已知的软件错误

  在可靠的硬件上运行

  原文链接:https://www.cybertec-postgresql.com/en/how-to-corrupt-your-postgresql-database/

  PG考试咨询

  2022年中国PostgreSQL考试认证开班计划PGCCC,公众号:PostgreSQL考试认证中心通知:2022年中国PostgreSQL考试认证计划

  2022新春限时特价PGCCC,公众号:PostgreSQL考试认证中心通知:2022新春限时特价

  冬奥会纪念币(每套20枚装)免费领取中...PGCCC,公众号:PostgreSQL考试认证中心冬奥会纪念币(每套20枚装)免费领取中...

  永远都不晚:PostgreSQL认证专家(培训考试-广州站)PGCCC,公众号:PostgreSQL考试认证中心永远都不晚:PostgreSQL认证专家(培训考试-广州站)开班通知-PCP认证专家(上海站)培训开班1106PGCCC,公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(上海站)培训开班1106

  PostgreSQL-PCP认证专家-北京站-精彩花絮PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)(10月16日北京站)精彩花絮

  PostgreSQL-PCP认证专家-成都站公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(成都站)培训开班1016

  PostgreSQL-PCP认证专家考试-北京站-考试风采PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)-北京站-成功举办

  PostgreSQL-PCA认证考试-贵阳站-考试风采PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCA+PCP认证考试在贵阳成功举办

  PostgreSQL-PCP认证专家考试-上海站-考试风采PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCP认证考试(上海站)成功举办

  PostgreSQL认证专家考试-学员考试总结薛晓刚,公众号:PostgreSQL考试认证中心难考的PostgreSQL认证考试

  PostgreSQL-PCM认证大师考试-天津站-考试风采PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL-PCM认证大师考试(天津站)成功举办

  如何在工业和信息化部教育与考试中心官网查询证书PG考试认证中心,公众号:PostgreSQL考试认证中心如何在工业和信息化部教育与考试中心查询PostgreSQL证书

  中国PostgreSQL考试认证体系PG考试认证中心,公众号:PostgreSQL考试认证中心中国PostgreSQL考试认证体系

  电话咨询