首页 / 论坛BBS / 云主机

配置及说明

[client]
port = 3306  
socket = /tmp/mysql.sock

[mysqld]
# 启用MySQL的账号
user = mysql

# 使用端口
port = 3306

# 使用 Socket 地址  
socket = /tmp/mysql.sock

# MySQL安装基本地址  
basedir = /usr/local/mysql

# 数据库保存地址,要求有写入权限
datadir = /data/mysql/data/

# 禁止对外部连接进行 DNS 解析,加快连接速度。不影响使用localhost配合socket来访问
skip-name-resolve

# 避免外部锁定,减少出错几率、增强稳定性
skip_external_locking

# 允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值。默认151
# 直接影响 Mysql 应用的并发处理能力( 500-1000 是个比较合适的值,注意每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存 )
max_connections = 1000

# 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关
# 当超过该次数服务器将禁止连接请求,直到服务器重启或通过flush hosts命令清空此host的相关信息。
# 默认100
max_connect_errors = 1000

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句( 一般临时开启即可 )
slow_query_log = on

# 定义执行时间超过多少秒为慢查询,默认 10s
long_query_time = 2

# 定义慢查询日志存放位置
slow_query_log_file = /usr/local/mysql/data/slow.log

# 将没有使用索引的查询也记录下来
log-queries-not-using-indexes


# Mysql Server 唯一标识,用来做主同同步( 主从时开启 )
server-id = 1

# 开启 binlog ( 二进制 ) 日志,主要用来做增量备份跟主从同步
log-bin = mysql-bin

# Mysql binlog 的日志格式,Statement、ROW 跟 Mixed( 混合模式 )
binlog_format = mixed

# 二进制日志缓冲大小,此参数是为每 Session 单独分配的
# 当一个线程开始一个事务时,Mysql 就会为此 Session 分配一个 binlog cache
# 当这个事务提交时,binlog cache 中的数据被写入 binlog 文件
# 通过 show status like 'binlog_cache%' 来查看使用 binlog cache 的次数及使用磁盘的次数
binlog_cache_size = 2M

# 这个参数对 Mysql 系统来说很重要,不仅影响到 binlog 对 Mysql 所带来的性能损耗,还影响到 Mysql 中数据的完整性。
# 值为 0 时代表事务提交后,不做磁盘同步指令刷新日志缓存信息到磁盘,而让系统自行决定什么时候同步,或者缓存满了之后才同步磁盘。
# 值为 n 时代表进行 n 次事务提交后,数据库将进行一次磁盘同步指令来将日志缓存中的数据强制写入磁盘。
# 系统默认将此参数设置为 0 ,即不做任何强制性的磁盘刷新指令,性能最好,但是风险也最大。当系统崩溃时日志缓存中的所有日志信息都会丢失。
# 而设置为 1 时,是最安全但是性能损耗最大。当系统崩溃时,最多丢失日志缓存中中未完成的一个事务,对实际数据没有实质性的影响。
sync_binlog = 0

# 保留 30 天的二进制日志,系统重启、执行 flush logs 或 binlog 日志文件大小达到上限时删除 binlog 日志
expire_logs_days = 30

# 服务器关闭非交换连接之前等待活动的秒数,即处理完一条连接后所等待释放的时间,默认 28800 秒
# 注意:在 my.cnf 中修改这个参数需要配合 interactive_timeout (超时间隔)参数一起修改,否则不生效
# 如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误
# 如果这个值很低,比如 5 ,可能会导致出现 "ERROR 2006 (HY000) MySQL server has gone away" 的错误
# 对于非交互式连接,类似于jdbc连接,wait_timeout的值继承自服务器端全局变量 wait_timeout。
# 对于交互式连接,类似于mysql客户单连接,wait_timeout的值继承自服务器端全局变量 interactive_timeout。
# 关于 wait_timeout 和 interactive_timeout 可查看文章:https://www.cnblogs.com/ivictor/p/5979731.html 有具体测试说明
wait_timeout = 100
interactive_timeout = 100

# 连接超时时间为 20 秒
connect_timeout = 20

