MYSQL-5.7与达梦数据库(DM-DM8)的区别

记得曾经为一个项目使用MYSQL-5 .7 和大盟数据库DM-DM8 进行数据迁移。
就在这个时候,我看到了一个片段。
在 DM 中,我编写了一个简单的查询并想要使用 IDENTITY 字段名称。
我一运行查询就崩溃了。
检查了一段时间,发现DM对关键字处理特别敏感,需要用双引号括起来。
我有点惊讶,因为 MYSQL 不需要这个。

再比如,DM处理字符串时,只识别单引号,双引号直接报错。
在MYSQL中,单引号和双引号都可以。
那天我在私信中做了很多尝试,通过使用单引号来解决这个问题。

另外,关于时间函数,DM不支持一些不常见的格式。
例如,如果您想使用 DATE_FORMAT(NOW(),'%Y-%m-%d2 3 :5 9 :5 9 '),DM ​​将无法识别它,它应该是 %H:%i:%s。
DM 花了很多时间才弄清楚这个细节。

这些差异让我深刻认识到,虽然都是数据库,但品牌之间还是存在很大差异的。
在使用它之前,必须先研究它的特性。
等等,还有一件事。
我突然想到,如果有一天我们能够在数据库层面整合这些差异,那就太好了。

mysqld与mysql的关系到底是怎么样,请说的详细点。

mysqld是服务器程序,MySQL是客户端工具。
mysqld监听3 3 06 端口,数据库只有启动后才能运行。
mysql客户端连接mysqld,通常在命令行上操作。

技术分享 | 数据校验工具 pt-table-checksum

PT-table-checksum,这是Percona Toolkit的宝库。
主要用于检测MySQL主从数据库的数据一致性。
它是如何运作的?简单来说,这种方法就是在主库上执行一条SQL查询来计算一个数据块的校验和,然后在从库上执行相同的查询来比较两个校验和值是否相同。
这就像比较两个人的指纹,看是否出自同一个模子一样。

记得第一次接触这个工具是在2 01 5 年,当时我还在一家互联网公司从事数据库运维工作。
当时我们公司用的是MySQL,使用PT-table-checksum检查主从复制非常方便。

该工具具有特殊功能。
这意味着在处理大型表时性能特别好。
通过将表分成多个部分并逐个检查它们,可以减少复制延迟和服务器负载。
默认块大小目标是 0.5 秒。
这样保证了验证过程高效且不影响数据库的正常运行。

PT-table-checksum也可以应对多种场景。
官方表示,即使面对数千个库和数万亿行数据,它也能表现得非常好。
设计非常简单。
它一次扫描一张表,不需要太多内存或额外工作。

如果发生复制延迟,该工具可能会自动暂停,直到从库赶上主库的计算时间。
用户还可以设置允许的最大延迟。
如果超过该值,则认为数据不一致。

自动检测并连接从数据库,防止工具干扰数据库操作。
如果连接失败,用户可以通过--recursion-method选项指定从库的位置。
还可以自动监控从库的复制状态。
如果从库的复制过程落后,它会暂停直到赶上。
如果从库遇到错误或者复制停止,复制也会暂停等待。

该工具还检查复制过滤器,如果过滤器可能导致问题,则拒绝这样做,除非用户强制它这样做。
它还提供块大小限制,以确保验证在安全范围内执行。

对于行数比较少的表,我们会额外检查从库的大小,避免主服务器上的空表在从服务器上太大,导致验证时长时间延迟。

还将会话级别 innodb_lock_wait_timeout 调整为 1 秒,以避免成为锁定等待的受害者并影响其他查询。
数据库服务器负载也会受到监控,如果负载变得过高,则会暂停。

默认情况下,当同时运行超过 2 5 个查询时,该工具会暂停。
用户可以使用--max-load选项为服务器设置合理的负载阈值。

校验和通常是低优先级操作,必须让步于服务器上的其他操作。
PT-table-checksum 具有强大的功能它是容错的。
如果数据库管理器由于某种原因终止查询,则不会发生致命错误。

用户经常使用 pt-kill 来终止长时间运行的校验和查询。
该工具重试已终止的查询,如果再次失败,则移至下一个块进行确认。
当发生锁等待超时时,也会发生相同的行为。

如果发生错误,该工具会打印警告,但每个表仅打印一次。
如果与服务器的连接失败,它将尝试重新连接并继续工作。

在执行验证任务之前,必须先创建主从架构。
安装MySQL(具体步骤此处省略)。
然后我们使用sysbench建表并同步到从库。
进行验证时,您需要下载并安装PT工具。

检查参数包括--replicate-check和--replicate-check-only。
前者在执行验证查询后立即比较校验和值并输出结果,而后者则查询原始percona.checksums表以获取结果。

--nocheck-binlog-format 选项用于排除日志格式检测。
在ROW模式复制中,确保跨数据库运行相同的验证SQL尤为重要。

最后,使用--replicate选项指定验证结果将存储在哪个数据库表中。
如果不指定,默认存储在 percona.checksums 中。