# MySQL 服务端
在[mysqld]下:
1
[
mysqld
]
2
#
一般配置选项
3
port
=
@
MYSQL_TCP_PORT
@
4
socket
=
@
MYSQL_UNIX_ADDR
@
5
6
#
跳过数据库权限验证
7
#
一般用于忘记登录密码的时候,能跳过验证,直接用脚本重置密码。
8
#
重置之后记得注释掉。
9
skip
‐
grant
‐
tables
10
11
#
禁止
MySQL
对外部连接进行
DNS
解析,使用这一选项可以消除
MySQL
进行
DNS
解析的时间。
12
#
但需要注意,如果开启该选项,则所有远程主机连接授权都要使用
IP
地址方式,
13
#
否则
MySQL
将无法正常处理连接请求!
14
skip
‐
name
‐
resolve
15
16
# back_log
是操作系统在监听队列中所能保持的连接数,队列保存了在
MySQL
连接管理器
线程
17
#
处理之前的连接。如果你有非常高的连接率并且出现
”connection refused”
报错,
18
#
你就应该增加此处的值。检查你的操作系统文档来获取这个变量的最大值。
19
#
如果将
back_log
设定到比你操作系统限制更高的值,将会没有效果。
20
#
我看了几台云服务器,默认值都是
80
。
21
back_log
=
300
22
23
#
不在
TCP
/
IP
端口上进行监听。如果所有的进程都是在同一台服务器连接到本地的
mysql
d
,
24
#
这样设置将是增强安全的方法。所有
mysqld
的连接都是通过
Unix sockets
或者命名
管道
25
#
进行的。注意在
windows
下如果没有打开命名管道选项而只是用此项
(
通过
26
# “enable
‐
named
‐
pipe”
选项
)
将会导致
mysql
服务没有任何作用!
27
#skip
‐
networking
28
29
#
指定
MySQL
允许的最大连接进程数。如果在访问数据库时经常出现
"Too Many Connecti
ons"
30
#
的错误提示,则需要增大该参数值。
31
# MySQL
服务所允许的同时会话数的上限,其中一个连接将被
SUPER
权限保留作为管理员登
录。即便已经达到了连接数的上限。
32
#
我看了几台云服务器,默认值都是
151
。
33
max_connections
=
1000
34
35
#
每个客户端连接最大的错误允许数量,如果达到了此限制。
36
#
这个客户端将会被
MySQL
服务阻止,直到管理员执行
”
FLUSH HOSTS
”
或者服务重启。
37
#
防止黑客,非法的密码以及其他在链接时的错误会增加此值。
38
#
查看
“Aborted_connects”
状态来获取全局计数器。
39
#
我看了几台云服务器,默认值都是
100
。
40
max_connect_errors
=
30
41
42
# MySQL
打开的文件描述符限制,默认最小
1024
;
43
#
当
open_files_limit
没有被配置的时候,比较
max_connections
*
5
和
ulimit
‐
n
的值,
哪个大用哪个,
44
#
当
open_file_limit
被配置的时候,比较
open_files_limit
和
max_connections
*
5
的
值,哪个大用哪个。
45
open_files_limit
=
10240
46
47
#
所有线程所打开表的数量。
48
#
增加此值就增加了
mysqld
所需要的文件描述符的数量。
49
#
这样你需要确认在
[
mysqld_safe
]
中
“open
‐
files
‐
limit”
变量设置打开文件数量
50
#
允许至少
4096
51
table_cache
=
512
52
53
#
允许外部文件级别的锁。打开文件锁会对性能造成负面影响。
54
#
所以只有在你在同样的文件上运行多个数据库实例时才使用此选项
(
注意仍会有其他约
束
!
)
。
55
#
或者你在文件层面上使用了其他一些软件依赖来锁定
MyISAM
表。
56
#external
‐
locking
57
58
#
服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小
(
当与大的
BLOB
字
段一起工作时相当必要
)
。每个连接独立的大小
.
大小动态增加。
59
max_allowed_packet
=
32
M
60
61
#
在一个事务中
binlog
为了记录
SQL
状态所持有的
cache
大小,如果你经常使用大的,多声
明的事务,你可以增加此值来获取更大的性能。所有从事务来的状态都将被缓冲在
binlog
缓冲
中然后在提交后一次性写入到
binlog
中。如果事务比此值大,会使用磁盘上的临时文件来替
代。此缓冲在每个连接的事务第一次更新状态时被创建。
62
binlog_cache_size
=
4
M
63
64
#
独立的内存表所允许的最大容量。此选项为了防止意外创建一个超大的内存表导致永尽
所有的内存资源。
65
max_heap_table_size
=
128
M
66
67
#
排序缓冲被用来处理类似
ORDER BY
以及
GROUP BY
队列所引起的排序。如果排序后的数据
无法放入排序缓冲,一个用来替代的基于磁盘的合并分类会被使用。查看
“Sort_merge_pass
es”
状态变量。在排序发生时由每个线程分配。
68
sort_buffer_size
=
16
M
69
70
#
此缓冲被使用来优化全联合
(
full JOINs
不带索引的联合
)
。类似的联合在极大多数情
况下有非常糟糕的性能表现,但是将此值设大能够减轻性能影响。通过
“Select_full_join”
状态变量查看全联合的数量。当全联合发生时
,
在每个线程中分配。
71
join_buffer_size
=
16
M
72
73
#
我们在
cache
中保留多少线程用于重用。当一个客户端断开连接后
,
如果
cache
中的线程
还少于
thread_cache_size
,则客户端线程被放入
cache
中。这可以在你需要大量新连接的时
候极大的减少线程创建的开销。
(
一般来说如果你有好的线程模型的话
,
这不会有明显的性能提
升
.)
74
thread_cache_size
=
16
75
76
#
此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量。此值
只对于支持
thread_concurrency
()
函数的系统有意义
(
例如
Sun Solaris
)
。你可可以尝
试使用
[
CPU
数量
]
*
(
2..4
)
来作为
thread_concurrency
的值。
77
thread_concurrency
=
8
78
79
#
查询缓冲常被用来缓冲
SELECT
的结果并且在下一次同样查询的时候不再执行直接返回
结果。打开查询缓冲可以极大的提高服务器速度,如果你有大量的相同的查询并且很少修改
表。查看
“Qcache_lowmem_prunes”
状态变量来检查是否当前值对于你的负载来说是否足够
高。注意
:
在你表经常变化的情况下或者如果你的查询原文每次都不同,查询缓冲也许引起性
能下降而不是性能提升。
80
query_cache_size
=
128
M
81
82
#
只有小于此设定值的结果才会被缓冲。此设置用来保护查询缓冲
,
防止一个极大的结果集
将其他所有的查询结果都覆盖。
83
query_cache_limit
=
4
M
84
85
#
被全文检索索引的最小的字长。你也许希望减少它,如果你需要搜索更短字的时候。注
意在你修改此值之后,你需要重建你的
FULLTEXT
索引
86
ft_min_word_len
=
8
87
88
#
如果你的系统支持
memlock
()
函数,你也许希望打开此选项用以让运行中的
mysql
在在
内存高度紧张的时候,数据在内存中保持锁定并且防止可能被
swapping out
。此选项对于性能
有益
89
#memlock
90
91
#
当创建新表时作为默认使用的表类型,如果在创建表示没有特别执行表类型,
92
#
将会使用此值,还有
MYISAM
93
default_table_type
=
InnoDB
94
95
#
线程使用的堆大小。此容量的内存在每次连接时被预留。
MySQL
本身常不会需要超过
64
K
的内存。如果你使用你自己的需要大量堆的
UDF
函数,或者你的操作系统对于某些操作需要更多
的堆。你也许需要将其设置的更高一点。
96
thread_stack
=
512
K
97
98
#
设定默认的事务隔离级别。可用的级别如下:
READ
‐
UNCOMMITTED
,
READ
‐
COMMITTED
,
REPEATABLE
‐
READ
,
SERIALIZABLE
99
transaction_isolation
=
REPEATABLE
‐
READ
100
101
#
内部
(
内存中
)
临时表的最大大小。如果一个表增长到比此值更大,将会自动转换为基于
磁盘的表。此限制是针对单个表的,而不是总和。
102
tmp_table_size
=
128
M
103
104
#
打开二进制日志功能。在复制
(
replication
)
配置中,作为
MASTER
主服务器必须打开此
项。
105
#
如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志。
106
log
‐
bin
=
mysql
‐
bin
107
108
#
如果你在使用链式从服务器结构的复制模式
(
A
‐>
B
‐>
C
)
,你需要在服务器
B
上打开此
项。此选项打开在从线程上重做过的更新的日志,并将其写入从服务器的二进制日志。
109
#log_slave_updates
110
111
#
打开全查询日志。所有的由服务器接收到的查询
(
甚至对于一个错误语法的查询
)
都会
被记录下来。
112
#
这对于调试非常有用,在生产环境中常常关闭此项。
113
#log
114
115
#
将警告打印输出到错误
log
文件。如果你对于
MySQL
有任何问题,你应该打开警告
log
并
且仔细审查错误日志,查出可能的原因。
116
#log_warnings
117
118
#
记录慢速查询。慢速查询是指消耗了比
“long_query_time”
定义的更多时间的查询。
119
#
如果
log_long_format
被打开,那些没有使用索引的查询也会被记录。
120
#
如果你经常增加新查询到已有的系统内的话。一般来说这是一个好主意。
121
log_slow_queries
122
123
#
所有的使用了比这个时间
(
以秒为单位
)
更多的查询会被认为是慢速查询。不要在这里使
用
”1″
,否则会导致所有的查询,甚至非常快的查询页被记录下来
(
由于
MySQL
目前时间的精确
度只能达到秒的级别
)
。
124
long_query_time
=
6
125
126
#
在慢速日志中记录更多的信息。一般此项最好打开。打开此项会记录使得那些没有使用
索引的查询也被作为到慢速查询附加到慢速日志里。
127
log_long_format
128
129
#
此目录被
MySQL
用来保存临时文件。例如,它被用来处理基于磁盘的大型排序,和内部
排序一样。以及简单的临时表。如果你不创建非常大的临时文件,将其放置到
swapfs
/
tmpfs
文件系统上也许比较好。另一种选择是你也可以将其放置在独立的磁盘上。你可以使用
”
;
”
来放
置多个路径。他们会按照
roud
‐
robin
方法被轮询使用。
130
#tmpdir
= /
tmp
# *** 主从复制相关的设置
1
#
唯一的服务辨识号,数值位于
1
到
2
^
32
‐
1
之间。
2
#
此值在
master
和
slave
上都需要设置。
3
#
如果
“master
‐
host”
没有被设置,则默认为
1
,但是如果忽略此选项,
4
# MySQL
不会作为
master
生效。
5
server
‐
id
=
1
6
7
#
复制的
Slave
(
去掉
master
段的注释来使其生效
)
8
#
为了配置此主机作为复制的
slave
服务器
,
你可以选择两种方法
:
9
#
1
)
使用
CHANGE MASTER TO
命令
10
#
语法如下
:
11
#
CHANGE MASTER TO MASTER_HOST
=
,
MASTER_PORT
=
,
MASTER_USER
=
,
MASTER_PASSW
ORD
=
;
12
#
例子
:
13
#
CHANGE MASTER TO MASTER_HOST
=
’
125.564.12.1
′
,
MASTER_PORT
=
3306
,
MASTER_U
SER
=
’joe’
,
MASTER_PASSWORD
=
’secret’
;
14
#
或者
15
#
2
)
设置以下的变量。不论如何,
在你选择这种方法的情况下,然后第一次启动复制
(
甚
至不成功的情况下,例如如果你输入错密码在
master
‐
password
字段并且
slave
无法连接
)
,
sl
ave
会创建一个
master
.
info
文件,并且之后任何对于包含在此文件内的参数的变化都会被
忽略,并且由
master
.
info
文件内的内容覆盖,除非你关闭
slave
服务,删除
master
.
info
并且重启
slave
服务。
16
#
由于这个原因
,
你也许不想碰一下的配置
(
注释掉的
)
并且使用
CHANGE MASTER TO
(
查
看上面
)
来代替
17
#
所需要的唯一
id
号位于
2
和
2
^
32
–
1
之间
(
并且和
master
不同
)
。如果
master
‐
host
被设置了,则默认值是
2
。但是如果省略,则不会生效。
18
#server
‐
id
=
2
19
20
#
复制结构中的
master –
必须
21
#master
‐
host
=
22
#
当连接到
master
上时
slave
所用来认证的用户名
–
必须
23
#master
‐
user
=
24
#
当连接到
master
上时
slave
所用来认证的密码
–
必须
25
#master
‐
password
=
26
# master
监听的端口。可选
–
默认是
3306
27
#master
‐
port
=
28
#
使得
slave
只读。只有用户拥有
SUPER
权限和在上面的
slave
线程能够修改数据。你可以
使用此项去保证没有应用程序会意外的修改
slave
而不是
master
上的数据。
29
#read_only
#*** MyISAM 相关选项
1
#
关键词缓冲的大小, 一般用来缓冲
MyISAM
表的索引块。不要将其设置大于你可用内存的
3
0
%
,因为一部分内存同样被
OS
用来缓冲行数据,甚至在你并不使用
MyISAM
表的情况下,你也
需要仍旧设置起
8
‐
64
M
内存由于它同样会被内部临时磁盘表使用。
2
key_buffer_size
=
128
M
3
4
#
用来做
MyISAM
表全表扫描的缓冲大小。当全表扫描需要时,在对应线程中分配。
5
read_buffer_size
=
8
M
6
7
#
当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止
磁盘寻道。如果你增高此值,可以提高很多
ORDER BY
的性能。当需要时由每个线程分配。
8
read_rnd_buffer_size
=
64
M
9
10
# MyISAM
使用特殊的类似树的
cache
来使得突发插入
(
这些插入是
,
INSERT
…
SELECT
,
I
NSERT
…
VALUES
(
…
), (
…
),
…
,
以及
LOAD DATA INFILE
)
更快。此变量限制每个进程中
缓冲树的字节数。设置为
0
会关闭此优化。为了最优化不要将此值设置大于
“key_buffer_s
ize”
。当突发插入被检测到时此缓冲将被分配。
11
bulk_insert_buffer_size
=
256
M
12
13
#
此缓冲当
MySQL
需要在
REPAIR
,
OPTIMIZE
,
ALTER
以及
LOAD DATA INFILE
到一个
空表中引起重建索引时被分配。这在每个线程中被分配
.
所以在设置大值时需要小心。
14
myisam_sort_buffer_size
=
256
M
15
16
#
MySQL
重建索引时所允许的最大临时文件的大小
(
当
REPAIR
,
ALTER TABLE
或者
LOA
D DATA INFILE
)
。如果文件大小比此值更大
,
索引会通过键值缓冲创建
(
更慢
)
。
17
myisam_max_sort_file_size
=
10
G
18
19
#
如果被用来更快的索引创建索引所使用临时文件大于制定的值
,
那就使用键值缓冲方法。
这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引。
20
myisam_max_extra_sort_file_size
=
10
G
21
22
#
如果一个表拥有超过一个索引,
MyISAM
可以通过并行排序使用超过一个线程去修复他
们。这对于拥有多个
CPU
以及大量内存情况的用户
,
是一个很好的选择。
23
myisam_repair_threads
=
1
24
25
#
自动检查和修复没有适当关闭的
MyISAM
表。
26
myisam_recover
27
28
#
默认关闭
Federated
29
skip
‐
federated
# *** BDB 相关选项 ***
1
#
如果你运行的
MySQL
服务有
BDB
支持但是你不准备使用的时候使用此选项。这会节省内存并
且可能加速一些事。
2
skip
‐
bdb
# *** INNODB 相关选项 ***
1
#
如果你的
MySQL
服务包含
InnoDB
支持但是并不打算使用的话,使用此选项会节省内存以及
磁盘空间
,
并且加速某些部分
2
#skip
‐
innodb
3
4
#
附加的内存池被
InnoDB
用来保存
metadata
信息。如果
InnoDB
为此目的需要更多的内
存,它会开始从
OS
这里申请内存。由于这个操作在大多数现代操作系统上已经足够快,你一般
不需要修改此值。
SHOW INNODB STATUS
命令会显示当先使用的数量。
5
innodb_additional_mem_pool_size
=
64
M
6
7
# InnoDB
使用一个缓冲池来保存索引和原始数据,不像
MyISAM
。这里你设置越大,你在存
取表里面数据时所需要的磁盘
I
/
O
越少。在一个独立使用的数据库服务器上,你可以设置这个变
量到服务器物理内存大小的
80
%
。不要设置过大,否则。,由于物理内存的竞争可能导致操作系
统的换页颠簸。注意在
32
位系统上你每个进程可能被限制在
2
‐
3.5
G
用户层面内存限制,所以
不要设置的太高。
8
innodb_buffer_pool_size
=
6
G
9
10
# InnoDB
将数据保存在一个或者多个数据文件中成为表空间。如果你只有单个逻辑驱动保
存你的数据,一个单个的自增文件就足够好了。其他情况下,每个设备一个文件一般都是个好
的选择。你也可以配置
InnoDB
来使用裸盘分区
–
请参考手册来获取更多相关内容。
11
innodb_data_file_path
=
ibdata1
:
10
M
:
autoextend
12
13
#
设置此选项如果你希望
InnoDB
表空间文件被保存在其他分区。默认保存在
MySQL
的
datad
ir
中。
14
#innodb_data_home_dir
=
15
16
#
用来同步
IO
操作的
IO
线程的数量。此值在
Unix
下被硬编码为
4
,但是在
Windows
磁盘
I
/
O
可能在一个大数值下表现的更好。
17
innodb_file_io_threads
=
4
18
19
#
如果你发现
InnoDB
表空间损坏,设置此值为一个非零值可能帮助你导出你的表。从
1
开始
并且增加此值知道你能够成功的导出表。
20
#innodb_force_recovery
=
1
21
22
#
在
InnoDb
核心内的允许线程数量。最优值依赖于应用程序,硬件以及操作系统的调度方
式。过高的值可能导致线程的互斥颠簸。
23
innodb_thread_concurrency
=
16
24
25
#
如果设置为
1
,
InnoDB
会在每次提交后刷新
(
fsync
)
事务日志到磁盘上,这提供了完整的
ACID
行为。如果你愿意对事务安全折衷
,
并且你正在运行一个小的事务,你可以设置此值到
0
或者
2
来减少由事务日志引起的磁盘
I
/
O
。
0
代表日志只大约每秒写入日志文件并且日志文件刷
新到磁盘。
2
代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘
上。
26
innodb_flush_log_at_trx_commit
=
2
27
28
#
(说明:如果是游戏服务器,建议此值设置为
2
;如果是对数据安全要求极高的应用,建
议设置为
1
;设置为
0
性能最高,但如果发生故障,数据可能会有丢失的危险!默认值
1
的意思是
每一次事务提交或事务外的指令都需要把日志写入(
flush
)硬盘,这是很费时的。特别是使
用电池供电缓存(
Battery backed up cache
)时。设成
2
对于很多运用,特别是从
MyISAM
表
转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒
flush
到硬
盘,所以你一般不会丢失超过
1
‐
2
秒的更新。设成
0
会更快一点,但安全方面比较差,即使
MySQ
L
挂了也可能会丢失事务的数据。而值
2
只会在整个操作系统挂了时才可能丢数据。)
29
#
加速
InnoDB
的关闭。这会阻止
InnoDB
在关闭时做全清除以及插入缓冲合并。这可能极大
增加关机时间,但是取而代之的是
InnoDB
可能在下次启动时做这些操作。
30
#innodb_fast_shutdown
31
32
#
用来缓冲日志数据的缓冲区的大小。当此值快满时,
InnoDB
将必须刷新数据到磁盘上。
由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大
(
甚至对于长事务而言
)
33
innodb_log_buffer_size
=
16
M
34
35
#
在日志组中每个日志文件的大小。你应该设置日志文件总合大小到你缓冲池大小的
25
%~
1
00
%
。来避免在日志文件覆写上不必要的缓冲池刷新行为。不论如何,请注意一个大的日志文件
大小会增加恢复进程所需要的时间。
36
innodb_log_file_size
=
512
M
37
38
#
在日志组中的文件总数。通常来说
2
~
3
是比较好的。
39
innodb_log_files_in_group
=
3
40
41
# InnoDB
的日志文件所在位置。默认是
MySQL
的
datadir
。你可以将其指定到一个独立的硬
盘上或者一个
RAID1
卷上来提高其性能。
42
#innodb_log_group_home_dir
43
44
#
在
InnoDB
缓冲池中最大允许的脏页面的比例。如果达到限额,
InnoDB
会开始刷新他们防
止他们妨碍到干净数据页面。这是一个软限制,不被保证绝对执行。
45
innodb_max_dirty_pages_pct
=
90
46
47
# InnoDB
用来刷新日志的方法。表空间总是使用双重写入刷新方法。默认值是
“fdatasyn
c”
, 另一个是
“
O_DSYNC
”
。
48
#innodb_flush_method
=
O_DSYNC
49
50
#
在被回滚前,一个
InnoDB
的事务应该等待一个锁被批准多久。
InnoDB
在其拥有的锁表中
自动检测事务死锁并且回滚事务。如果你使用
LOCK TABLES
指令,或者在同样事务中使用除
了
InnoDB
以外的其他事务安全的存储引擎。那么一个死锁可能发生而
InnoDB
无法注意到。这种
情况下这个
timeout
值对于解决这种问题就非常有帮助。
51
innodb_lock_wait_timeout
=
120
[mysqldump]
1
#
不要在将内存中的整个结果写入磁盘之前缓存。在导出非常巨大的表时需要此项。
2
quick
3
max_allowed_packet
=
32
M
[mysql]
1
no
‐
auto
‐
rehash
2
#
仅仅允许使用键值的
UPDATEs
和
DELETEs
。
3
#safe
‐
updates
[isamchk]
1
key_buffer
=
2048
M
2
sort_buffer_size
=
2048
M
3
read_buffer
=
32
M
4
write_buffer
=
32
M
[myisamchk]
1
key_buffer
=
2048
M
2
sort_buffer_size
=
2048
M
3
read_buffer
=
32
M
4
write_buffer
=
32
M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
1
#
增加每个进程的可打开文件数量。警告:确认你已经将全系统限制设定的足够高!打开大
量表需要将此值设大。
2
open
‐
files
‐
limit
=
8192