当前位置: 首页 > news >正文

Linux系统时间不对导致mysql初始化失败:Data Dictionary initialization failed.(数据字典版本验证失败)

文章目录

  • 问题描述
  • 分析
    • **问题原因分析**
    • **解决方案**
      • **1. 修正系统时间**
      • **2. 检查数据目录完整性**
      • **3. 重新初始化数据目录**
      • **4. 调整 MySQL 配置**
    • **验证与后续步骤**
    • **注意事项**
  • 其他说明

问题描述

mysql数据初始化失败,发现系统时间是1970年,我将系统时间改成2025年,就能初始化成功了。

1970-01-01T01:44:08.999267Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33)  MySQL Community Server - GPL.
1970-01-01 09:45:01+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
1970-01-01 09:45:01+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
1970-01-01 09:45:01+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/mysqld.cnf' is ignored.
1970-01-01T01:45:03.045951Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
1970-01-01T01:45:03.049185Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33) starting as process 1
1970-01-01T01:45:03.053492Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
1970-01-01T01:45:03.053523Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
1970-01-01T01:45:03.074083Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
1970-01-01T01:45:03.338899Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
1970-01-01T01:45:03.348297Z 1 [ERROR] [MY-011096] [Server] No data dictionary version number found.
1970-01-01T01:45:03.348883Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
1970-01-01T01:45:03.349101Z 0 [ERROR] [MY-010119] [Server] Aborting
1970-01-01T01:45:03.949729Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33)  MySQL Community Server - GPL.
1970-01-01 09:46:04+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
1970-01-01 09:46:05+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
1970-01-01 09:46:05+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/mysqld.cnf' is ignored.
1970-01-01T01:46:06.744074Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
1970-01-01T01:46:06.747196Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33) starting as process 1
1970-01-01T01:46:06.751486Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
1970-01-01T01:46:06.751518Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
1970-01-01T01:46:06.771748Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
1970-01-01T01:46:07.034656Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
1970-01-01T01:46:07.044106Z 1 [ERROR] [MY-011096] [Server] No data dictionary version number found.
1970-01-01T01:46:07.044737Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
1970-01-01T01:46:07.044811Z 0 [ERROR] [MY-010119] [Server] Aborting
1970-01-01T01:46:07.644094Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33)  MySQL Community Server - GPL.
1970-01-01T01:46:06.771748Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
1970-01-01T01:46:07.034656Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
1970-01-01T01:46:07.044106Z 1 [ERROR] [MY-011096] [Server] No data dictionary version number found.
1970-01-01T01:46:07.044737Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
1970-01-01T01:46:07.044811Z 0 [ERROR] [MY-010119] [Server] Aborting

分析

根据你提供的日志和描述,系统时间错误确实可能导致 MySQL 初始化失败。以下是详细分析和解决方案:


问题原因分析

  1. 系统时间错误

    • 日志中显示的时间戳为 1970-01-01(Unix 时间起点),表明系统时间未正确配置。MySQL 在初始化时会依赖系统时间进行以下操作:
      • 数据字典版本验证:MySQL 8.0 引入了新的数据字典(Data Dictionary),其元数据包含版本信息。如果系统时间错误(如设置为 1970 年),MySQL 可能无法正确解析这些信息,导致 No data dictionary version number found 错误。
      • 文件时间戳一致性:MySQL 初始化时会检查数据目录中文件的时间戳。若系统时间错误,可能导致 MySQL 认为文件时间早于预期,从而触发初始化失败。
  2. 配置或数据损坏

    • 如果系统时间错误导致 MySQL 无法正确读取数据目录中的文件(如 ibdata1ib_logfile* 等),可能引发数据字典初始化失败。即使系统时间修正后,仍需检查数据目录是否损坏。

解决方案

1. 修正系统时间

  • 临时修改(仅用于测试):
    # 设置正确的时间和时区
    sudo date -s "2025-06-20 15:35:00"
    sudo timedatectl set-timezone Asia/Shanghai
    
  • 永久同步时间(推荐):
    安装并启用 NTP 服务,确保系统时间自动同步:
    # 安装 NTP
    sudo apt install ntp  # Debian/Ubuntu
    sudo yum install ntp  # CentOS/RHEL# 启动并启用 NTP 服务
    sudo systemctl enable ntp --now
    

