Skip to content

Commit eb1ab31

Browse files
committed
2016-04-17完善MySQL文章
1 parent 99708aa commit eb1ab31

File tree

2 files changed

+193
-19
lines changed

2 files changed

+193
-19
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
2+
# 适用于 Mysql 5.6
3+
# 该配置适合 1G 内存左右的机子,储存类型为 InnoDB
4+
# 官网配置说明:http://dev.mysql.com/doc/refman/5.6/en/mysqld-option-tables.html
5+
# 官网状态值说明:http://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html
6+
# 在线生成配置工具:http://tools.percona.com(只是起到一个参考作用,生成的配置文件里面的参数名有的是用符号:-,而官网是用:_,所以这个也要注意改掉。)
7+
# 资料参考:https://blog.linuxeye.com/379.html
8+
# 注释内容为注释行下面的配置的解释
9+
10+
# ============================================================================================================
11+
12+
13+
[client]
14+
port = 3306
15+
socket = /usr/program/mysql/data/mysql.sock
16+
default-character-set = utf8
17+
18+
19+
[mysql]
20+
port = 3306
21+
socket = /usr/program/mysql/data/mysql.sock
22+
default-character-set = utf8
23+
24+
# ============================================================================================================
25+
26+
27+
[mysqld]
28+
user = mysql
29+
port = 3306
30+
default-storage-engine = InnoDB
31+
socket = /usr/program/mysql/data/mysql.sock
32+
collation-server = utf8_unicode_ci
33+
init_connect='SET NAMES utf8'
34+
character-set-server = utf8
35+
basedir = /usr/program/mysql
36+
datadir = /usr/program/mysql/data
37+
pid-file = /usr/program/mysql/data/mysql.pid
38+
log-error = /usr/program/mysql/data/mysql-error.log
39+
40+
# 表示是本机的序号为1,一般配合设置主从的时候一定要修改的地方
41+
server-id = 1
42+
43+
# back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
44+
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
45+
back_log = 512
46+
47+
# MySQL的最大并发连接数
48+
max_connections = 1000
49+
# 网络传输中一次小心传输量的最大值(最大值为1G);增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
50+
max_allowed_packet = 4M
51+
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行 Mysql 命令:FLUSH HOST。
52+
max_connect_errors = 6000
53+
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
54+
skip_name_resolve
55+
# MySQL打开的文件描述符限制
56+
open_files_limit = 65535
57+
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值 400,最大值:524288。假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
58+
table_open_cache = 400
59+
60+
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
61+
binlog_cache_size = 1M
62+
# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
63+
max_heap_table_size = 8M
64+
# MySQL的heap(堆积)表缓冲大小。如果超过该值,则会将临时表写入磁盘。其范围值:1KB~4GB
65+
tmp_table_size = 128M
66+
67+
# MySQL读入缓冲区大小。该参数对应的分配内存也是每连接独享,所以,如果有100连接,那占用的内存是:100X2M=200M,所以4G内存的服务器,建议该值是6~8M
68+
read_buffer_size = 2M
69+
# MySQL的随机读缓冲区大小。
70+
read_rnd_buffer_size = 8M
71+
# MySQL执行排序使用的缓冲大小。该参数对应的分配内存也是每连接独享,所以,如果有100连接,那占用的内存是:100X2M=200M,所以4G内存的服务器,建议该值是6~8M
72+
sort_buffer_size = 2M
73+
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享,所以,如果有100连接,那占用的内存是:100X4M=400M,所以4G内存的服务器,建议该值是6~8M
74+
join_buffer_size = 4M
75+
# 指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对于4GB内存的服务器,该参数可以设置为:256M或384M
76+
key_buffer_size = 64M
77+
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
78+
# 根据物理内存设置规则如下:
79+
# 1G —> 8
80+
# 2G —> 16
81+
# 3G —> 32
82+
# 大于3G —> 64
83+
thread_cache_size = 8
84+
85+
# 每个线程的堆栈大小,值范围:128K ~ 4GB,默认是192KB
86+
thread_stack = 256k
87+
88+
# 0是关闭高速缓存,1是开启高速缓存
89+
query_cache_type = 1
90+
# 查询缓冲区的大小,如果是4G内存建议设置为64M。具体设置值还要根据运行环境来判断,你可以执行这个SQL语句:show status like 'Qcache%';
91+
# 从SQL语句查询的结果中,查看Qcache_lowmem_prunes的值非常大表示查询缓冲不够,你应该增加该设置值
92+
query_cache_size = 8M
93+
query_cache_limit = 2M
94+
95+
# 分词词汇最小长度,默认4
96+
ft_min_word_len = 4
97+
98+
log-bin = /usr/program/mysql/data/mysql-bin
99+
binlog_format = mixed
100+
expire_logs_days = 30
101+
102+
# 是否开启慢查询记录,1表示开启,0表示关闭,如果是主从环境下,主库不要开启,从库开启
103+
slow_query_log = 1
104+
# 慢查询时间 超过3秒则为慢查询
105+
long_query_time = 3
106+
slow_query_log_file = /usr/program/mysql/data/mysql-slow.log
107+
108+
performance_schema = 0
109+
explicit_defaults_for_timestamp
110+
111+
# 数据库库名/表名是否区分大小写,0:区分大小写,1:不区分大小写
112+
lower_case_table_names = 1
113+
114+
# MySQL选项以避免外部锁定,减少出错几率,增强稳定性
115+
skip_external_locking
116+
117+
118+
# 在网络上不允许TCP/IP连接到MySQL。所有到MySQL的连接必须经由Unix socket进行。如果要允许TCP/IP连接,则注释当前行即可
119+
skip-networking
120+
121+
122+
# 该设置值取值为:服务器机子的逻辑CPU数量X2,比如你的服务器机子是 Linux 系统你可以执行:grep 'processor' /proc/cpuinfo | sort -u | wc -l,可以查看到逻辑CPU数量值,比如我取到的值是24,那我这里应该设置为:24X2=48
123+
thread_concurrency = 2
124+
125+
innodb_file_per_table = 1
126+
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
127+
innodb_open_files = 500
128+
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
129+
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
130+
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的70%左右
131+
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
132+
innodb_buffer_pool_size = 64M
133+
134+
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
135+
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
136+
innodb_write_io_threads = 4
137+
innodb_read_io_threads = 4
138+
139+
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
140+
innodb_thread_concurrency = 0
141+
innodb_purge_threads = 1
142+
innodb_flush_log_at_trx_commit = 2
143+
innodb_log_buffer_size = 2M
144+
innodb_log_file_size = 32M
145+
innodb_log_files_in_group = 3
146+
innodb_max_dirty_pages_pct = 90
147+
innodb_lock_wait_timeout = 120
148+
innodb_additional_mem_pool_size = 2M
149+
150+
bulk_insert_buffer_size = 8M
151+
# 用于设置在 REPAIR TABLE 和 CREATE INDEX 创建索引或 ALTER TABLE 的过程中排序索引所分配的缓冲区大小,可设置范围:4MB~4GB,默认8MB,4G内存的服务器可以设置为32M~64M
152+
myisam_sort_buffer_size = 8M
153+
myisam_max_sort_file_size = 10G
154+
myisam_repair_threads = 1
155+
156+
# 服务器关闭交互式连接前等待活动的秒数。单位秒
157+
interactive_timeout = 28800
158+
# 服务器关闭非交互连接之前等待活动的秒数。单位秒。通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大。默认值:28800
159+
wait_timeout = 3600
160+
161+
# ============================================================================================================
162+
163+
[mysqldump]
164+
quick
165+
# 服务器发送和接受的最大包长度
166+
max_allowed_packet = 16M
167+
168+
[myisamchk]
169+
key_buffer_size = 8M
170+
sort_buffer_size = 8M
171+
read_buffer = 4M
172+
write_buffer = 4M

