一、MySQL获取配置信息路径:
1、命令行参数(如:mysqld_safe --datadir=/data/mysql_data)
2、配置文件(不同的操作系统,MySQL读取配置文件的顺序也不同,可以使用"mysqld --help --verbose | grep -A 1 'Defaullt options' "命令来查询,如sentos系统下的执行结果为:/etc/my.cnf /etc/mysql/my.cnf /home/mysql/my.cnf ~/.my.cnf)
二、MySQL配置参数的作用域:
1、全局参数
set global 参数名=参数值; #使用此命令进行全局参数配置
set @@global.参数名 :=参数值;
注意,有的全局参数修改后只对新的session有效,而对修改之前就已经存在的session无效。
2、会话参数
set [session] 参数名=参数值;
set @@session.参数名 :=参数值;
三、MySQL内存配置相关参数:
配置内存相关参数之前,首先应搞明白:
1、确定可以使用的内存上限
2、确定MySQL的每个连接使用的内存,主要包括:排序缓冲区的大小(sort_buffer_size)、连接缓冲区的大小(join_buffer_size)、读缓冲池的大小(read_buffer_size)、索引缓冲区的大小(read_rnd_buffer_size)
注:1)以上四个缓冲区是为每个线程分配的。
2)排序缓冲区:在有查询排序操作时为其分配内存且直接分配最大内存而不管是否需要这么大的内存。
连接缓冲区:如果一个查询中关联了多张表,那么就会为每一个关联分配一个连接缓冲区,即每个查询都可能会有多个连接缓冲区。
读缓冲池:对一个MyISAM表进行全表扫描时所分配的读缓冲池的大小,MySQL只有在有查询需要的时候才为其分配该参数值大小的内存,该参数值一定要是一个 4 的倍数。
索引缓冲区:MySQL只有在有查询需要的时候才为其分配内存且只分配其所需要的大小而不是指定参数值的大小。
3、确定需要为操作系统保留多少内存
如何为缓存池分配内存:
MySQL比较重要的两个缓存为:
Innodb_buffer_pool_size:定义了Innodb所使用的缓存池的大小。若系统中只使用innodb表,则该值可以如下计算:值=总内存-(每线程所需内存*连接数)-系统保留内存。
key_buffer_size:主要用于MyISAM存储引擎,MyISAM表所占用的大小可以通过命令 "select sum(index_length) from information_schema.tables where engine='myisam' " 来查询
四、IO相关配置参数(决定了MySQL如何同步缓存池中的数据到磁盘上以进行修改的数据的持久化保存):
1、Innodb存储引擎下的相关IO配置
Innodb_log_file_size:控制单个事务日志的大小
Innodb_log_files_in_froup:控制事务日志文件的个数
//事务日志的总大小=Innodb_log_files_in_group * Innodb_log_file_size
//事务日志每次提交都是先写入事务日志的缓冲区,然后再刷新到磁盘中
Innodb_log_buffer_size:用于控制日志缓冲区的大小,通常此值都不是很大
Innodb_flush_log_at_trx_commit:控制事务日志刷新频率。
//事务日志刷新频率分为三个等级:
// 0:每秒进行一次log写入cache,并flush log到磁盘,有可能会丢失已经提交的事务(1秒钟之内提交的事务);
// 1:默认值,每次事务提交执行log写入cache,并flush log到磁盘,能够保证不会丢失任何已经提交的事务,此类型安全性很高,但性能最差;
// 2:建议值,每次事务提交,执行log数据写入到cache,每秒执行一次flush log到磁盘,只有在系统宕机时才有可能丢失一秒钟的事务;
Innodb_flush_method:刷新方式,决定innodb数据文件和日志文件如何跟系统进行交互,一般建议设置为:O_DIRECT方式(不缓存,不预读,避免innodb和系统对于数据的双重缓存)
Innodb_file_per_table:控制innodb如何使用表空间
Innodb_doublewrite:控制innodb是否使用双写缓存(双写缓存主要是为了防止数据没有写完整而出现的数据损坏)
2、MyISAM存储引擎下的相关IO配置
delay_key_write:类似于Innodb的Innodb_flush_log_at_trx_commit参数
// OFF:每次写操作后刷新键缓冲中的脏块到磁盘
// ON:只对在建表时指定了delay_key_write选项的表使用延迟刷新
// ALL:对所有MyISAM表都使用延迟键写入
五、安全相关配置参数
未完待续...