2. 检查数据目录完整性

  • 手动检查数据目录
    确保 MySQL 数据目录(通常是 /var/lib/mysql)权限和文件完整性:

    sudo chown -R mysql:mysql /var/lib/mysql
    sudo chmod -R 750 /var/lib/mysql
    
  • 修复数据文件
    如果数据目录损坏,可以尝试使用 mysqlcheck 工具修复:

    sudo mysqlcheck --all-databases --check-upgrade --auto-repair -u root -p
    

3. 重新初始化数据目录

如果上述方法无效,可能需要重新初始化数据目录:

  1. 备份现有数据(如有必要):

    sudo cp -r /var/lib/mysql /var/lib/mysql_backup
    
  2. 删除旧数据目录

    sudo rm -rf /var/lib/mysql/*
    
  3. 重新初始化

    sudo mysqld --initialize --user=mysql
    
  4. 启动 MySQL

    sudo systemctl start mysql
    

4. 调整 MySQL 配置

  • 避免使用过时的字符集配置
    日志中提示 utf8 将在未来版本中映射到 utf8mb4。更新 my.cnf 配置文件:

    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    
  • 移除废弃参数
    日志中提示 --skip-host-cache 已弃用,替换为:

    SET GLOBAL host_cache_size = 0;
    

验证与后续步骤

  1. 检查 MySQL 日志
    查看 /var/log/mysql/error.log/var/log/mysqld.log,确认是否仍有错误。

  2. 测试数据库连接

    mysql -u root -p -e "SHOW DATABASES;"
    
  3. 监控系统时间
    使用 ntpstattimedatectl 确保系统时间同步:

    timedatectl
    

注意事项

  • 避免手动修改系统时间:长期依赖手动修改时间可能导致其他服务异常(如证书验证失败、日志混乱等)。务必使用 NTP 自动同步。
  • 备份数据:在重新初始化数据目录前,务必备份重要数据。
  • 升级 MySQL:如果你使用的是较旧版本(如 8.0.33),建议升级到最新版本以修复潜在问题。

如果问题仍未解决,请提供完整的 MySQL 错误日志和 my.cnf 配置文件内容,以便进一步排查。

其他说明

上海107 ubuntu22.04 算能盒子硬件时钟是有电的,能够取得时间,但是初始时间未设置,为1970年,导致mysql数据初始化时失败。

猜测之前的英伟达盒子,可能系统启动的时候做了个判断,如果硬件时间是1970年附近,就把硬件时钟设置为2023年2月,所以一直没问题。

http://www.lqws.cn/news/458587.html

相关文章:

  • 【案例分享】如何用 DHTMLX Scheduler 构建灵活高效的资源调度系统?
  • Vue 比较两个数组对象,页面展示差异数据值
  • 1.22Node.js 中操作 Redis
  • 党建赋能 医校协同|广州附医华南医院与湖南中医药高等专科学校签约携手共育英才
  • Unity3D仿星露谷物语开发67之创建新的NPC
  • HTTP Server
  • 基于RISV-V的矿业网关,支持矿鸿等国产系统
  • 树莓派倾斜传感器实验指导书
  • 为什么你的vue项目连接不到后端
  • Linux 内核同步管理全解:原理 + 实战 + 考点
  • 【服务器R环境架构】基于 micromamba下载 R 库包
  • 企业实践 | 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装指南
  • 无人机吊舱热成像伪彩模式设计分析
  • Hadoop 技术生态体系
  • 如何填写“appium inspector”内容?
  • RAG工程落地:处理文档中表格数据
  • “地标界爱马仕”再启:世酒中菜联袂陈汇堂共筑新会陈皮顶奢产业
  • @annotation:Spring AOP 的“精准定位器“
  • 【MySQL数据库 | 第八篇】DQL语句 - 基础/条件查询
  • 20250620在荣品的PRO-RK3566开发板的Android13系统的uboot阶段就拉高GPIO2C6【driver模式】
  • 分布式ID生成利器:Snowflake UUID原理解析与实践
  • Lua 事务双写、RedisGears 异步双写、零停机索引迁移与容量预估
  • 数据结构第八章(六)-置换选择排序和最佳归并树
  • qt集成openssl
  • 大白话说目标检测中的IOU(Intersection over Union)
  • 数据结构-顺序表-数值统计
  • 「Linux文件及目录管理」硬链接与软连接
  • 学习笔记丨AR≠VR:透视沉浸式技术的“虚实象限”法则
  • c++系列之特殊类的设计
  • 在 macOS 上部署 Akash Network 的完整 Shell 脚本解决方案