Troubleshooting MySQL crash when FLUSH PRIVILEGES

近期在客户执行 MySQL 用户创建及授权操作时,数据库实例发生异常。经排查确认,原因为 MySQL 权限表损坏,导致权限变更操作触发实例异常。

考虑到数据库规模约 80GB,为保证恢复效率与稳定性,采用业务数据逻辑导出、新建数据库并重建用户权限后再导入数据的方式完成恢复。数据库运行正常业务恢复。

测试主流数据库允许同一列(column)上创建重复索引?

之前在《有哪些技术可以减少PostgreSQL/openGauss数据库的存储空间?》记录过,在PG系的数据库上是支持同一列上创建多个索引,这种既浪费存储又增加了更新列时的额外的写代价,日常巡检需要即使发现并清理,下面再测试oracle,mysql(goldendb等),Gaussdb(opengauss系),Kingbase(Postgresql系),oceanbase,达梦,崖山的情况。

MySQL 多表关连时优化器缺陷出现的错误Join order(续)

前几天写过一篇,记录了mysql在多表join时,在清理了其中一个表部分记录后,优化器因为局部的cost估算产生了错误的join order,后来和同事讨论,这里显示MySQL的另一个问题,MySQL的统计信息来自索引,无索引列在MySQL 8.0前或在8.0后没有手动创建列直方图(Histogram),优化器是无法准确估算选择性的。下面我们继续上一篇的测试用例继续。

MySQL Insert Duplicate entry报错但仍持有record S共享锁,可能导致deadlock

MySQL中一个经典的并发场景。当发生 Duplicate entry 错误时,事务仍然持有 S锁(共享锁),这在某些情况下确实可能导致死锁。这现象在Oracle中并不存在,在MySQL无论事务隔离级别是REPEATABLE READ还是READ COMMITTED都存在这个问题,2个会话相同的SQL可能就会导致死锁的现象,如有些业务习惯在一个事务先insert 再update 同一记录。

MySQL 5.7 memory_global_total view 内存使用不真实

有时做数据库监控像内存使用率,希望可以从数据库中使用SQL更加方便,在MySQL及同系的国产数据库(如GoldenDB)中同样有视图memory_global_total和sys.memory_global_by_current_bytes, 但是在早期的MySQL 5.7存在bug 可能会导致查询视图与ps、top操作系统级看到的相差很多。

MySQL安全等保的一些安全项

在开展安全加固或等级保护相关工作的过程中,我个人倾向于保持一种务实的态度。这并非是对安全本身有任何异议,而是注意到部分安全厂商所提供的整改建议,有时过于注重形式化要求,可能在实际运维中引入“无效”成本,甚至影响系统稳定性。例如,在某些场景下,安全扫描工具本身就可能引发服务异常,这类情况在实际运维中并不少见。

索引key长度限制Oracle、MySQL、PostgreSQL

近期在推进一个从 Oracle 迁移至 PostgreSQL 的项目时,我们遇到部分在 Oracle 中运行正常的索引无法在 PostgreSQL 中创建,系统报错:ERROR: index row size X exceeds maximum Y for index “index_name”。

经分析,这源于不同数据库对索引键(Index Key)长度的上限设计存在差异。为规避此类问题并助力迁移规划,我们特此整理了 Oracle, MySQL, PostgreSQL 三大主流数据库的索引键长度限制。

Video Training: 数据库安全运维注意事项

数据堪称企业的生命线,任何一次不经意的操作失误都可能引发千万级别的经济损失,甚至招致法律上的责任追究。在今天的分享中,我将从规章制度、技术保障以及人员管理三个维度出发,为大家详细解读——无论是面对从Oracle到国产数据库的运维转型,还是探索国产数据库特有的安全机制时,我们应当注意的关键事项。同时,我们也会探讨在利用大型模型进行知识问答过程中可能出现的风险及其防范措施,旨在帮助大家构建坚固的数据安全防线,确保企业数据资产的安全与稳定。

GoldenDB 分布式数据字典不一致修复ERROR 3508

GoldenDB作为分布式数据库,数据字典和元数据损坏属于严重故障,需谨慎处理。如果是主备架构,可能优先考虑切换主备,用备库恢复,这样可以减少停机时间。近期在做partition table的add 维护时,遇到了一个案例,版本 GoldenDB-ALL-DBCLUSTERV6.1.03.07SP5.r4895784, 报错信息如下

ERROR 3508 (HY000): Dictionary object id (xxx) does not exist.(Proxyid:1 Clusterid:1 Groupid:xx DBid:xx);part of DDL may succeed,please manual recovery!

如何跟踪MySQL DDL重构进度?

在MySQL中有些DDL操作可能会导致表重组,如<“alter table ” modify column in Oracle、MySQL、PostGreSQL(数据库比较系列十三)>,如果表较大时,可能重组需要等待很久的时间,有没有什么方法可以跟踪一下DDL的进度呢?

MySQL的字符集 character_set相关配置

在 MySQL 中,character_set 配置用于指定数据库、表、列或连接的字符集。字符集决定了如何存储和检索字符数据,例如 UTF-8、latin1 等。MySQL 中有八个与 character_set 相关的配置选项,如下所示。如果不仔细阅读MySQL字符集文档,可能很难知道这些配置选项的用途。此外,对于某些选项,除非进行进一步测试,否则很难知道 MySQL 如何使用它们。

Migrate oracle to openGauss/oceanbase/达梦/kingbase: md5 function

在十年前简单测试过oracle 9i 的加密解密用法之dbms_obfuscation_toolkit(二),其中有md5单向加密, 最近在oracle迁移到opengauss项目中用到了md5, 这里简单记录替换方案,在pg或og中直接就有md5 function. 在mysql及Mysql系的产品和ocenabse, 达梦一样存在该函数md5。

MySQL Estimate of the duration of a rollback operation(估算rollback事务回滚剩余时间)

很久以前记录过一篇 Oracle Estimate of the duration of a rollback operation (估算rollback事务回滚剩余时间) ,oracle的大事务cancel或kill后的回滚操作,rollback所花费的时间通常比原来的操作还要长,而且在回滚完成前有可能会堵塞其它事务,在PostgreSQL中因为没有使用undo而是多版本,所以忽略rollback的时间,这是PG的强项,但是在MySQL中和oracle一样同样存在回滚问题,这里简单记录如何估算MySQL中的事务回滚时间。