mysql配置文件my.cnf详解

Mysql配置详解:


1,错误日志

--log-error[=file_name]指定mysqld(mysql服务器)保存错误日志文件的位置。


2,二进制日志

--log-bin[=file_name]mysqld将包含所有更新数据的SQL命令写入日志文件。

二进制日志需要用mysqlbinlog工具来查看,语法如下:

#mysqlbinlog log_file

--binlog-do-db=db_name如果当前的数据库是db_name,应该更新记录到二进制日志中

--binlog-ignore-db=db_name如果当前的数据库是db_name,不应该更新记录到二进制日志中

如果多个数据库,可如下写法:

--binlog-do-db=db1

--binlog-do-db=db2

单个库的主从同步:

replicate_do_db=test

replicate_wild_do_table=test.%

replicate_ignore_db=mysql

replicate_wild_ignore_table=mysql.%

log-slave-updates = 1这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的。


3,查询日志

记录了客户端所有的语句,而二进制日志不包含只查询数据库的语句

--log[=file_name]启动mysqld时,查询日志开始被记录,默认文件名是host_name.log


4,慢查询日志

slow_query_log = 1

slow_query_log_file = /opt/logs/mysql5/mysql-slow.log

long_query_time = 1

如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具来对慢查询日志进行分类汇总

#mysqldumpslow ****-slow.log


5,配置文件详解:

wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.10.tar.gz

# vi /etc/my.cnf

以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。

[mysqld]

character-set-server = utf8

user    = mysql

port    = 3306

socket  = /data/mysql/3306/mysql.sock

basedir = /usr/local/webserver/mysql

datadir = /data/mysql/3306/data

log-error = /data/mysql/3306/mysql_error.log

pid-file = /data/mysql/3306/mysql.pid


default-storage-engine = MyISAM/InnoDB

设置默认存储引擎

skip-locking

避免MySQL的外部锁定,减少出错几率增强稳定性。

skip-name-resolve

禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

skip-networking

开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果CentOS系统WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

skip-slave-start 

启动mysql,不启动复制 

back_log = 384

指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。默认值为50。对于Linux系统推荐设置为小于512的整数。

max_allowed_packet = 16M

设置最大包,限制server接受的数据包大小,避免超长SQL的执行有问题,默认值为16M,当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。

key_buffer_size = 256M

指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低! 

sort_buffer_size = 6M

查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。

read_buffer_size = 4M

读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!

innodb_buffer_pool_size = 4G

这是一个重要变量。可以把这个值设为内存的70%-80%。和key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。

innodb_additional_mem_pool_size = 512M

这个的效果不是很明显,至少是当操作系统能合理分配内存时。但你可能仍需要设成20M或更多一点以看Innodb会分配多少内存做其他用途。

innodb_log_file_size = 1G

对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。

innodb_log_buffer_size = 256M

这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于BinlogBuffer,在写事务日志的时候,为了提高性能,也是先将信息写入Buffer中,当满足相应条件才会写入。

innodb_flush_log_at_trx_commit = 2

首先需要大致了解一下mysql日志操作步骤:

log_buff ---mysql写 (write)---> log_file ---OS刷新 (flush)---> disk

参数解释:

0(延迟写): log_buff  --每隔1秒--> log_file  ―实时―> disk

1(实时写,实时刷): log_buff  ―实时―>  log_file  ―实时―> disk

2(实时写,延迟刷): log_buff  ―实时―> log_file --每隔1秒--> disk

table_cache = 512

参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。因此, table_cache 的大小应与 max_connections 的设置有关。

tmp_table_size = 256M

默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY查询,增加tmp_table_size 值。

max_connections = 768

指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提示,则需要增大该参数值。

max_connect_errors = 10000

如果某个用户发起的连接error超过该数值,则该用户的下次连接将被阻塞,直到管理员执行flush hosts ; 命令;防止黑客

wait_timeout = 10

指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。

innodb_file_per_table

开启了Innodb的innodb_file_per_table这个参数之后[innodb_file_per_table = 1],也就是启用InnoDB的独立表空间模式,便于管理。


6,数据库的主主同步时需要设置自增长的两个相关配置:

auto_increment_offset表示自增长字段从那个数开始,其默认值是1,取值范围是1..65535

auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1..65535

在主主同步配置时,需要将两台服务器的auto_increment_increment=2,而要把auto_increment_offset分别配置为1和2,这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。


7,延迟备份

Mysql (需5.6以上版本)延迟复制配置,通过设置Slave上的MASTER TO MASTER_DELAY参数实现:

CHANGE MASTER TO MASTER_DELAY = N;

N为多少秒,该语句设置从数据库延时N秒后,再与主数据库进行数据同步复制


具体操作:

登陆到Slave数据库服务器

mysql>stop slave;

mysql>CHANGE MASTER TO MASTER_DELAY = 600;

mysql>start slave;

mysql>show slave status \G;

查看SQL_Delay的值为600,表示设置成功。

注释:

SQL_Delay:一个非负整数,表示秒数,Slave滞后多少秒于master。

SQL_Remaining_Delay:当Slave_SQL_Running_State等待,直到MASTER_DELAY秒后,Master执行的事件,此字段包含一个整数,表示有多少秒左右的延迟。在其他时候,这个字段是NULL。


同步到指定位置:

STOP SLAVE;

CHANGE MASTER TO MASTER_DELAY = 0, RELAY_LOG_FILE = 'xxxxx-relay-bin.######', RELAY_LOG_POS = ######;

START SLAVE;

你可能感兴趣的:(mysql,my.cnf)