# 网络传输中一次消息量的最大值,默认 4M,最大值是1GB,必须设为 1024 的整倍数
# 如果这个值很小,也可会导致出现 "ERROR 2006 (HY000) MySQL server has gone away" 错误
max_allowed_packet = 16M

# 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源( 对性能有影响,默认 2000 )
table_open_cache = 2000

# Sort_Buffer_Size 参数是一个链级参数,在每个连接(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。
# 该值并不是越大越好,由于是链级的参数,过大的设置+高并发可能会耗尽系统内存资源。
# 例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存
# Sort_Buffer_Size 超过2KB的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低。
# 系统默认2M,使用默认值即可
sort_buffer_size = 2M

# 用于表间关联缓存的大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每个连接独享。
# 系统默认2M,使用默认值即可
join_buffer_size = 2M


# thread_cache_size 这个值表示可以重新利用保存在缓存中线程的数量,
# 当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取
# 如果缓存中是空的或者是新的请求,那么这个线程将被重新创建。
# 如果有很多新的线程,增加这个值可以改善系统性能。
# 通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。
thread_cache_size = 300

# 设置 thread_concurrency 的值的正确与否, 对mysql的性能影响很大,
# 在多个CPU(或多核)的情况下,错误设置了该值, 会导致数据库不能充分利用多CPU(或多核),出现同一时刻只能一个CPU(或核)在工作的情况。
# thread_concurrency 应设为(CPU数 + 核数)的2倍。
# 比如有一个双核的CPU, 那么值应该为4;2个双核的CPU, 值应为8
thread_concurrency = 8   

# 对于使用MySQL的用户,对于这个变量大家一定不会陌生。前几年的MyISAM引擎优化中,这个参数也是一个重要的优化参数。
# 但随着发展,这个参数也爆露出来一些问题。机器的内存越来越大,人们也都习惯性的把以前有用的参数分配的值越来越大。
# 这个参数加大后也引发了一系列问题。我们首先分析一下 query_cache_size 的工作原理:
# 一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,DB在该表没发生变化的情况下把结果从缓存中返回给Client。
# 这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。
# 那如果该表在发生变更时,Query_cache里的数据又怎么处理呢?首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。
# 那么如果Query_cache非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。
# 所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。
# 而且在高并发,写入量大的系统,建议把该功能禁掉。
query_cache_size = 64M   

# 指定单个查询能够使用的缓冲区大小,缺省为1M
query_cache_limit = 4M

    
# 默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费
# 查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
# 如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
# 查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
# 查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小
# 查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
# 查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
query_cache_min_res_unit = 2k

# 设置MYSQL每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128K至4GB,默认为192KB。
thread_stack = 192K  

# 设定默认的事务隔离级别,MySQL默认使用 REPEATABLE-READ,可用的级别如下:
# READ-UNCOMMITTED,READ-COMMITTED,REPEATABLE-READ,SERIALIZABLE
# 1、READ UNCOMMITTED - 读未提交
# 2、READ COMMITTE - 读已提交
# 3、REPEATABLE READ - 可重复读
# 4、SERIALIZABLE - 串行
# transaction_isolation = REPEATABLE-READ

# tmp_table_size 的默认大小是 32M。
# 如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误。
# 它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
# 如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认: show variables like "tmpdir"
# 优化查询语句的时候,要避免使用临时表,如果实在避免不了的话,要保证这些临时表是存在内存中的。
# 如果需要的话并且你有很多group by语句,并且你有很多内存,增大tmp_table_size(和max_heap_table_size)的值。
# 这个变量不适用与用户创建的内存表(memory table).
# 可以比较内部基于磁盘的临时表的总数和创建在内存中的临时表的总数(Created_tmp_disk_tables和Created_tmp_tables),一般的比例关系是:
# Created_tmp_disk_tables/Created_tmp_tables < 5%
tmp_table_size = 256M

