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

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()处理每一个参数。
分享到:
评论

相关推荐

    MyBatis源码分析.pdf

    MyBatis源码分析 MyBatis是一款流行的Java持久层框架,提供了强大的数据库访问能力,本文将对MyBatis的源码进行深入分析,从而帮助读者更好地理解MyBatis的工作机理。 1. MyBatis入门 MyBatis是一款基于Java的...

    MySQL配置文件详解

    ### MySQL配置文件详解 在深入探讨`MySQL`配置文件中的各项参数之前,我们先了解配置文件的基本结构及其重要性。`MySQL`配置文件通常命名为`my.cnf`或`my.ini`,根据不同的操作系统可能存放在不同的目录下,如`/etc...

    CentOS7 源码安装MySQL5.6

    ### CentOS7 源码安装 MySQL 5.6 详细步骤及知识点解析 #### 一、准备工作:安装必要的依赖包 在正式安装 MySQL 5.6 之前,我们需要确保系统中已经安装了一些编译工具和其他必备组件。这些工具主要用于帮助我们...

    php5与mysql5 web开发详解 源码

    通过学习和分析这个源码包,你可以深入了解PHP5和MySQL5的交互方式,掌握Web开发中的数据处理技巧,以及如何构建动态、响应式的Web应用程序。同时,这也是提升自己在Web开发领域技能的好机会,能够更好地理解和运用...

    jsp+mysql 博客源码

    【JSP+MySQL博客系统详解】 在Web开发领域,JSP(JavaServer Pages)与MySQL是一种常见的组合,用于构建动态网站,尤其是博客平台。JSP是Java的一种视图技术,可以方便地创建动态网页,而MySQL则是一款广泛使用的...

    php+mysql oa办公系统源码

    - 配置文件:定义系统参数、路由规则等。 - 图片和其他资源文件:如logo、图标等。 要深入理解并运用这个OA系统源码,需要具备PHP编程基础、MySQL数据库知识,以及了解MVC(Model-View-Controller)设计模式。通过...

    mysql-8.0.15源代码

    - 深入这部分源码有助于理解如何配置和管理用户权限,以及如何确保数据库安全。 8. **JSON支持**: - MySQL 8.0增强了对JSON数据类型的支持,这涉及到解析和操作JSON文档的源码。 - 通过分析这部分代码,可以...

    基于Python实现用于解析和转换 MySQL 二进制日志(binlog)的工具源码

    - **启用与配置**:通过修改my.cnf配置文件,可以开启或调整binlog的相关参数,如`log-bin`用于开启binlog,`binlog_format`设置格式。 2. **Python解析MySQL binlog** - **Python库**:Python中有多个库支持解析...

    基于SSM+MySQL网络投票系统项目程序源码

    2. `src/main/resources`:放置配置文件,如Spring的beans.xml、MyBatis的mybatis-config.xml以及数据库的配置文件等。 3. `src/main/webapp`:Web应用的根目录,包含WEB-INF、静态资源(如CSS、JavaScript)、JSP...

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

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

    geoserver-2.5.2-mysql-plugin.zip

    3. **mysql-readme.txt**:这是一个包含关于MySQL数据库连接和配置的说明文件,通常会提供一些连接字符串的示例和配置建议,对于初次使用者来说非常有用。 4. **LICENSE.txt**:包含了这些软件组件的许可协议信息,...

    mysql安装脚本

    - 使用`cmake`对MySQL源码进行配置,设置了一系列参数,例如安装路径、数据目录、字符集、存储引擎等。 - 配置完成后会进入一个名为`source_download`的目录,但这里并没有继续操作,而是直接返回上一级目录重新...

    php+mysql在线考试源码

    在提供的压缩包中,文件"05"可能是源代码的一部分,可能包含PHP文件、数据库配置文件、样式表、脚本等。通常,源码会按照MVC(Model-View-Controller)架构组织,包括: 1. Model层:处理数据逻辑,如与数据库的...

    适合新手学习的PHP+MySQL做的CMS源码

    **PHP+MySQL CMS源码详解** 在这个开源的CMS(内容管理系统)源码中,我们可以深入学习PHP编程语言和MySQL数据库管理系统的结合应用。对于初学者来说,这是一个理想的起点,可以帮助他们快速理解Web开发的基本概念...

    人力资源管理系统源码+SQL文件(javaweb+MySQL+tomcat)

    如果项目确实采用了SSH框架,那么源码中应该能看到相应的配置文件和实体类。 在系统设计上,人力资源管理系统通常包括员工信息管理、招聘管理、考勤管理、薪酬福利、培训发展等多个模块。每个模块都对应特定的业务...

    CentOS5.5_MySql_5.1.49的安装、优化及安全设置

    - **配置文件**: `my.cnf` 位于 `/mysql` 目录下。 - **配置参数详解**: - `--prefix`: 指定 MySQL 的安装路径。 - `--localstatedir`: 数据文件存放路径。 - `--sysconfdir`: 配置文件路径。 - `--with-unix-...

    人才招聘系统PHP+MySQL源码

    要运行这个PHP云人才招聘系统V3.1_正式版,你需要遵循提供的操作说明,配置好服务器环境,包括PHP和MySQL的安装及配置,然后导入数据库文件,设置好系统参数,最后将源代码上传至服务器并进行简单的调试。...

    JSP+MYSQL实现的简易论坛源码

    **JSP+MySQL简易论坛源码详解** 在Web开发领域,JavaServer Pages(JSP)与MySQL数据库的结合是常见的技术栈,尤其适用于构建动态、数据驱动的网站。本简易论坛源码就是一个典型的实例,它提供了基础的用户交互功能...

    Linux平台下Snort_IDS源码安装和配置详解.pdf

    - Apache的安装步骤包括解压缩、配置编译选项、执行编译安装,并修改配置文件以指定服务器IP。 - MySQL的安装涉及到解压、配置、编译安装、初始化数据库和设置用户权限。 - PHP的安装则需要先安装其依赖的库文件...

Global site tag (gtag.js) - Google Analytics