MySQL configuration file parameters

[client]

MySQL默认密码

password=88888888

[mysqld]

MySQL以什么用户运行

user=mysql

MySQL运行在哪个端口

port=3306

改参数指定了安装MySQL的安装路径,填写全路径可以解决相对路径所造成的问题

basedir

指定MySQL的数据库文件放在什么路径下

datadir=/usr/local/mysql/data

mysql以socket方式运行的sock文件位置

socket=/usr/local/mysql/mysql.sock

是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或者目录,为0不开启

symbolic-links=0

服务器使用的字符集

character-set-server=utf8

默认存储引擎

default-storage-engine=INNODB

表示默认将日志文件存入文件,默认值是'FILE'

如果时候log-output=TABLE表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中

log-output=FILE

1开启,0关闭 将所有到达MySQL Server的SQL语句记录下来

general-log=0

设置日志文件保存位置

general_log_file="JOYWANG.log"

慢查询日志是否开启1,0

slow-query-log=1

慢查询日志文件保存

slow_query_log_file="JOYWANG-slow.log"

慢查询日志设置时间单位秒 S

long_query_time=10

是否启用错误日志的功能和错误日志的存储位置

log-error="JOYWANG.err"

如果不设置则server-id是根据服务器ip地址后2位生成的,默认0或1

当配置MySQL复制时,是必填项,用来区分复制拓扑中的各个实例

server-id=1

限制导入和导出的目录权限NULL表示禁止、如果是文件目录,允许该目录下文件(测试子目录不行)、如果为空则表示不限制目录,一定要有等号,否则mysql无法启动

secure-file-priv=

最大并发连接数,mysql会为每个连接提供缓冲区,会开销越多的内存,所以要适当的调整该值,不能盲目的提高设置值

max_connections=151

指定高速缓存的大小,每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容单位M

table_open_cache=2000

增加一张临时表大小,提高查询速度

tmp_table_size=16M

线程池缓存大小,当客户端断开连接后,将当前线程缓存起来,当在接到新的连接请求时快速响应,无需创建新的线程

thread_cache_size=10

MySQL重建索引时允许使用的临时文件最大大小

myisam_max_sort_file_size=100G

设置在REPAIR TABLE,或者用 CREATE INDEX 创建索引或 ALTER TABLE 的过程中排序索引所分配的缓冲区大小。可设置范围4Bytes 至 4GB,默认为8MB。

myisam_sort_buffer_size=8M

指定索引缓冲区的大小,决定了索引处理的速度,尤其是索引读的速度,建议设置成物理内存的1/4,甚至物理内存的30%-40%,如果设置太大,系统就会频繁的换页,降低系统性能

key_buffer_size=8M

MySQL读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

read_buffer_size=0

参数用在sort查询之后 ,以保证获取以顺序的方式获取到查询的数据。如果你有很多order by 查询语句,增长这值能够提升性能

read_rnd_buffer_size=0

0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。

1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。

2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

innodb_flush_log_at_trx_commit=1

确保有足够大的日志缓冲区来保存脏数据在被写入到日志文件之前

innodb_log_buffer_size=1M

指定表数据和索引存储的空间,可以是一个或者多个文件。最后一个数据文件必须是自动扩充的,也只有最后一个文件允许自动扩充。这样,当空间用完后,自动扩充数据文件就会自动增长(以8MB为单位)以容纳额外的数据。例如: innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend两个数据文件放在不同的磁盘上。数据首先放在ibdata1中,当达到900M以后,数据就放在ibdata2中。一旦达到50MB,ibdata2将以 8MB为单位自动增长。如果磁盘满了,需要在另外的磁盘上面增加一个数据文件。

innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend

这是InnoDB最重要的设置,对InnoDB性能有决定性的影响。默认的设置只有8M,所以默认的数据库设置下面InnoDB性能很差。在只有InnoDB存储引擎的数据库服务器上面,可以设置60-80%的内存。更精确一点,在内存容量允许的情况下面设置比InnoDB tablespaces大10%的内存大小。

innodb_buffer_pool_size=8M

放置表空间数据的目录,默认在mysql的数据目录,设置到和MySQL安装文件不同的分区可以提高性能。

innodb_data_home_dir=

该参数决定了recovery speed。太大的话recovery就会比较慢,太小了影响查询性能,一般取256M可以兼顾性能和recovery的速度

innodb_log_file_size=48M

该参数设定了事务提交时内存中log信息的处理。

  1. =1时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。Truly ACID。速度慢。
  2. =2时,在每个事务提交时,日志缓冲被写到文件, 但不对日志文件做到磁盘操作的刷新。只有操作系统崩溃或掉电才会删除最后一秒的事务,不然不会丢失事务。
  3. =0时, 日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新。任何mysqld进程的崩溃会删除崩溃前最后一秒的事务
    innodb_flush_logs_at_trx_commit=2

