关于 MySQL、PostgresSQL、Mariadb 数据库2038千年虫问题

MySQL

测试时间:2023-8

启动MySQL服务后,将系统时间调制2038年01月19日03时14分07秒之后的日期,发现MySQL服务自动停止。

根据最新的MySQL源码(mysql-8.1.0)分析,sql/sql_parse.cc中依然存在2038年千年虫问题

c++ 复制代码
/*
      If the time has gone past end of epoch we need to shutdown the server. But
      there is possibility of getting invalid time value on some platforms.
      For example, gettimeofday() might return incorrect value on solaris
      platform. Hence validating the current time with 5 iterations before
      initiating the normal server shutdown process because of time getting
      past 2038.
*/
if (tries > max_tries) {
     /*
        If the time has got past epoch, we need to shut this server down.
        We do this by making sure every command is a shutdown and we
        have enough privileges to shut the server down

        TODO: remove this when we have full 64 bit my_time_t support
      */
     LogErr(ERROR_LEVEL, ER_UNSUPPORTED_DATE);
     const ulong master_access = thd->security_context()->master_access();
     thd->security_context()->set_master_access(master_access | SHUTDOWN_ACL);
     error = true;
     kill_mysql();
 }

TODO: remove this when we have full 64 bit my_time_t support:表示直到MySQL完成支持64位时间戳时才移除这个限制

PostgreSQL

测试时间:2023-8

测试版本:psql-10.1、psql-15.4

启动postgresql服务后,将系统时间调制2038年01月19日03时14分07秒之后的日期,psql-15.4版服务正常运行,数据库可以正常读写;但是重启服务postgresql失败(也就是说postgresql在2038年后无法正常启动)。psql-10.1服务直接挂掉,不能使用。

日志分析:


从日志上可以看出,调整时间后,重启postgresql,日志中的记录时间有问题;启动过程中一直报"D:/PostgresSQL/15/share/timezone"目录不存在,这个问题可能是postgresql获取时区出了问题(有可能是系统的问题)。

Mariadb

测试时间:2023-8

测试版本:10.8.8,11.1.2-GA(测试日期的最新版)

现象与PostgreSQL类似,调整时间后能正常读写,但是不能重启。(未分析日志)

从Mariadb的官网上,可以查到旧版计划(5.6版本)中就有用关于解决2038年千年虫问题的计划;好像未彻底实时(Mariadb不存在5.6版本)。

总结

距离下一次千年虫还有15年的时间,但愿MySQL能修复这个问题;不过按照Oracle的德性,不排除到了2038年停止MySQL社区版的维护,强制用户升级到企业版(大赚一笔)。

Mariadb、PostgreSQL 未来几年修复千年虫问题的可能性还是比较大的(毕竟已经修复了一部分),我们尽请期待吧。

相关推荐
嘘神秘用6 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
东北小狐狸-Hellxz8 小时前
Redis 哨兵搭建+ACL权限控制
数据库·redis
研究员子楚9 小时前
GEO行业发展标准体系白皮书V2.0-第09卷 · 适配篇:硅基主权伦理宪章与行业适配宣言
数据库·人工智能·geo
CoderMeijun10 小时前
一条SQL查询语句在MySQL中是如何执行的
mysql·sql执行流程·连接器·mysql架构·索引下推·执行器
l1340620823511 小时前
鸿蒙实战:RDB 数据库设计与 DatabaseService
数据库·华为·harmonyos·鸿蒙系统
山峰哥11 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
谙忆11 小时前
图片版权保护工程实战:明水印、盲水印(DCT隐写)、Referer防盗链与签名URL怎么落地
数据库
KaMeidebaby11 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
xfhuangfu11 小时前
19c CDB架构下的数据库启动和停止
数据库·架构
神道君天下12 小时前
填充与积累:积分与面积的可视化
数据库·oracle