MySQL系列(4):mysqld解析之初始化

MySQL初始化流程详解
本文深入解析MySQL的初始化过程,涵盖命令加载、系统变量初始化、参数调整及performance_schema配置。通过源码分析,揭示了SQL命令的存储机制、系统变量的哈希表结构,以及关键参数如max_connections和table_cache_size的计算逻辑。

引言

上一节介绍了从命令行和配置文件加载配置参数,这一节介绍其它的初始化逻辑。可以学习的数据结构有链表和哈希,可以关注的内容有table_def_size/table_cache_size/max_connections/requested_open_files等参数的计算方式,另外有需要可自行深入学习performance_schema。

源码分析

初始化命令

init_sql_statement_names();

这里作用是将命令存储在sql_statement_names全局数组里,命令种类可以参考my_sqlcommand.h,这里定义了enum_sql_command枚举类型,如下:

enum enum_sql_command {
  SQLCOM_SELECT,
  SQLCOM_CREATE_TABLE,
  SQLCOM_CREATE_INDEX,
  SQLCOM_ALTER_TABLE,
  SQLCOM_UPDATE,
  SQLCOM_INSERT,
  SQLCOM_INSERT_SELECT,
  SQLCOM_DELETE,
  SQLCOM_TRUNCATE,
  SQLCOM_DROP_TABLE,
  SQLCOM_DROP_INDEX,
  SQLCOM_SHOW_DATABASES,
  SQLCOM_SHOW_TABLES,
  SQLCOM_SHOW_FIELDS,
  SQLCOM_SHOW_KEYS,
  SQLCOM_SHOW_VARIABLES,
  SQLCOM_SHOW_STATUS,
  SQLCOM_SHOW_ENGINE_LOGS,
  SQLCOM_SHOW_ENGINE_STATUS,
  SQLCOM_SHOW_ENGINE_MUTEX,
  SQLCOM_SHOW_PROCESSLIST,
  SQLCOM_SHOW_MASTER_STAT,
  SQLCOM_SHOW_SLAVE_STAT,
  SQLCOM_SHOW_GRANTS,
  SQLCOM_SHOW_CREATE,
  SQLCOM_SHOW_CHARSETS,
  SQLCOM_SHOW_COLLATIONS,
  SQLCOM_SHOW_CREATE_DB,
  SQLCOM_SHOW_TABLE_STATUS,
  SQLCOM_SHOW_TRIGGERS,
  SQLCOM_LOAD,
  SQLCOM_SET_OPTION,
  SQLCOM_LOCK_TABLES,
  SQLCOM_UNLOCK_TABLES,
  SQLCOM_GRANT,
  SQLCOM_CHANGE_DB,
  SQLCOM_CREATE_DB,
  SQLCOM_DROP_DB,
  SQLCOM_ALTER_DB,
  SQLCOM_REPAIR,
  SQLCOM_REPLACE,
  SQLCOM_REPLACE_SELECT,
  SQLCOM_CREATE_FUNCTION,
  SQLCOM_DROP_FUNCTION,
  SQLCOM_REVOKE,
  SQLCOM_OPTIMIZE,
  SQLCOM_CHECK,
  SQLCOM_ASSIGN_TO_KEYCACHE,
  SQLCOM_PRELOAD_KEYS,
  SQLCOM_FLUSH,
  SQLCOM_KILL,
  SQLCOM_ANALYZE,
  SQLCOM_ROLLBACK,
  SQLCOM_ROLLBACK_TO_SAVEPOINT,
  SQLCOM_COMMIT,
  SQLCOM_SAVEPOINT,
  SQLCOM_RELEASE_SAVEPOINT,
  SQLCOM_SLAVE_START,
  SQLCOM_SLAVE_STOP,
  SQLCOM_START_GROUP_REPLICATION,
  SQLCOM_STOP_GROUP_REPLICATION,
  SQLCOM_BEGIN,
  SQLCOM_CHANGE_MASTER,
  SQLCOM_C
MySQL 安装过程中,配置文件初始化失败是一个较为常见的问题,通常与 `my.ini` 或 `my.cnf` 文件中的设置不当有关。以下是解决此类问题的详细方法: ### 配置文件初始化失败的排查与修复方法 1. **检查 `my.ini` 文件路径与内容** 确保 `my.ini` 文件的路径正确,并且文件内容没有语法错误。MySQL 安装时会查找默认的配置文件路径,如果找不到或文件损坏,可能导致初始化失败。 - 如果不确定配置文件位置,可以在命令行中使用如下命令查找: ```bash mysqld --verbose --help | grep -A 1 "Default options" ``` - 检查 `my.ini` 文件中是否存在拼写错误、不支持的配置项或格式错误。 2. **注释掉或修正 `datadir` 配置项** 如果 `my.ini` 中的 `datadir` 设置不正确,例如指向不存在的目录或权限不足,可能导致初始化失败。可以尝试在配置文件中注释掉该行: ```ini # datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data ``` 然后让 MySQL 自动选择默认的数据目录,或手动指定一个有效的路径[^2]。 3. **修改字符集配置** 有时字符集配置不当也会导致初始化失败。可以尝试将 `my.ini` 文件中的字符集设置为 `utf8mb4`,以兼容更多字符集需求: ```ini [client] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` 4. **确保路径中无特殊字符或空格** MySQL 对安装路径和配置文件中指定的路径非常敏感,若路径中包含空格或特殊字符(如中文、`#`、`&` 等),可能导致解析失败。建议使用如下格式的路径: ```ini basedir=C:/mysql datadir=C:/mysql/data ``` 5. **检查端口设置与冲突** 确保 `my.ini` 中配置的端口(默认为 `3306`)未被其他服务占用。如果端口冲突,可以在配置文件中修改为其他端口号: ```ini [mysqld] port = 3307 ``` 6. **查看 MySQL 错误日志获取详细信息** 如果初始化失败,MySQL 通常会在错误日志中记录具体原因。日志路径可在 `my.ini` 中查找,或通过如下命令获取: ```bash mysqld --verbose --help | grep log_error ``` 查看日志内容后,可以根据具体错误信息进行修复。 7. **以管理员身份运行安装命令** 权限不足也可能导致配置文件初始化失败。建议在命令行中以管理员身份运行 MySQL 初始化命令: ```bash mysqld --initialize --console ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值