设置InnoDB同步IO的方式:

) Default – 使用fsync()。

  1. O_SYNC 以sync模式打开文件,通常比较慢。
  2. O_DIRECT,在Linux上使用Direct IO。可以显著提高速度,特别是在RAID系统上。避免额外的数据复制和double buffering(mysql buffering 和OS buffering)。
    innodb_flush_method=Default

InnoDB kernel最大的线程数。

  1. 最少设置为(num_disks+num_cpus)*2。
  2. 可以通过设置成1000来禁止这个限制
    innodb_thread_concurrency=25

此配置项作用主要是当tablespace 空间已经满了后,需要MySQL系统需要自动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加自动扩展Size可以减少tablespace自动扩展次数。

innodb_autoextend_increment=64

可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写。

innodb_buffer_pool_instances=8

这个参数设置为一种tickets,默认是5000,我也不清楚到底它代表多久,从官方文档来看它和事物处理的行数有关,大事物需要处理的行数自然更多,小事物当然也就越少至少我们可以想成获得CPU的时间,干活期间他会不断减少,如果减少到0,这个线程将被提出innodb层次,进入前面说的等待队列,当然也就在队尾部了,这里假设有一个小的事物正在排队进入innodb层,又或者它已经进入了innodb层没有获得CPU时间轮片,突然一个大的事物tickets耗尽被提出了innodb层,那么这个小事物就自然而然能够获得CPU轮片干活,而小事物执行非常快,执行完成后,另外的事物又能尽快的获得CPU干活,不会由于OS线程调度不均匀的问题而造成的小事物饥饿问题,这很好理解。也就是前面我说的与其依赖OS的调度策略不如自己设置一种规则,让用到了一定时间轮片的线程先处于睡眠态放弃CPU的使用

innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0

可以存储每个InnoDB表和它的索引在它自己的文件中。

innodb_file_per_table=1

如果应用程序可以运行在READ-COMMITED隔离级别,做此设定会有一定的性能提升。

transaction-isolation=READ-COMITTED

这个参数用来表示 页读取到mid位置后,需要等待多久才会被加入到LRU列表的热端。使LRU列表中的热点数据不被刷出

innodb_checksum_algorithm=0

MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中

back_log=80
flush_time=0

如果按照检索的性能方式来细分,那么无论是两表 INNER JOIN 还是多表 INNER JOIN,都大致可以分为以下几类:1.JOIN KEY 有索引,主键2.JOIN KEY 有索引, 二级索引3.JOIN KEY 无索引;JOIN BUFFER 是 MySQL 用来缓存以上第二、第三这两类 JOIN 检索的一个 BUFFER 内存区域块。

join_buffer_size=256K

可以增大此值以便于server端接收更大的SQL

max_allowed_packet=4M

同一主机最大连续请求错误次数,如果还没成功建立连接,mysql服务器会组织这台主机后续的所有请求

max_connect_errors=100

限制mysqld能打开文件的最大数

open_files_limit=4161

一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存

sort_buffer_size=256K

就是控制总frm文件的数量,还是个hash表,内部维护。如果打开的表实例的数量超过了table_definition_cache设置,LRU机制将开始标记表实例以进行清除,并最终将它们从数据字典缓存中删除。简单通俗点frm文件有多少,就设置多少了

table_definition_cache=1400

指定基于行的二进制日志事件的最大大小

binlog_row_event_max_size=8K

本参数用于主从库中配置从库大于0作用为每个命令之后刷盘,小与0作为为永不刷盘,默认均为1000

sync_master_info=10000

这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。

sync_relay_log=10000

这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值

sync_relay_log_info=10000

参数不可动态修改,必须重启数据库

1:存储在磁盘是小写,比较时不区分大小写

2:存储为给定的大小写但是比较时是小写

0:存储为给定的大小写和比较时区分大小写的

lower_case_table_names = 1

ONLY_FULL_GROUP_BY:归于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO:该值影响自增常烈的插入。默认设置下,插入0或者NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了

STRICT_TRANS_TABLES:如果一个值不能插入到一个事物中,则中断当前操作,对非事物不做限制

NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:mysql不允许插入零日期,插入零日期会抛出错误而不是警告

ERROR_FOR_DIVISION_BY_ZERO:在insert或update过程中,如果数据被清除,则产生错误而非警告。如果未给出该模式,那么数据被清除时Mysql返回NULL

NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:将“||”是为字符串的链接操作符而非运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat相类似

ANSI_QUOTES:不能用双引号来引用字符串,因为它被解释为识别符

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容