MySQL配置文件浅读

进入MySQL的安装目录(Windows OS),看到几个配置文件,这些都是为了让MySQL工作在不同的环境下而专门做的配置优化。如下:

my-huge.ini    拥有1-2G内存的MySQL服务器

my-large.ini    拥有512M内存的MySQL服务器,另外的my-medium.ini,my-large.ini ,my-large.ini,my-innodb-heavy-4G都是类似的,当然这些只是标准配置,完全可以根据自己的情况修改。

如果在MySQL安装的时候或者安装完成之后运行MySQLInstanceConfig.exe配置一个数据库实例,那么在根目录还会产生my.ini文件,里面的内容就是根据MySQLInstanceConfig的向导式对话框的选择自动生成的。下面来看一下my.ini的详细内容:

1. 服务启动

在windows系统中安装MySQL通常配置成windows服务,然后直接启动服务即可。如果要从命令行启动MySQL服务,那就需要运行这样的命令:

[cpp]  view plain copy
  1. mysqld --defaults-file="XXXX/my.ini"  

参数后面的配置文件就是上面说的那些文件,一般就是使用自己的配置my.ini。我一般都是直接进入到mysql的安装目录下,然后在文件夹的空白处,按住Shift键,然后单击右键,这时右键菜单会出现【open command window here】,单击,命令行会自动进入到当前目录,这个是win7的一个小窍门,这样就不需要单独copy文件夹路径,然后cd或者pushd了。执行mysqld命令后进入任务管理器就可看到mysqld进程了。其实windows的mysql服务也是运行的这个命令,在任务管理器下找到mysqld进程看一下命令行那一栏就知道了。

另外,可以通过

[cpp]  view plain copy
  1. mysqld --install MySQLXY --defaults-file="XXX/my.ini"  

安装为windows服务,然后 net start MySQLXY 启动mysql服务。

2. Client Section

default-character-set=utf8    默认编码格式

使用命令:show variables like '%character%';

 

 

[cpp]  view plain copy
  1. +--------------------------+---------------------------------------------+  
  2. | Variable_name            | Value                                       |  
  3. +--------------------------+---------------------------------------------+  
  4. | character_set_client     | utf8                                        |  
  5. | character_set_connection | utf8                                        |  
  6. | character_set_database   | utf8                                        |  
  7. | character_set_filesystem | binary                                      |  
  8. | character_set_results    | utf8                                        |  
  9. | character_set_server     | utf8                                        |  
  10. | character_set_system     | utf8                                        |  
  11. | character_sets_dir       | D:/Dev/MySQL/MySQLServer5.5/share/charsets/ |  
  12. +--------------------------+---------------------------------------------+  
  13. 8 rows in set (0.13 sec)  

当我修改default-character-set=gb2312时,情况如下:

[cpp]  view plain copy
  1. +--------------------------+---------------------------------------------+  
  2. | Variable_name            | Value                                       |  
  3. +--------------------------+---------------------------------------------+  
  4. | character_set_client     | gb2312                                      |  
  5. | character_set_connection | gb2312                                      |  
  6. | character_set_database   | utf8                                        |  
  7. | character_set_filesystem | binary                                      |  
  8. | character_set_results    | gb2312                                      |  
  9. | character_set_server     | utf8                                        |  
  10. | character_set_system     | utf8                                        |  
  11. | character_sets_dir       | D:/Dev/MySQL/MySQLServer5.5/share/charsets/ |  
  12. +--------------------------+---------------------------------------------+  
  13. 8 rows in set (0.00 sec)  

有变化,发生改变的就是character_set_client, character_set_connection和character_set_results这三个参数。而这三个参数恰好又是命令 set names gb2312 所能修改的。 

此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?

character_set_client指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理

character_set_connection指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给MySQL 的SQL语句,会首先被MySQL从character_set_client指定的编码转换到character_set_connection指定的编码,如果character_set_clien指定的是binary,则MySQL就会把SQL语句按照character_set_connection指定的编码解释执行. 
当执行SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和character_set_connection指定的不同,则MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似. 
当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL 则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置)。

3.Server Section

character-set-server=utf8  服务器端默认编码格式

当创建一个schema和table时,如果没有指定编码格式,那么就继承这个编码格式。

default-storage-engine=INNODB  当创建table时默认的引擎。

 

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

SQL Mode:MySQL服务器可以在不同的SQL Mode下工作,能够为不同的客户端提供不同的SQL Mode,以更好的满足需求。

从5.0.18开始默认启动Strict Mode,之前为ANSI模式。ANSI即等价于REAL_AS_FLOATPIPES_AS_CONCAT,ANSI_QUOTESIGNORE_SPACE,这种模式下能使MySQL的语法和行为表现的更接近于标准SQL。

其中 REAL是DOUBLE PRECISION和DOUBLE的同义词,REAL_AS_FLOAT则是将REAL看做FLOAT类型。

PIPES_AS_CONCAT的意思是将||看做字符串连接符而不是“或”,其作用等同于concat函数。

ANSI_QUOTES的意思是将' " '看做标识符引用字符而不是字符串引用字符,在这种模式下引用字符串时就不能再使用双引号。

IGNORE_SPACE 允许在内置函数的名称和(之间出现空格,如果在引用字符串时出现字符串与内置函数相同,则需要使用双引号等。

 

STRICT_TRANS_TABLES 在插入数据时如果数据不符合表的要求,对于支持事务的表,产生错误然后自动回滚。对于不支持事务的表,如果非法数据出现在第一行,那么SQL语句将终止执行,表的数据不会发生改变,如果非法数据出现在中间行,MySQL数据库会自动将非法数据转换成最接近的合法数据,然后继续执行SQL语句。若原始SQL语句中某个字段数据丢失,MySQL会自动填充一个该字段的默认值,然后继续执行SQL语句。不支持事务的表会产生一个警告。

NO_ENGINE_SUBSTITUTION 创建表时,如果指定的引擎不可用,MySQL不会自动替换为默认的引擎,产生一个错误。

 

query_cache_size  查询缓存,如果经常进行一些相同的查询并且表的数据也很少发生变化,那么查询缓存可能会大大的提高查询效率。

可以通过SHOW STATUS LIKE '%Qcache_lowmem_prunes%';来查看当前缓存的状态。

如果表的数据经常发生改变或者每次都执行不同的查询,那查询缓存有可能会导致效率降低。




你可能感兴趣的:(MySQL配置文件浅读)