skip-locking
避免MySQL的外部锁定,减少出错几率增强稳定性。
back_log = 384
back_log 参数的值指出在MySQL暂时停止响应新
请求之前的短时间内多少个请求可以被存在堆栈中。
对于Linux系统推荐设置为小于512的整数。
key_buffer_size = 256M
key_buffer_size指定用于索引的缓冲区大小,增
加它可得到更好的索引处理性能。对于内存在4GB
左右的服务器该参数可设置为256M或384M。注意:
该参数值设置的过大反而会是服务器整体效率降低!
sort_buffer_size = 6M
查询排序时所能使用的缓冲区大小。注意:该参数
对应的分配内存是每连接独占,如果有100个连接,
那么实际分配的总共排序缓冲区大小为100 × 6 =
600MB。内存在4GB左右的服务器推荐设置为6-8M。
read_buffer_size = 4M
读查询操作所能使用的缓冲区大小。
和sort_buffer_size一样,该参数对应的分配内存
也是每连接独享。
join_buffer_size = 8M
联合查询操作所能使用的缓冲区大小,和
sort_buffer_size一样,该参数对应的分
配内存也是每连接独享。
query_cache_size = 64M
指定MySQL查询缓冲区的大小
max_connections = 768
指定MySQL允许的最大连接进程数。如果在
访问论坛时经常出现Too Many Connections
的错误提 示,则需要增大该参数值
wait_timeout = 10
指定一个连接请求的最大等待时间,对于4GB左右
内存的服务器可以设置为5-10。
thread_concurrency = 8
该参数取值为服务器逻辑CPU数量2,在本例中,
服务器有2颗物理CPU,而每颗物理CPU又支持H.T
超线程,所以实际取值为42=8
table_cache=1024
物理内存越大,设置就越大.默认为2402,
调到512-1024最佳。
innodb_thread_concurrency=8
你的服务器CPU有几个就设置为几,建议用默认一般为8
MyISAM和InnoDB优化
key_buffer_size
这对MyISAM表来说非常重要。如果只是使用
MyISAM表,可以把它设置为可用内存的 30-40%。
合理的值取决于索引大小、数据量以及负载
如果很少使用MyISAM表,那么也保留低于16-32MB
的key_buffer_size以适应给予磁盘的临时表索引所需。
innodb_buffer_pool_size
Innodb相比MyISAM表对缓冲更为敏感。
一般设置它高达70-80%的可用内存。
innodb_log_file_size
在高写入负载尤其是大数据集的情况下很重要。
这个值越大则性能相对越高,但是要注意到可能
会增加恢复时间。我经常设置为 64-512MB,
跟据服务器大小而异
innodb_log_buffer_size
默认的设置在中等强度写入负载以及较短事务的情
况下,服务器性能还可以。如果存在更新操作峰值
或者负载较大,就应该考虑加大它的值了。如果它的
值设置太高了,可能会浪费内存 — 它每秒都会刷新
一次,因此无需设置超过1秒所需的内存空间。通常
8-16MB 就足够了。越小的系统它的值越小。
innodb_flush_logs_at_trx_commit
把它的值设置为2就可以了,也就是不把日志刷新到磁盘上,
而只刷新到操作系统的缓存上。日志仍然会每秒刷新到磁盘中
去,因此通常不会丢失每秒1-2次更新的消耗。
table_cache
表缓存
如果你有200多个表的话,那么设置为 1024 也许比较合适(
每个线程都需要打开表),如果连接数比较大那么就加大它
的值。我曾经见过设置为 100,000 的情况。
thread_cache
线程的创建和销毁的开销可能很大,
因为每个线程的连接/断开都需要。
我通常至少设置为 16。如果应用程序中有大量的跳跃
并发连接并且 Threads_Created 的值也比较大,
加大它的值目的是在通常的操作中无需创建新线程。
query_cache
如果你的应用程序有大量读,而且没
有应用程序级别的缓存,那么这很有用。不要把它设
置太大了,因为想要维护它也需要不少开销,这会导
致MySQL变慢。通 常设置为 32-512Mb。设置完之后最
好是跟踪一段时间,查看是否运行良好。在一定的负载
压力下,如果缓存命中率太低了,就启用它。
下面是一些常见参数优化案例
thread_concurrency = 4
服务器cpu内核数(真实的并发处理数)
各种缓存大小
key_buffer = 384M 索引块缓存
max_allowed_packet = 1M
mysql服务器端和客户端在一次传送数据包的过程当中数据包的大小
table_cache = 2048
所有线程打开表的数量
sort_buffer_size = 2M 对排列缓存
read_buffer_size = 2M 读缓存
read_rnd_buffer_size = 8M 随即读排序缓存
myisam_sort_buffer_size = 64M
排序MyISAM索引分配的缓冲区
thread_cache_size = 8
可以复用的保存在缓存中的线程的数量
query_cache_size = 32M 查询缓存
tmp_table_size = 256M 临时表大小
max_heap_table_size = 256M 内存表大小
延时等待
interactive_timeout=2880000 对后续起的交互链接有效;
wait_timeout=2880000 对当前交互链接有效;
连接数
max_connections= 5000 最大并发数
max_connect_errors = 6000
是MySQL中与安全有关的计数器值,它负责阻止过
多尝试失败的客户端以防止暴力破解密码的情况。
back_log=500 堆栈队列大小
域名相关
skip-name-resolve 跳过反响解析
下面是一些查询语句
在主库上查看主库的状态:
show master status;
查看从库的状态:
show slave status;
数据库主从复制原理:
数据库的主从复制就是从master数据库复制到
slave数据库,在master与slave之间实现整个
复制需要三个线程来完成,其中两个在slave
端一个在master端。在master端必须打开binlog
功能,因为从数据库需要获得主数据的完整的
操作日志然后再自身上顺序的执行日志中的各种操作。
概要步骤:将master的bin-log写到slave的relay-log中,
然后执行里面的语句。
详细步骤:
1、将slave的io线程连上master,请求获得指定日志文
件的指定位置之后的操作日志的内容;
2、master获得slave的io线程请求后,将请求中读取到
的指定日志的指定位置之后的内容返回给slave端的io
线程,其中包括binlog 的位置以及名称;
3、slave端的io线程在接收到信息后,将接收到的日志
内容写入slave端的relay log文件的末端,并将binlog
的文件名和位置记录到master-info文件中,以便下一
次请求时向master提出请求;
4、slave的sql线程会检测到relay log中新增的一些日
志内容并加以解析成为可执行的query语句在slave端执
行,从而达到master与slave端的数据一致性。