`
BucketLi
  • 浏览: 190469 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
5a76a659-f8e6-3bf3-b39a-8ae8f7a0f9d9
Percolator与分布...
浏览量:5563
社区版块
存档分类
最新评论

MySQL源码分析(3):配置文件详解(转)

 
阅读更多
原文地址:http://software.intel.com/zh-cn/blogs/2010/09/01/mysql3/

1.配置文件详解
关于配置文件存放位置和优先级
在一次部署中,我们发现MySQL没有按照配置文件中的innodb_data_path选项创建文件,查找后发现这台机器上有多个配置文件:/etc/my.cnf和/etc/mysql/my.cnf,而MySQL会优先读取/etc/mysql/my.cnf。当出现多个配置文件时,其优先级是如何确定的?源码面前,了无秘密。

用kDbg跟踪调试发现MySQL对系统中各处配置文件的优先级处理如下:

//mysys/default.c
//406行
int load_defaults(const char *conf_file, const char **groups,int *argc, char ***argv)

//这里其实只是包了一层,调用另一个函数。
//450行 
int my_load_defaults(const char *conf_file, const char **groups,int *argc, char ***argv, const char ***default_directories)


函数中段调用init_default_directories,获得程序初始化时将会尝试读取配置文件的所有目录,共五个,依次为:

1. /etc
2. /etc/mysql
3. $BASEDIR/mysql
4. cur_dir
5. ~/

在506行调用了一个函数my_search_option_files,其定义为:
int my_search_option_files(const char *conf_file, int *argc, char ***argv,uint *args_used, Process_option_func func,void *func_ctx, const char **default_directories)


此函数的第259行:for (dirs= default_directories ; *dirs; dirs++)
配置文件优先级在此体现,即使前面的配置文件中设置了选项,也会被后面配置中设定的值覆盖。例如在/etc/my.cnf中设定key_bufer_size=200M,但在/etc/mysql/my.cnf中又设定了key_buffer_size=300M,那么最终MySQL启动时将以后者为准。

2.几个重要的配置参数
--datadir: 数据文件的存放路径。
--basedir: mysql: 安装路径。
--concurrent_insert: 默认情况下(AUTO)mysql允许对MyISAM引擎的select和insert操作并行执行。
--key_buffer_size: 指定缓存key index用的cache大小。
--table_open_cache: 所有threads打开的table数量。
--sort_buffer_size: 每个线程都需要分配一个排序缓存,用于ORDER BY或GROUP BY。
--read_buffer_size: 每个线程对表做scan操作时需要分配这样的缓存,需要是4k的倍数。
--read_rnd_buffer_size: Sort_buffer中的数据被按照Key排序,此时MySQL会从中取出一部分数据按照物理磁盘上行指针的顺序排列并放入read_rnd_buffer中。
--thread_cache_size: 服务端可以重新使用的线程数。当一个客户端连接线程结束工作时,会被放入该缓存中以备重用。
--tmp_table_size: 可以使用的最大内存中的临时表。
--query_cache_size: 缓存查询结果的内存使用量,默认为禁止(0)

在mysqld.cc中定义了所有可配置的服务端参数:
enum options_mysqld{
    OPT_ISAM_LOG=256,            OPT_SKIP_NEW,
    OPT_SKIP_GRANT,              OPT_SKIP_LOCK,
    OPT_ENABLE_LOCK,             OPT_USE_LOCKING,
    OPT_SYNC_RELAY_LOG_INFO,
    OPT_SYNC_MASTER_INFO
}


当MySQL启动时,会接受命令行和配置文件中的参数值:
if (init_common_variables(MYSQL_CONFIG_NAME, argc, argv, load_default_groups))
    unireg_abort(1);


init_common_variables会调用my_load_defaults,该函数会从配置文件中读取参数值并将其放到通过命令行参数传递进来的值的前面,从而使得命令行参数可以覆盖配置文件中的参数。
接着会调用get_options()从合并后的argc, argv[]中解析出参数值,最后程序调用libmysql/my_getopt.c中的handle_options,此函数会跟stuct my_option中的参数比较,如果有模糊或错误的参数则返回错误,否则调用mysqld_get_one_option()处理每一个参数。
分享到:
评论

相关推荐

    c3p0-demo:原始文件详解系列(五)------ C3P0的使用和分析(包括JNDI)

    本文将包含以下内容(因为篇幅范围,可根据需要选择阅读): c3p0的使用方法(入门案例, JDNI使用) c3p0的配置参数详解c3p0主要源码分析使用示例-入门需求使用C3P0连接池获取连接对象,对用户数据进行简单的增删改...

    php课程(共100多节)

    3:常用PHP运算类型介绍与应用 4: PHP条件语句介绍与应用 5:PHP循环语句的介绍与应用 6:PHP数组的创建修改应用 7:PHP函数和自定义函数 8:Mysql 简介和创建新的数据库 9:数据库中的常用SQL语句 10:MYSQL在PHP5...

    积分管理系统java源码-druid-demo:源码详解系列(六)------Druid的使用和分析

    druid主要源码分析 其他连接池的内容也可以参考我的其他博客: 使用例子-入门 需求 使用druid连接池获取连接对象,对用户数据进行简单的增删改查(sql脚本项目中已提供)。 工程环境 JDK:1.8.0_231 maven:3.6.1 ...

    Java思维导图xmind文件+导出图片

    基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读 Dubbo 使用Dubbo对单一应用服务化改造 ...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程3:常用PHP运算类型介绍与应用 PHP100视频教程4: PHP条件语句介绍与应用 PHP100视频教程5:PHP循环语句的介绍与应用 PHP100视频教程6:PHP数组的创建修改应用 PHP100视频教程7:PHP函数和自定义...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    主机管理项目提取yaml配置文件_ 主机管理项目动态调用插件进行数据解析 主机管理项目对模块中的参数进行解析 第24周 本节题纲 上节内容回顾 ModelForm操作及验证 ajax操作-原生ajax ajax操作-JQuery的ajax ajax...

    开涛高可用高并发-亿级流量核心技术

    12.2.2 HttpClient连接池源码分析 240 12.2.3 HttpClient 4.2.3配置 241 12.2.4 问题示例 243 12.3 线程池 244 12.3.1 Java线程池 245 12.3.2 Tomcat线程池配置 248 13 异步并发实战 250 13.1 同步阻塞调用 251 13.2...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 socketserver源码分析tcp版本 05 socketserver源码分析udp版 06 ftp作业要求讲解 07 补充:认证客户端链接合法性 第32章 01 FTP之参数解析与命令分发 02 FTP之逻辑梳理 03 FTP之验证功能 05 FTP之文件上传 06 ...

    Eclipse开发入门与项目实践 源代码

    案例7-3 借助SWT/JFace中实现文件阅读器 259 7.5 SWT/JFace中的线程 264 案例7-4 在SWT/JFace中实现多线程效果 265 第8章 Eclipse中插件开发 273 8.1 Eclipse插件开发简介 273 案例8-1 Eclipse中插件...

    asp.net知识库

    革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建...

    java面试题及技巧3

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    jpivot学习总结.doc

    在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的配置文件外,我们需要在 JSP 头的位置声明对 JPivot 标签库的引用,引用方法如下: <%@ taglib uri = "http://...

    java面试题以及技巧

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题目与技巧1

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题及技巧4

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题以及技巧6

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

Global site tag (gtag.js) - Google Analytics