Mysql-Install-And-Settings.md

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
/usr/program/mysql/mysql-test/suite/ndb_rpl/my.cnf
7777
```
7878
- 保留 **/etc/my.cnf** 和 **/usr/program/mysql/mysql-test/** 目录下配置文件,其他删除掉。
79-
79+
- 我整理的一个单机版配置说明:[my.cnf](MySQL-Settings/MySQL-5.6/1G-Memory-Machine/my.cnf)
8080

8181

8282
## MySQL 主从复制
@@ -104,6 +104,7 @@
104104
- 主 DB 开启二进制日志功能:`vim /etc/my.cnf`,
105105
- 添加一行:`log-bin = /usr/program/mysql/data/mysql-bin`
106106
- 指定同步的数据库,如果不指定则同步全部数据库,其中 ssm 是我的数据库名:`binlog-do-db=ssm`
107+
- 主库关掉慢查询记录,用 SQL 语句查看当前是否开启:`SHOW VARIABLES LIKE '%slow_query_log%';`,如果显示 OFF 则表示关闭,ON 表示开启
107108
- 重启主库 MySQL 服务
108109
- 进入 MySQL 命令行状态,执行 SQL 语句查询状态:`SHOW MASTER STATUS;`
109110
- 在显示的结果中,我们需要记录下 **File** 和 **Position** 值,等下从库配置有用。
@@ -119,24 +120,25 @@
119120

120121

121122
- 从库操作步骤
122-
- 测试从库机子是否能连上主库机子:`sudo mysql -h 192.168.1.105 -u slave01 -p`,必须要连上下面的操作才有意义。
123-
- 由于不能排除是不是系统防火墙的问题,所以建议连不上临时关掉防火墙:`service iptables stop`
124-
- 或是添加防火墙规则:
125-
- 添加规则:`sudo iptables -I INPUT -p tcp -m tcp --dport 3306 -j ACCEPT`
126-
- 保存规则:`sudo service iptables save`
127-
- 重启 iptables:`sudo service iptables restart`
128-
- 修改配置文件:`vim /etc/my.cnf`,把 server-id 改为跟主库不一样
129-
- 在进入 MySQL 的命令行状态下,输入下面 SQL:
130-
131-
``` SQL
132-
CHANGE MASTER TO
133-
master_host='192.168.1.113',
134-
master_user='slave01',
135-
master_password='123456',
136-
master_port=3306,
137-
master_log_file='mysql3306-bin.000006',>>>这个值复制刚刚让你记录的值
138-
master_log_pos=1120;>>>这个值复制刚刚让你记录的值
139-
```
123+
- 从库开启慢查询记录,用 SQL 语句查看当前是否开启:`SHOW VARIABLES LIKE '%slow_query_log%';`,如果显示 OFF 则表示关闭,ON 表示开启。
124+
- 测试从库机子是否能连上主库机子:`sudo mysql -h 192.168.1.105 -u slave01 -p`,必须要连上下面的操作才有意义。
125+
- 由于不能排除是不是系统防火墙的问题,所以建议连不上临时关掉防火墙:`service iptables stop`
126+
- 或是添加防火墙规则:
127+
- 添加规则:`sudo iptables -I INPUT -p tcp -m tcp --dport 3306 -j ACCEPT`
128+
- 保存规则:`sudo service iptables save`
129+
- 重启 iptables:`sudo service iptables restart`
130+
- 修改配置文件:`vim /etc/my.cnf`,把 server-id 改为跟主库不一样
131+
- 在进入 MySQL 的命令行状态下,输入下面 SQL:
132+
133+
``` SQL
134+
CHANGE MASTER TO
135+
master_host='192.168.1.113',
136+
master_user='slave01',
137+
master_password='123456',
138+
master_port=3306,
139+
master_log_file='mysql3306-bin.000006',>>>这个值复制刚刚让你记录的值
140+
master_log_pos=1120;>>>这个值复制刚刚让你记录的值
141+
```
140142

141143
- 执行该 SQL 语句,启动 slave 同步:`START SLAVE;`
142144
- 执行该 SQL 语句,查看从库机子同步状态:`SHOW SLAVE STATUS;`

0 commit comments

Comments
 (0)