mysql 参数
MySQL提供了相当多的系统参数,涉及方方面面。我们可以使用show关键字来查看:
show variables like '%autocommit%';
或者
show status like '%xxx%';
修改参数值
mysql有一些参数是可以直接修改的,比如mysql的自动提交是默认开启,我们修改为关闭自动提交
set autocommit = 1;
当然也有些系统参数不能直接修改里面的值,当我们修改时会报错,就像这样:
mysql> set @@ft_max_word_len = 1;
ERROR 1238 (HY000): Variable 'ft_max_word_len' is a read only variable
所以只能在配置文件中配置,配置参数后必须重启mysql方可生效
- windows版本的mysql配置文件为
my.ini
文件 - linux版本的mysql配置文件为
my.cnf
文件
[mysql] 参数说明
以下参数需要加到[mysql]下面
参数 |
说明 |
datadir=/xxx/xxx |
数据文件存放目录 |
socket=/xx/xx/mysql.socket |
本地连接文件,通过localhost来连接mysql需要用到的文件 |
pid_file |
存储mysql的pid,可通过此id杀死mysql进程 |
port=3306 |
mysql的端口号 |
default_storage_engine=Innodb |
存储引擎 |
skip_grant_tables |
使登录时跳过权限检查;登录mysql时,不需要密码就可以登录了:mysql -u root -p |
字符相关
参数 |
说明 |
character_set_client=GBK |
客户端字符集 |
character_set_connection |
处理客户端发来信息的编码格式 |
character_set_database |
数据库默认的字符集 |
character_set_filesystem |
文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的 |
character_set_results |
mysql发送给客户端所用的字符集 |
character_set_server |
mysql server 默认字符集,这个变量建议由系统自己管理,不要人为定义。 |
character_set_system |
数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。 |
连接相关(connection)
参数 |
说明 |
max_connections |
mysql最大连接数,默认151,可通过命令:show processlist 查看连接数量,一行就是一个连接 |
max_user_connections |
限制每个用户的连接个数,默认为0,0表示不限制 |
back_log |
注意这不是日志,这是用来暂存连接的数量大小,默认是80个,当mysql线程在一个很短时间内得到非常多的连接请求时,就会起作用,连接数量超过 max_connections 所设置的值,多出来的连接就会存放到back_log中,当back_log也存不下时,就会拒接掉新的连接; |
wait_timeout |
mysql在关闭一个长连接(非交互式连接)之前需要等待的时长 |
interactive_timeout |
关闭一个短连接(交互式连接)需要等待的秒数 |
日志相关(log)
参数 |
说明 |
log_error |
指定错误日志文件名称和存放路径,用于记录mysql启动和停止时、以及服务器在运行中出现严重错误时的相关信息 |
log_bin |
指定二进制日志文件名称和路径,用于记录所有对数据更改的sql语句;默认是关闭的,使用主从复制时,这个开关一定要开启。另外,如果数据丢失了,可通过此文件恢复数据,所以说,建议随时开启这个开关;只要配上路径就会自动打开:log-bin=/bin/mysql.bin |
binlog_do_db |
指定更新到二进制日志的库,比如我指定binlog_do_db=test ,就只会将test库中的数据记录到二进制日志中,其他库都不记录,如果要设置多个库,就得分2行来配置:binlog_do_db=test ,binlog_do_db=xx |
binlog_ignore_db |
指定不记录到二进制日志的库, |
sync_binlog |
指定多少次写日志后同步磁盘,用户修改数据后,会先将日志存在缓存中,每隔一段时间将缓存中的数据同步到磁盘中进行持久化存储; |
general_log |
是否开启查询日志记录,默认关闭 |
general_log_file |
查询日志记录文件存放地址;记录所有的查询语句 |
slow_query_log |
是否开启慢查询日志记录 |
slow_query_log_file |
指定慢查询日志文件名称, 用于记录耗时比较长的查询语句 |
long_query_time |
设置慢查询的时间,超过这个时间的查询语句就会被记录到show_query_log指定的文件中, |
log_show_admin_statements |
是否将管理语句写入慢查询日志 |
缓存相关(cache)
参数 |
说明 |
key_buffer_size |
索引缓存区大小,只对myisam起作用,默认8M,一般情况下,默认值够用了 |
query_cache_size |
查询缓存大小,mysql8.0以上版本已被删除<br> show status like '%Qcache%' 查看缓存的相关属性<br> Qcache_free_blocks :缓存中相邻内存块的个数,如果值比较大,那么查询缓存中碎片比较多<br> Qcache_free_memory :查询缓存中剩余的内存大小<br> Qcachae_hits :表示有多少次命中缓存<br> Qcache_inserts :表示多少次未命中而插入<br> Qcache_lowmen_prunes :多少条query因为内存不足而被移除出cache<br> Qcache_queries_in_cache :当前cache中缓存的query数量<br> Qcache_total_blocks :当前cache中block的数量 |
query_cache_limit |
超过此大小将不被缓存 |
query_cache_min_res_unit |
缓存块最小值 |
query_cache_type |
缓存类型,决定缓存什么样的查询,默认是关闭的,一共有三个值 <br>0 :禁用<br>1 :将缓存所有的结果,除非sql中使用sql_no_cache禁用查询缓存<br>2 :只缓存select语句中通过sql_cache指定需要缓存的查询 |
sort_buffer_size |
每个线程需要排序的线程分配该大小的缓冲区 |
max_allowed_packet=32M |
限制server接收的数据包大小 |
join_buffer_size=2M |
表示关联缓存的大小,join连表没有索引的时候会使用的缓存 |
thread_cache_size |
这个和java的线程池很像,就是线程在用完之后不会马上销毁,而是先存起来,下次可以直接使用,省去了开启线程的开销<br>Threads_cached:代表当前此时此刻线程缓存中有多少空闲线程<br>Threads_connected:代表当前已建立连接的数量<br>Threads_created:代表最近一次服务驱启动,已创建线程的数量,如果该值比较大,那么服务器会一直再创建线程;<br>Threads_running:代表当前激活的线程数 |
innodb相关
参数 |
说明 |
innodb_buffer_pool_size |
该参数可以设置指定大小的内存来缓冲数据和索引,最大可以设置为物理内存的80% |
innodb_flush_log_at_trx_commit |
主要控制innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,值分别为:0,1,2 |
innodb_thread_concurreney |
设置innodb线程的并发数,设为0表示不限制,如果要设置建议设为cpu核心数一直,或者是cpu核心数的2倍 |
innodb_log_buffer_size |
此参数确定日志文件所用的内存大小,单位:M |
innodb_log_file_size |
此参数确定数据日志爱文件的大小,单位:M |
innodb_log_files_in_group |
以循环方式将日志文件写入到多个文件中 |
read_buffer_size |
mysql读入缓冲区大小,对表进行顺序扫描的请求将分配到一个读入缓冲区 |
read_md_buffer_size |
mysql随机读的缓存区大小 |
innodb_file_per_table |
此参数确定为每张表分配一个新的文件;默认开启,如果关闭了,创建表之后,将不会产生后缀为.ibd的文件,他的数据会存储到ibdata1这个表空间文件中;最好是一张表一张文件; |