max_connections: 允许客户端并发连接的最大数量, 默认值是 151, 一般将该参数设置为 500-2000
max_connect_errors: 如果客户端尝试连接的错误数量超过这个参数设置的值, 则服务器不再接受新的客户端连接. 可以通过清空主机的缓存来解除服务器的这种阻止新连接的状态, 通过 FLUSH HOSTS 或 mysqladmin flush-hosts 命令来清空缓存. 这个参数的默认值是 100, 一般将该参数设置为 100000.
interactive_timeout:MySQL 关闭交互连接前的等待时间, 单位是秒, 默认是 8 小时, 建议不要将该参数设置超过 24 小时, 即 86400
wait_timeout:MySQL 关闭非交互连接前的等待时间, 单位是秒, 默认是 8 小时, 建议不要将该参数设置超过 24 小时, 即 86400
skip_name_resolve: 如果这个参数设为 OFF, 则 MySQL 服务在检查客户端连接的时候会解析主机名; 如果这个参数设为 ON, 则 MySQL 服务只会使用 IP, 在这种情况下, 授权表中的 Host 字段必须是 IP 地址或 localhost.
这个参数默认是关闭的
back_log:MySQL 服务器连接请求队列所能处理的最大连接请求数, 如果队列放满了, 后续的连接才会拒绝. 当主要的 MySQL 线程在很短时间内获取大量连接请求时, 这个参数会生效. 接下来, MySQL 主线程会花费很短的时间去检查连接, 然后开启新的线程. 这个参数指定了 MySQL 的 TCP/IP 监听队列的大小. 如果 MySQL 服务器在短时间内有大量的连接, 可以增加这个参数.
文件相关参数 sync_binlog: 控制二进制日志被同步到磁盘前二进制日志提交组的数量. 当这个参数为 0 的时候, 二进制日志不会被同步到磁盘; 当这个参数设为 0 以上的数值时, 就会有设置该数值的二进制提交组定期同步日志到磁盘. 当这个参数设为 1 的时候, 所有事务在提交前会被同步到二进制日志中, 因而即使 MySQL 服务器发生意外重启, 任何二进制日志中没有的事务只会处于准备状态, 这会导致 MySQL 服务器自动恢复以回滚这些事务. 这样就会保证二进制日志不会丢失事务, 是最安全的选项; 同时由于增加了磁盘写, 这对性能有一定降低. 将这个参数设为 1 以上的数值会提高数据库的性能, 但同时会伴随数据丢失的风险. 建议将该参数设为 2,4,6,8,16.
expire_logs_days: 二进制日志自动删掉的时间间隔. 默认值为 0, 代表不会自动删除二进制日志. 想手动删除二进制日志, 可以执行 PURGE BINARY LOGS.
max_binlog_size: 二进制日志文件的最大容量, 当写入的二进制日志超过这个值的时候, 会完成当前二进制的写入, 向新的二进制日志写入日志. 这个参数最小值时 4096 字节; 最大值和默认值时 1GB. 相同事务中的语句都会写入同一个二进制日志, 当一个事务很大时, 二进制日志实际的大小会超过 max_binlog_size 参数设置的值. 如果 max_relay_log_size 参数设为 0, 则 max_relay_log_size 参数会使用和 max_binlog_size 参数同样的大小. 建议将此参数设为 512M.
local_infile: 是否允许客户端使用 LOAD DATA INFILE 语句. 如果这个参数没有开启, 客户端不能在 LOAD DATA 语句中使用 LOCAL 参数.
open_files_limit: 操作系统允许 MySQL 服务打开的文件数量. 这个参数实际的值以系统启动时设定的值, max_connections 和 table_open_cache 为基础, 使用下列的规则:
- 10 + max_connections + (table_open_cache * 2)
- max_connections * 5
MySQL 启动时指定 open_files_limit 的值
缓存控制参数 binlog_cache_size: 在事务中二进制日志使用的缓存大小. 如果 MySQL 服务器支持所有的存储引擎且启用二进制日志, 每个客户端都会被分配一个二进制日志缓存. 如果数据库中有很多大的事务, 增大这个缓存可以获得更好的性能.
Binlog_cache_use 和 Binlog_cache_disk_use 这两个参数对于 binlog_cache_size 参数的优化很有用. binlog_cache_size 参数只设置事务所使用的缓存, 非事务 SQL 语句所使用的缓存由 binlog_stmt_cache_size 系统参数控制. 建议不要将这个参数设为超过 64MB, 以防止客户端连接多而影响 MySQL 服务的性能.
max_binlog_cache_size: 如果一个事务需要的内存超过这个参数, 服务器会报错 "Multi-statement transaction required more than'max_binlog_cache_size'bytes". 这个参数最大的推荐值是 4GB, 这是因为 MySQL 不能在二进制日志设为超过 4GB 的情况下正常的工作. 建议将该参数设为 binlog_cache_size*2.
binlog_stmt_cache_size: 这个参数决定二进制日志处理非事务性语句的缓存. 如果 MySQL 服务支持任何事务性的存储引擎且开启了二进制日志, 每个客户端连接都会被分配二进制日志事务和语句缓存. 如果数据库中经常运行大的事务, 增加这个缓存可以获得更好的性能.
table_open_cache: 所有线程能打开的表的数量.
thread_cache_size:MySQL 服务缓存以重用的线程数. 当客户端断开连接的时候, 如果线程缓存没有使用满, 则客户端的线程被放入缓存中. 如果有客户端断开连接后再次连接到 MySQL 服务且线程在缓存中, 则 MySQL 服务会优先使用缓存中的线程; 如果线程缓存没有这些线程, 则 MySQL 服务器会创建新的线程. 如果数据库有很多的新连接, 可以增加这个参数来提升性能. 如果 MySQL 服务器每秒有上百个连接, 可以增大 thread_cache_size 参数来使 MySQL 服务器使用缓存的线程. 通过检查 Connections 和 Threads_created 状态参数, 可以判断线程缓存是否足够. 这个参数默认的值是由下面的公式来决定的: 8 + (max_connections / 100)
建议将此参数设置为 300~500. 线程缓存的命中率计算公式为(1-thread_created/connections)*100%, 可以通过这个公式来优化和调整 thread_cache_size 参数.
query_cache_size: 为查询结果所分配的缓存. 默认这个参数是没有开启的. 这个参数的值应设为整数的 1024 倍, 如果设为其他值则会被自动调整为接近此数值的 1024 倍. 这个参数最小需要 40KB. 建议不要将此参数设为大于 256MB, 以免占用太多的系统内存.
query_cache_min_res_unit: 查询缓存所分配的最小块的大小. 默认值是 4096(4KB).
query_cache_type: 设置查询缓存的类型. 当这个参数为 0 或 OFF 时, 则 MySQL 服务器不会启用查询缓存; 当这个参数为 1 或 ON 时, 则 MySQL 服务器会缓存所有查询结果(除了带有 SELECT SQL_NO_CACHE 的语句); 当这个参数为 2 或 DEMAND 时, 则 MySQL 服务器只会缓存带有 SELECT SQL_CACHE 的语句.
sort_buffer_size: 每个会话执行排序操作所分配的内存大小. 想要增大 max_sort_length 参数, 需要增大 sort_buffer_size 参数. 如果在 SHOW GLOBAL STATUS 输出结果中看到每秒输出的 Sort_merge_passes 状态参数很大, 可以考虑增大 sort_buffer_size 这个值来提高 ORDER BY 和 GROUP BY 的处理速度. 建议设置为 1~4MB. 当个别会话需要执行大的排序操作时, 在会话级别增大这个参数.
read_buffer_size: 为每个线程对 MyISAm 表执行顺序读所分配的内存. 如果数据库有很多顺序读, 可以增加这个参数, 默认值是 131072 字节. 这个参数的值需要是 4KB 的整数倍. 这个参数也用在下面场景中:
当执行 ORDER BY 操作时, 缓存索引到临时文件 (不是临时表) 中;
执行批量插入到分区表中;
缓存嵌套查询的执行结果.
read_rnd_buffer_size: 这个参数用在 MyISAM 表和任何存储引擎表随机读所使用的内存. 当从 MyISAM 表中以键排序读取数据的时候, 扫描的行将使用这个缓存以避免磁盘的扫描. 将这个值设到一个较大的值可以显著提升 ORDER BY 的性能. 然后, 这个参数会应用到所有的客户端连接, 所有不应该将这个参数在全局级别设为一个较大的值; 在运行大查询的会话中, 在会话级别增大这个参数即可.
join_buffer_size:MySQL 服务器用来作普通索引扫描, 范围索引扫描和不使用索引而执行全表扫描这些操作所用的缓存大小. 通常, 获取最快连接的方法是增加索引. 当不能增加索引的时候, 使全连接变快的方法是增大 join_buffer_size 参数. 对于执行全连接的两张表, 每张表都被分配一块连接内存. 对于没有使用索引的多表复杂连接, 需要多块连接内存. 通常来说, 可以将此参数在全局上设置一个较小的值, 而在需要执行大连接的会话中在会话级别进行设置. 默认值是 256KB.
net_buffer_length: 每个客户端线程和连接缓存和结果缓存交互, 每个缓存最初都被分配大小为 net_buffer_length 的容量, 并动态增长, 直至达到 max_allowed_packet 参数的大小. 当每条 SQL 语句执行完毕后, 结果缓存会缩小到 net_buffer_length 大小. 不建议更改这个参数, 除非你的系统有很少的内存, 可以调整这个参数. 如果语句需要的内存超过了这个参数的大小, 则连接缓存会自动增大. net_buffer_length 参数最大可以设置到 1MB. 不能在会话级别设置这个参数.
max_allowed_packet: 网络传输时单个数据包的大小. 默认值是 4MB. 包信息缓存的初始值是由 net_buffer_length 指定的, 但是包可能会增长到 max_allowed_packet 参数设置的值. 如果要使用 BLOB 字段或长字符串, 需要增加这个参数的值. 这个参数的值需要设置成和最大的 BLOB 字段一样的大小. max_allowed_packet 参数的协议限制是 1GB. 这个参数应该是 1024 整数倍.
bulk_insert_buffer_size:MyISAM 表使用一种特殊的树状缓存来提高批量插入的速度, 如 INSERT ... SELECT,INSERT ... VALUES (...),(...), ..., 对空表执行执行 LOAD DATA INFILE. 这个参数每个线程的树状缓存大小. 将这个参数设为 0 会关闭这个参数. 这个参数的默认值是 8MB.
max_heap_table_size: 这个参数设置用户创建的 MEMORY 表允许增长的最大容量, 这个参数用来 MEMORY 表的 MAX_ROWS 值. 设置这个参数对已有的 MEMORY 表没有影响, 除非表重建或执行 ALTER TABLE,TRUNCATE TABLE 语句.
这个参数也和 tmp_table_size 参数一起来现在内部 in-memory 表的大小. 如果内存表使用频繁, 可以增大这个参数的值.
tmp_table_size: 内部内存临时表的最大内存. 这个参数不会应用到用户创建的 MEMORY 表. 如果内存临时表的大小超过了这个参数的值, 则 MySQL 会自动将超的部分转化为磁盘上的临时表. 在 MySQL 5.7.5 版本, internal_tmp_disk_storage_engine 存储引擎将作为磁盘临时表的默认引擎. 在 MySQL 5.7.5 之前的版本, 会使用 MyISAM 存储引擎. 如果有很多的 GROUP BY 查询且系统内存充裕, 可以考虑增大这个参数.
innodb_buffer_pool_dump_at_shutdown: 指定在 MySQL 服务关闭时, 是否记录 InnoDB 缓存池中的缓存页, 以缩短下次重启时的预热过程. 通常和 innodb_buffer_pool_load_at_startup 参数搭配使用. innodb_buffer_pool_dump_pct 参数定义了保留的最近使用缓存页的百分比.
innodb_buffer_pool_dump_now: 立刻记录 InnoDB 缓冲池中的缓存页. 通常和 innodb_buffer_pool_load_now 搭配使用.
innodb_buffer_pool_load_at_startup: 指定 MySQL 服务在启动时, InnoDB 缓冲池通过加载之前的缓存页数据来自动预热. 通常和 innodb_buffer_pool_dump_at_shutdown 参数搭配使用.
innodb_buffer_pool_load_now: 立刻通过加载数据页来预热 InnoDB 缓冲池, 无需重启数据库服务. 可以用来在性能测试时, 将缓存改成到一个已知的状态; 或在数据库运行报表查询或维护后, 将数据库改成到一个正常的状态.
MyISAM 参数 key_buffer_size: 所有线程所共有的 MyISAM 表索引缓存, 这块缓存被索引块使用. 增大这个参数可以增加索引的读写性能, 在主要使用 MyISAM 存储引擎的系统中, 可设置这个参数为机器总内存的 25%. 如果将这个参数设置很大, 比如设为机器总内存的 50% 以上, 机器会开始 page 且变得异常缓慢. 可以通过 SHOW STATUS 语句查看 Key_read_requests,Key_reads,Key_write_requests, and Key_writes 这些状态值. 正常情况下 Key_reads/Key_read_requests 比率应该小于 0.01. 数据库更新和删除操作频繁的时候, Key_writes/Key_write_requests 比率应该接近 1.
key_cache_block_size:key 缓存的块大小, 默认值是 1024 字节.
myisam_sort_buffer_size: 在 REPAIR TABLE,CREATE INDEX 或 ALTER TABLE 操作中, MyISAM 索引排序使用的缓存大小.
myisam_max_sort_file_size: 当重建 MyISAM 索引的时候, 例如执行 REPAIR TABLE, ALTER TABLE, 或 LOAD DATA INFILE 命令, MySQL 允许使用的临时文件的最大容量. 如果 MyISAM 索引文件超过了这个值且磁盘还有充裕的空间, 增大这个参数有助于提高性能.
myisam_repair_threads: 如果这个参数的值大于 1, 则 MyISAM 表在执行 Repair 操作的排序过程中, 在创建索引的时候会启用并行, 默认值为 1.
InnoDB 参数 innodb_buffer_pool_size:InnDB 存储引擎缓存表和索引数据所使用的内存大小. 默认值是 128MB. 在以 InnDB 存储引擎为主的系统中, 可以将这个参数设为机器物理内存的 80%. 同时需要注意:
设置较大物理内存时是否会引擎页的交换而导致性能下降;
InnoDB 存储引擎会为缓存和控制表结构信息使用部分内存, 因而实际花费的内存会比设置的值大于 10%;
这个参数设置的越大, 初始化内存池的时间越长. 在 MySQL 5.7.5 版本, 可以以 chunk 为单位增加或减少内存池的大小. chunk 的大小可以通过 innodb_buffer_pool_chunk_size 参数设定, 默认值是 128MB. 内存池的大小可以等于或是 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的整数倍.
innodb_buffer_pool_instances:InnoDB 缓存池被分成的区域数. 对于 1GB 以上大的 InnoDB 缓存, 将缓存分成多个部分可以提高 MySQL 服务的并发性, 减少不同线程读缓存页的读写竞争. 每个缓存池有它单独的空闲列表, 刷新列表, LRU 列表和其他连接到内存池的数据结构, 它们被 mutex 锁保护. 这个参数只有将 innodb_buffer_pool_size 参数设为 1GB 或以上时才生效. 建议将每个分成的内存区域设为 1GB 大小.
innodb_max_dirty_pages_pct: 当 Innodb 缓存池中脏页所占的百分比达到这个参数的值时, InnoDB 会从缓存中向磁盘写入数据. 默认值是 75.
innodb_thread_concurrency:InnoDB 存储引擎可以并发使用的最大线程数. 当 InnoDB 使用的线程超过这参数的值时, 后面的线程会进入等待状态, 以先进先出的算法来处理. 等待锁的线程不计入这个参数的值. 这个参数的范围是 0~1000. 默认值是 0. 当这个参数为 0 时, 代表 InnoDB 线程的并发数没有限制, 这样会导致 MySQL 创建它所需要的尽可能多的线程. 设置这个参数可以参考下面规则:
如果用户线程的并发数小于 64, 可以将这个参数设为 0;
如果系统并发很严重, 可以先将这个参数设为 128, 然后再逐渐将这个参数减小到 96, 80, 64 或其他数值, 直到找到性能较好的一个数值.
innodb_flush_method: 指定刷新数据到 InnoDB 数据文件和日志文件的方法, 刷新方法会对 I/O 有影响. 如果这个参数的值为空, 在类 Unix 系统上, 这个参数的默认值为 fsync; 在 Windows 系统上, 这个参数的默认值为 async_unbuffered. 在类 Unix 系统上, 这个参数可设置的值如下:
fsync:InnoDB 使用 fsync()系统函数来刷新数据和日志文件, fsync 是默认参数.
O_DSYNC:InnoDB 使用 O_SYNC 函数来打开和刷新日志文件, 使用 fsync()函数刷新数据文件
littlesync: 这个选项用在内部性能的测试, 目前 MySQL 尚不支持, 使用这个参数又一定的风险
nosync: 这个选项用在内部性能的测试, 目前 MySQL 尚不支持, 使用这个参数又一定的风险
O_DIRECT:InnoDB 使用 O_DIRECT(或者 directio()在 Solaris)函数打开数据文件, 使用 fsync()刷新数据文件和日志文件
O_DIRECT_NO_FSYNC: 在刷新 I/O 时, InnoDB 使用 O_DIRECT 方式.
在有 RAID 卡和写缓存的系统中, O_DIRECT 有助于避免 InnoDB 缓存池和操作系统缓存之间的双重缓存. 在 InnoDB 数据和日志文件放在 SAN 存储上面的系统, 默认值或 O_DSYNC 方法会对以读为主的数据库起到加速作用.
innodb_data_home_dir:InnoDB 系统表空间所使用的数据文件的物理路径, 默认路径是 MySQL 数据文件路径. 如果这个参数的值为空, 可以在 innodb_data_file_path 参数里使用绝对路径
innodb_data_file_path:InnoDB 数据文件的路径和大小.
innodb_file_per_table: 当这个参数启用的时候, InnoDB 会将新建表的数据和索引单独存放在. ibd 格式的文件中, 而不是存放在系统表空间中. 当这张表被删除或 TRUNCATE 时, InnoDB 表所占用的存储会被释放. 这个设定会开启 InnoDB 的一些其他特性, 比如表的压缩. 当这个参数关闭的时候, InnoDB 会将表和索引的数据存放到系统表空间的 ibdata 文件中, 这会有一个问题, 因为系统表空间不会缩小, 这样设置会导致空间无法回放.
innodb_undo_directory:InnoDB undo 日志所在表空间的物理路径. 和 innodb_undo_logs,innodb_undo_tablespaces 参数配合, 来设置 undo 日志的路径, 默认路径是数据文件路径.
innodb_undo_logs: 指定 InnoDB 使用的 undo 日志的个数. 在 MySQL 5.7.2 版本, 32 个 undo 日志被临时表预留使用, 并且这些日志存放在临时表表空间 (ibtmp1) 中. 如果 undo 日志只存放在系统表空间中, 想要额外分配供数据修改事务用的 undo 日志, innodb_undo_logs 参数必须设置为 32 以上的整数. 如果你配置了单独的 undo 表空间, 要将 innodb_undo_logs 参数设为 33 以上来分配额外供数据修改事务使用的 undo 日志. 每个 undo 日志最多可以支持 1024 个事务. 如果这个参数没有设置, 则它会设为默认值 128.
innodb_undo_tablespaces:undo 日志的表空间文件数量. 默认, 所有的 undo 日志都是系统表空间的一部分. 因为在运行大的事务时, undo 日志会增大, 将 undo 日志设置在多个表空间中可以减少一个表空间的大小. undo 表空间文件创建在 innodb_undo_directory 参数指定的路径下, 以 undoN 格式命名, N 是以 0 开头的一系列整数. undo 表空间的默认大小为 10M. 需要在初始化 InnoDB 前设置 innodb_undo_tablespaces 这个参数. 在 MySQL 5.7.2 版本, 在 128 个 undo 日志中, 有 32 个 undo 日志是为临时表所预留的, 有 95 个 undo 日志供 undo 表空间使用.
innodb_log_files_in_group:InnoDB 日志组包含的日志个数. InnoDB 以循环的方式写入日志. 这个参数的默认值和推荐值均是 2. 日志的路径由 innodb_log_group_home_dir 参数设定.
innodb_log_group_home_dir:InnoDB 重做日志文件的物理路径, 重做日志的数量由 innodb_log_files_in_group 参数指定. 如果不指定任何 InnoDB 日志参数, MySQL 默认会在 MySQL 数据文件路径下面创建两个名为 ib_logfile0,ib_logfile1 的两个重做日志文件, 它们的大小由 innodb_log_file_size 参数设定.
innodb_log_file_size: 日志组中每个日志文件的字节大小. 所有日志文件的大小 (innodb_log_file_size * innodb_log_files_in_group) 不能超过 512GB.
innodb_log_buffer_size:InnoDB 写入磁盘日志文件所使用的缓存字节大小. 如果 innodb_page_size 参数为 32K, 则默认值是 8MB; 如果 innodb_page_size 参数为 64K, 则默认值是 16MB. 如果日志的缓存设置较大, 则 MySQL 在处理大事务时, 在提交事务前无需向磁盘写入日志文件. 建议设置此参数为 4~8MB.
innodb_flush_log_at_trx_commit: 当提交相关的 I/O 操作被批量重新排列时, 这个参数控制提交操作的 ACID 一致性和高性能之间的平衡. 可以改变这个参数的默认值来提升数据库的性能, 但是在数据库宕机的时候会丢失少量的事务. 这个参数的默认值为 1, 代表数据库遵照完整的 ACID 模型, 每当事务提交时, InnoDB 日志缓存中的内容均会被刷新到日志文件, 并写入到磁盘. 当这个参数为 0 时, InnDB 日志缓存大概每秒刷新一次日志文件到磁盘. 当事务提交时, 日志缓存不会立刻写入日志文件, 这样的机制不会 100% 保证每秒都向日志文件刷新日志, 当 mysqld 进程宕掉的时候可能会丢失持续时间为 1 秒左右的事务数据. 当这个参数为 2 时, 当事务提交后, InnoDB 日志缓存中的内容会写入到日志文件且日志文件, 日志文件以大概每秒一次的频率刷新到磁盘. 在 MySQL 5.6.6 版本, InnoDB 日志刷新频率由 innodb_flush_log_at_timeout 参数决定. 通常将个参数设为 1.
innodb_flush_log_at_timeout: 写入或刷新日志的时间间隔. 这个参数是在 MySQL 5.6.6 版本引入的. 在 MySQL 5.6.6 版本之前, 刷新的频率是每秒刷新一次. innodb_flush_log_at_timeout 参数的默认值也是 1 秒刷新一次.
innodb_lock_wait_timeout:InnDB 事务等待行锁的时间长度. 默认值是 50 秒. 当一个事务锁定了一行, 这时另外一个事务想访问并修改这一行, 当等待时间达到 innodb_lock_wait_timeout 参数设置的值时, MySQL 会报错 "ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction", 同时会回滚语句(不是回滚整个事务). 如果想回滚整个事务, 需要使用 --innodb_rollback_on_timeout 参数启动 MySQL. 在高交互性的应用系统或 OLTP 系统上, 可以减小这个参数来快速显示用户的反馈或把更新放入队列稍后处理. 在数据仓库中, 为了更好的处理运行时间长的操作, 可以增大这个参数. 这个参数只应用在 InnoDB 行锁上, 这个参数对表级锁无效. 这个参数不适用于死锁, 因为发生死锁时, InnoDB 会立刻检测到死锁并将发生死锁的一个事务回退.
innodb_fast_shutdown:InnoDB 关库模式. 如果这个参数为 0,InnoDB 会做一个缓慢关机, 在关机前会做完整的刷新操作, 这个级别的关库操作会持续数分钟, 当缓存中的数据量很大时, 甚至会持续几个小时; 如果数据库要执行版本升级或降级, 需要执行这个级别的关库操作, 以保证所有的数据变更都写入到数据文件. 如果这个参数的值是 1(默认值), 为了节省关库时间, InnoDB 会跳过新操作, 而是在下一次开机的时候通过 crash recovery 方式执行刷新操作. 如果这个参数的值是 2,InnoDB 会刷新日志并以冷方式关库, 就像 MySQL 宕机一样, 没有提交的事务会丢失, 在下一次开启数据库时, crash recovery 所需要的时间更长; 在紧急或排错情形下, 需要立刻关闭数据库时, 会使用这种方式停库.
最后附上生产环境中的 my.cnf 文件
- [mysqld]
- # 指定端口 不指定默认 3306
- #port=5603
- # MySQL 数据存放路径
- datadir=/var/lib/MySQL
- # MySQL socker 文件存放路径
- socket=/var/lib/MySQL/MySQL.sock
- # 创建符号链接(建议禁用符号链接, 以防止各种安全风险. 开启将参数的值设置为 1)
- symbolic-links=0
- # 错误日志存放路径
- log-error=/var/log/mysqld.log
- # 启动 pid 文件存放路径
- pid-file=/var/run/mysqld/mysqld.pid
- # 设置主从的时候的唯一 ID 每台主机的 ID 不可重复
- server-id=1
- # #打开日志(主机需要打开), 这个 MySQL-bin 也可以自定义, 这里也可以加上路径, 如:/home/www/mysql_bin_log/MySQL-bin
- log-bin=MySQL-bin
- # 设定 MySQL 的复制模式(STATEMENT ROW MIXED)
- binlog_format=mixed
- # 绕过密码验证可直接使用 root 登录(用于修改密码)
- #skip-grant-tables=1
- # 启动服务器来禁用主机名缓存
- skip-host-cache
- # 如果这个参数设为 OFF, 则 MySQL 服务在检查客户端连接的时候会解析主机名; 如果这个参数设为 ON, 则 MySQL 服务只会使用 IP, 在这种情况下, 授权表中的 Host 字段必须是 IP 地址或 localhost.
- skip-name-resolve
- # 网络传输时单个数据包的大小
- max_allowed_packet = 500M
- # 设置数据库的时间
- default-time-zone = '+8:00'
- # 内部内存临时表的最大内存
- tmp_table_size=200M
- # MySQL 服务器用来作普通索引扫描, 范围索引扫描和不使用索引而执行全表扫描这些操作所用的缓存大小.
- join_buffer_size = 32M
- # 每个会话执行排序操作所分配的内存大小.
- sort_buffer_size = 1M
- # 每个客户端线程和连接缓存和结果缓存交互, 每个缓存最初都被分配大小为 net_buffer_length 的容量, 并动态增长, 直至达到 max_allowed_packet 参数的大小
- net_buffer_length = 8K
- # 为每个线程对 MyISAm 表执行顺序读所分配的内存. 如果数据库有很多顺序读, 可以增加这个参数, 默认值是 131072 字节.
- read_buffer_size = 512K
- # 这个参数用在 MyISAM 表和任何存储引擎表随机读所使用的内存.
- read_rnd_buffer_size = 32M
- # 在 REPAIR TABLE,CREATE INDEX 或 ALTER TABLE 操作中, MyISAM 索引排序使用的缓存大小.
- myisam_sort_buffer_size = 256M
- # 设置客户端的并发连接数量
- max_connections = 8000
- # MySQL 关闭非交互连接前的等待时间, 单位是秒
- wait_timeout = 604800
- # MySQL 关闭交互连接前的等待时间, 单位是秒
- interactive_timeout = 604800
- # 设定远程用户必须回应 PORT 类型数据连接的最大时间
- connect_timeout = 30
- # 如果客户端尝试连接的错误数量超过这个参数设置的值, 则服务器不再接受新的客户端连接. 可以通过清空主机的缓存来解除服务器的这种阻止新连接的状态, 通过 FLUSH HOSTS 或 mysqladmin flush-hosts 命令来清空缓存.
- max_connect_errors = 30000
- # MySQL 关闭连接前的等待时间, 单位是秒
- interactive_timeout = 86400
- # 慢查询的时间设置, 单位为秒
- long_query_time = 20
- # MySQL 服务缓存以重用的线程数
- thread_cache_size = 120
- # 为查询结果所分配的缓存
- query_cache_size = 256M
- # 如果一个事务需要的内存超过这个参数, 就会报错
- max_heap_table_size=2097152000
- # 允许一些不合法的操作, 5.7 版本默认不为空, 可以定义(sql_mode='')
- sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
- # 用来存放 Innodb 的内部目录 这个值不用分配太大, 系统可以自动调.
- #innodb_additional_mem_pool_size = 16M
- # 日志组中每个日志文件的字节大小. 所有日志文件的大小 (innodb_log_file_size * innodb_log_files_in_group) 不能超过 512GB.
- innodb_log_file_size = 256M
- # InnoDB 日志组包含的日志个数. InnoDB 以循环的方式写入日志. 这个参数的默认值和推荐值均是 2. 日志的路径由 innodb_log_group_home_dir 参数设定.
- innodb_log_files_in_group=2
- # InnoDB 写入磁盘日志文件所使用的缓存字节大小.
- innodb_log_buffer_size=16M
- # 当这个参数启用的时候, InnoDB 会将新建表的数据和索引单独存放在. ibd 格式的文件中, 而不是存放在系统表空间中.
- innodb_file_per_table=1
- # InnoDB 数据文件的路径和大小.
- innodb_data_file_path = ibdata1:10M:autoextend
- # InnDB 存储引擎缓存表和索引数据所使用的内存大小
- innodb_buffer_pool_size = 8192M
- # 当提交相关的 I/O 操作被批量重新排列时, 这个参数控制提交操作的 ACID 一致性和高性能之间的平衡.
- innodb_flush_log_at_trx_commit = 2
- # InnDB 事务等待行锁的时间长度. 默认值是 50 秒.
- innodb_lock_wait_timeout = 50
- # 指定刷新数据到 InnoDB 数据文件和日志文件的方法, 刷新方法会对 I/O 有影响.
- innodb_flush_method=O_DIRECT
来源: http://www.linuxidc.com/Linux/2018-11/155526.htm