MySQL酸指南
#安全 #mysql #acid

酸是四个关键数据库属性的一组,即使在发生灾难性服务器故障的情况下,数据完整性和一致性也是如此。了解有关该概念在MySQL中的工作方式的所有信息!

什么是酸?

酸一直是数据库进入聚光灯以来的一件事。酸代表四种对于正确管理数据库至关重要的特性,这些特性如下:

  • 一个代表原子。
  • C代表一致性。
  • 我代表孤立。
  • d代表耐用性。 在每个数据库管理系统中的工作方式不同,但尽管如此,其主要概念保持不变。

Mysql中的酸

在mysql中,酸以下列方式工作:

通过确保交易中的所有语句都是单个单元,并且将其结果视为一个整体或根本看不见的。
通过确保MySQL始终保持日志文件(IB_LOGFILE0和IB_LOGFILE1)并可以在需要时读取它们来确保一致性。
当使用行锁定时,确保隔离。
通过确保MySQL始终维护跟踪其基础架构的所有更改的日志文件来确保耐久性。
酸性原理是数据库功能的已知基石,但它们根本没有设置为石头 - 如果我们修改了我的cnf中的某些参数,则可以将其中一些换成速度(我们将进入一个稍后。)

也值得注意的是,唯一支持MySQL中酸原理的存储引擎是Innodb,其对应的Percona由Percona开发的Xtradb。默认情况下,这两个存储引擎都支持酸原理。

MySQL配置中的酸

MySQL中的所有设置都可以通过修改与mysql my.cnf功能相关的主文件的内容来设置和 /或修改(如果我们将被称为my.ini,如果我们将被称为my.ini重新使用Windows基础架构。)可以根据操作系统在各个位置找到该文件。 /etc/mysql/文件夹。对于Windows用户,一切都更简单:my.ini很可能会在/bin/mysql/mysql*.*.**文件夹中找到。同样的目录以及只有原始的my.ini文件将进行扫描。)


Files in the MySQL Directory.

MySQL目录中的文件。



打开文件后,您会看到许多与MySQL的内部工作相关的设置 - Windows用户很幸运,因为该文件还带有许多注释,以帮助用户了解所有内容的工作原理,而您中使用Linux的人必须阅读文档(或此博客)才能了解一切的工作方式。

这是文件中的某些参数对于使用Windows的某些参数的样子:


The parameters relevant to MySQL.

与MySQL相关的参数。



如您所见,有很多设置,在Windows Mysql中确实可以尽力引导我们浏览它们,甚至提供了文档的链接 - my.cnf to to of of of of of of of of of of of of of of of of of the唯一的设置使用my.cnf的Windows对应物是:


The configuration of MySQL - InnoDB Parameters.

mysql -innodb参数的配置。



好吧,并非所有这些都会发疯 - 但是,您一定会看到以下一些设置:

  • innodb-flush方法
  • innodb-file-pertable
  • innodb-flush-log-at-trx-commit
  • innodb-log-file-size

其中一些与优化MySQL有关高性能的相关,其中一些(file-per-table参数)最好以默认值留下,有些则增加日志文件大小,而有些则是innodb-flush-log-at-trx-commit参数 - 在MySQL及其朋友中使用Percona Server和Mariadb。

Innodb-Flush-log-at-trx-commit

MySQL内的酸主要由此参数控制。此参数的目的是控制mySQL内的酸与速度之间的平衡,因为默认情况下InnoDB(MySQL中的主要存储引擎)将此参数设置为1,始终保持酸。但是,此参数也可以设置为不同的值,例如0或2。最重要的是,如果您一定要处理数百万的行,并且不一定需要更高的速度才能完成插入操作(INSERTLOAD DATA INFILE查询),默认情况下将值留在值。但是,如果您这样做,请记住以下内容:

值为0或2的值将使您的查询更快,以牺牲MySQL在查询故障(电力出局等)时损失一秒钟的交易价值。强>

  • 0的值告诉MySQL,当数据写入日志文件并执行潮红(保存)操作时,MySQL一旦交易提交就不应执行任何操作,从而节省了我们的时间。
  • 1的值将告诉MySQL,一旦数据写入数据库,应将数据写入并保存到日志文件中 - 无论我们去哪里,都意味着酸合规性。
  • 一个值为2的值将告诉MySQL,只有在操作系统崩溃或服务器群中的完整电源中断时,才能在最后几秒钟内写入数据库的数据。

对于大多数人来说,将设置保持在其默认值中 - 但是,对于那些正在进行数据分析的人,或者只是尝试使用RDBMS的功能,更改此设置可能是有益的。明智地选择!

酸与基础

有些人可能会说酸是基于非关系数据库管理系统中酸等效的竞争者。这并不是完全错误的基本代表基本上可用的,最终是一致的数据。对于大多数非关联(NOSQL)数据库,酸模型是过度杀伤的,这就是为什么大多数人都朝着不同的方向发展。基本模型是一个柔和的模型,可为数据提供灵活性,但同时牺牲完整性。

我们将在这里介绍所有细节,但是基本原则是:

  • 基本上可用意味着即使发生故障时也应该可用(数据分布在许多不同的媒介上。)
  • 最终一致意味着,在将来的某个时候,数据应输入一致的状态。这并不总是发生的,因此问题本身本身,但是与酸性数据库相比,这提供了NOSQL数据库。

nosql数据库也以其软状态功能而闻名。软状态本质上说 - 数据完整性是开发人员的问题,而不是数据库的问题。 t恰好是酸的最好的朋友。

与酸和碱有关的问题

酸和碱都解决了不同的问题 - 在服务器故障的情况下,确保数据完整性,而基本为使用数据工作的人提供了更大的灵活性。但是,这两种方法都带有其独特的问题 - 不能确保数据完整性,而酸仅在关系数据库管理系统的某些方面可用(SQL Server,PostgreSQL和TimesCaledB,也可以在MySQL中以及所有中使用它的口味如Percona Server和Mariadb。)

在MySQL中使用酸的人的主要要求是InnoDB或其对应物Xtradb - 没有其他MySQL存储引擎支持这种模型:Myisam是过时的(使用它的唯一真正原因是我们想要更快的COUNT(*)9查询性能是因为Myisam存储了其元数据和其他存储引擎内部的数字,Memore将所有数据存储在数据库的内存中,因此黑洞存储引擎充当了黑洞,我们写给它的所有内容都消失了。等。

Image description


如果您很好奇如何解决与您的关系或非关系数据库基础架构grab a free trial和询问DBVisualizer(认真的the tool is used by NASA, AMD, Netflix, Twitter, Tesla, Uber, and a whole lot of other companies)有关的其他问题,请在一段时间后回到our blog,以在数据库空间中学习更多新闻,直到下一次!

关于作者

卢卡斯·维利基斯(Lukas Vileikis)是一个道德的黑客,也是频繁的会议发言人。他经营着世界上最大,最快的数据泄露搜索引擎之一-BreachDirectory.com,经常在多个地方的会议和博客上讲话,包括他在lukasvileikis.com的博客。