# 这个变量定义了用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
# 这个变量支持动态改变,即set @max_heap_table_size=#
# 但是对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)或者修改(alter table)或者truncate table。
# 服务重启也会设置已经存在的内存表为全局max_heap_table_size的值。
# 这个变量和tmp_table_size一起限制了内部内存表的大小。
max_heap_table_size = 256M

# key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。
# 通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。
# 比例key_reads /key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%'获得)。
# key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。
# 可以使用检查状态值created_tmp_disk_tables得知详情。
# 对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)
# 对于内存在4GB左右的服务器该参数可设置为256M或384M
key_buffer_size = 256M

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

# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。
# 但MySQL会为每个连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
read_rnd_buffer_size = 32M

#批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 64M

# MyISAM表发生变化时重新排序所需的缓冲 默认8M
myisam_sort_buffer_size = 128M

#自动检查和修复没有适当关闭的 MyISAM 表
myisam_recover

#这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,类似于Oracle的library cache。这不是一个强制参数,可以被突破。
innodb_additional_mem_pool_size = 16M

# 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。
# MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。
# 由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。
# 一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了
# Innodb 存储引擎核心参数,用于缓存 Innodb 表的索引、数据
# 默认 128M ,单独使用 Innodb 存储引擎且单一 Mysql 服务时建议设为物理内存的百分之七八十
# 可以通过 show status like 'innodb_buffer_pool_%' 来获取 innodb buffer pool 的实时状态信息
# Innodb_buffer_pool_pages_total 总共的 pages( Innodb 存储引擎中所有数据存放最小物理单位 page ,每个 page 默认为 16KB )
# Innodb_buffer_pool_pages_free  空闲的 pages
# Innodb_buffer_pool_pages_data  有数据的 pages
# Innodb_buffer_pool_read_requests  总共的 read 请求次数
# Innodb_buffer_pool_reads  读取物理磁盘读取数据的次数,即:在 buffer pool 中没有找到
# Innodb_buffer_pool_wait_free  因 buffer 空间不足而产生的 wait_free
# Innodb_buffer_pool_read_ahead_rnd  记录进行随机读的时候产生的预读次数
# Innodb_buffer_pool_read_ahead_seq  记录连续读的时候产生的预读次数
# Innodb_buffer_pool_size  使用率 = innodb_buffer_pool_pages_data / innodb_buffer_pool_pages_total * 100%
# Innodb_buffer_pool_read  命中率 = ( innodb_buffer_pool_read_requests - innodb_buffer_pool_reads )/ innodb_buffer_pool_read_requests * 100%
innodb_buffer_pool_size = 512M

# 表空间文件 重要数据
# 设置过大导致报错,默认12M观察
#innodb_data_file_path = ibdata1:1024M:autoextend

# 文件IO的线程数,一般为 4,但是在 Windows 下,可以设置得较大。
# 不明确,使用默认值
#innodb_file_io_threads = 4

# Innodb 线程并发数,0 为不限制,默认 0
innodb_thread_concurrency = 0

# 如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。
# 为提供性能,可以设置为0或2,但要承担在发生故障时丢失数据的风险。
# 设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。
# 设置为2表示事务日志将在提交时写入日志,但日志文件每次刷新到磁盘一次。
innodb_flush_log_at_trx_commit = 2

# 使用默认8M
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据
# MySQL开发人员建议设置为1-8M之间
innodb_log_buffer_size = 16M

# 使用默认48M
# 此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_log_file_size = 128M

# 默认为50秒
# InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。
# 但是,如果结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB无法识别死锁。
# 为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值
# 指示 MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数)
innodb_lock_wait_timeout = 120

# 默认为0
# 独享表空间(关闭)
innodb_file_per_table = 0

# Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 4
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# 使用系统自带的内存分配器,替代 innodb_additional_mem_pool_size 参数
innodb_use_sys_malloc = 1

# 关闭数据库时把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_at_shutdown = 1

# 采用手工方式把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_now = 1

# 启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup = 1

# 采用手工方式把热数据加载到内存。
innodb_buffer_pool_load_now = 1

上述配置是从网上各个教程里检索整理出来,如有不对的地方,请回复。

请先 登录注册,才支持回复
论坛咨询