mariadb mysql 配置文件_MariaDB/MySQL配置文件my.cnf解读

MariaDB/MySQL的默认设置性能非常差,仅仅起一个功能测试的作用,不能用在生产环境中,因此要对一些参数进行调整优化。当然,对配置文件各参数的调整需要根据实际环境,不同时期不同数量级的数据进行性能优化。

d9e4fba7095333ff420912caf4ca40c4.png

MySQL/MariaDB 配置文件位于 /etc/my.cnf。 每次更改此文件后你需要重启 MySQL 服务,以使更改生效。本文的参数配置基于MariaDB 10.2,硬件内存4G。文中一些选项值的设置只是推荐值,不要盲目的接受这些建议。每个 MySQL 设置都是不同的,在进行任何更改之前需要慎重考虑。

基本结构

[client]

port = 3306 #客户端默认连接端口

socket = /tmp/mysql.sock #用于本地连接的socket套接字

[mysqld] # 服务端基本配置

port = 3306 # mysql监听端口

socket = /tmp/mysql.sock #为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件

user = mariadb # mysql启动用户

basedir = /usr/local/mariadb # 安装目录

datadir = /data/mysql # 数据库数据文件存放目录

log_error = /data/mysql/mariadb.err #记录错误日志文件

pid-file = /data/mysql/mariadb.pid #pid所在的目录

skip-external-locking #不使用系统锁定,要使用myisamchk,必须关闭服务器

...

my.cnf配置文件以方括号如[client]区分模块作用域,其中[client]表示客户端配置,[mysqld]是服务端配置。以上几个选项是最基础的,每个选项有简单说明,其中有关路径的配置是基于本站文章:CentOS7下源码编译安装MariaDB 10.2和Linux下使用二进制格式安装MariaDB的安装路径来配置的,所以在配置前可以先按照两文先安装好MairaDB。

选项配置及说明

key_buffer_size = 32M 这个参数用来缓存MyISAM存储引擎的索引参数。MySQL5.5默认为InnoDB存储引擎,所以这个参数可以设置小点,64MB即可。

max_allowed_packet = 1M 允许最大接收数据包的大小,防止服务器发送过大的数据包。可以设置为16MB或者更大,但设置的太大也可能有危险。

table_open_cache = 128 #MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64,假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上。

sort_buffer_size = 768K 在表进行order by和group by排序操作时,由于排序的字段没有索引,会出现Using filesort,为了提高性能,可用此参数增加每个线程分配的缓冲区大小。默认为256KB,这个参数不要设置过大,一般在128~256KB即可。另外,一般出现Using filesort的时候,要通过增加索引来解决。

net_buffer_length = 8K 包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。

read_buffer_size = 768K 该参数用于表的顺序扫描,表示每个线程分配的缓冲区大小。比如在进行全表扫描时,MySQL会按照数据的存储顺序依次读取数据块,每次读取的数据块首先会暂存在read_buffer_size中,当buffer空间被写满或者全部数据读取结束后,再将buffer中的数据返回给上层调用者,以提高效率。默认为128K,这个参数不要设置过大,一般在128~256之间。

read_rnd_buffer_size = 512K 该参数用于表的随机读取,表示每个线程分配的缓冲区大小。比如,按照一个非索引字段做order by排序操作时,就会利用这个缓冲区来暂存读取的数据。默认为256KB,这个参数不要设置过大,一般在128~512KB。

myisam_sort_buffer_size = 8M 当对MyISAM表执行repair table或创建索引时,用以缓存排序索引;设置太小时可能会遇到” myisam_sort_buffer_size is too small”

thread_cache_size = 16 线程池,线程缓存。用来缓存空闲的线程,以至于不被销毁,如果线程缓存在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓存,很快就能响应连接请求。每建立一个连接,都需要一个线程与之匹配。

query_cache_size = 16M 缓存select语句和结果集大小的参数。查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。如果你的环境中写操作很少,读操作频繁,那么打开query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。

tmp_table_size = 32M 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。

explicit_defaults_for_timestamp = true 是否显示默认时间戳

#skip-networking

max_connections = 500 该参数用来设置最大连接数,告诉你当前你的服务器允许多少并发连接。默认为100,一般设置为512-1000即可。请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。

max_connect_errors = 100 如果有时网络抽风,或者应用配置错误,或者其他原因导致客户端短时间内不断的尝试连接,客户端可能会被列入黑名单,然后将无法连接,直到再次刷新主机缓存。这个选项默认值太小了,可以考虑设的足够大(如果你的服务器配置够强大的话)。

open_files_limit = 65535 mysql打开最大文件数

log-bin=mysql-bin 这些路径相对于datadir

binlog_format=mixed 日志格式

server-id = 1 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。在复制数据同步的时候会用到,Helloweba后面会有文章介绍。

expire_logs_days = 10 启用二进制日志后,保留日志的天数。服务器会自动清理指定天数前的日志文件,如果不设置则会导致服务器空间耗尽。一般设置为7~14天。

default_storage_engine = InnoDB 新数据表的默认存储引擎(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。

innodb_file_per_table = 1 InnoDB 提供了更灵活的方式,它把每个数据库的信息保存在一个 .ibd 数据文件中。每个 .idb 文件代表它自己的表空间。通过这样的方式可以更快地完成类似 “TRUNCATE” 的数据库操作,当删除或截断一个数据库表时,你也可以回收未使用的空间。这样配置的另一个好处是你可以将某些数据库表放在一个单独的存储设备。这可以大大提升你磁盘的 I/O 负载。

innodb_data_home_dir = /data/mysql InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。

innodb_data_file_path = ibdata1:10M:autoextend 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。

innodb_log_group_home_dir = /data/mysql 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。

innodb_buffer_pool_size = 128M 这个参数是InnoDB存储引擎的核心参数,默认为128KB,这个参数要设置为物理内存的60%~70%。

innodb_log_file_size = 32M 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。

innodb_log_buffer_size = 8M 事务日志所使用的缓存区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)时,再将日志写到文件(或者同步到磁盘)中。可以通过innodb_log_buffer_size参数设置其可以使用的最大内存空间。默认是8MB,一般为16~64MB即可。

innodb_flush_log_at_trx_commit = 1 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日 志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。

innodb_lock_wait_timeout = 50 如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。

示例:内存4G的my.cnf配置

[client]

port = 3306

socket = /tmp/mysql.sock

[mysqld]

port = 3306

socket = /tmp/mysql.sock

user = mariadb

basedir = /usr/local/mariadb

datadir = /data/mysql

log_error = /data/mysql/mariadb.err

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

skip-external-locking

key_buffer_size = 64M

max_allowed_packet = 1M

table_open_cache = 256

sort_buffer_size = 1M

net_buffer_length = 8K

read_buffer_size = 1M

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 16M

thread_cache_size = 32

query_cache_size = 32M

tmp_table_size = 64M

explicit_defaults_for_timestamp = true

#skip-networking

max_connections = 500

max_connect_errors = 100

open_files_limit = 65535

log-bin=mysql-bin

binlog_format=mixed

server-id = 1

expire_logs_days = 10

default_storage_engine = InnoDB

innodb_file_per_table = 1

innodb_data_home_dir = /data/mysql

innodb_data_file_path = ibdata1:10M:autoextend

innodb_log_group_home_dir = /data/mysql

innodb_buffer_pool_size = 256M

innodb_log_file_size = 64M

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit = 1

innodb_lock_wait_timeout = 50

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 64M

sort_buffer_size = 1M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 事件处理_在React中处理事件

react 事件处理在使用React渲染RESTful服务后,我们创建了简单的UI,用于渲染从RESTful服务获取的员工列表。 作为本文的一部分,我们将扩展同一应用程序以支持添加和删除员工操作。 我们将通过添加/删除员工操作来更新react-app后端api&#x…

多元回归求解 机器学习_金融领域里的机器学习算法介绍:人工神经网络

人工智能的发展在很大程度上是由神经网络、深度学习和强化学习推动的。这些复杂的算法可以解决高度复杂的机器学习任务,如图像分类、人脸识别、语音识别和自然语言处理等。这些复杂任务一般是非线性的,同时包含着大量的特征输入。我们下面我们将分几天的…

apache ignite_使用Spring Data的Apache Ignite

apache igniteSpring Data提供了一种统一而简便的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储。 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以在Spring上下文中支持持久层。 Apache Ignite IgniteRepository实现了Spri…

java事件处理过程分布写_Java 9中的进程处理

java事件处理过程分布写一直以来,用Java管理操作系统进程都是一项艰巨的任务。 这样做的原因是可用的工具和API较差。 老实说,这并非没有道理:Java并非旨在达到目的。 如果要管理OS进程,则可以使用所需的Shell,Perl脚本…

mac mysql5.7.9 dmg_Mac 安装 mysql5.7

mac 安装msql 5.7最近使用Mac系统,准备搭建一套本地web服务器环境。因为Mac系统没有自带mysql,所以要手动去安装mysql,本次安装mysql最新版5.7.28。安装步骤参考以下博客https://www.jianshu.com/p/71f81a0c62b2安装成功后,因为密…

安卓系统dicom阅读器_用户分享:电子书阅读器Note Pro,一座贴心的移动图书馆...

本文转载自“什么值得买”官网用户“小良读书”,经作者授权转载。Note Pro,一座贴心的移动图书馆移动图书馆貌美的小书郎10.3寸高清大屏更适合专业书籍的阅读如果说多年前入手了一台kindle paperwite3电纸书阅读器,它让我畅游了书籍的江河&am…

vim 编辑器命令整理

文章目录一、基本使用流程二、普通命令模式(一)切换到插入模式(编辑/写入/输入)(二)切换到可视模式(选择文本模式)(三)切换至底行命令模式(四&…

activiti dmn_端到端BPM(带有DMN标记)

activiti dmn下周的红帽峰会即将成为有史以来最好的峰会之一! 而且,如果您是Drools或jBPM的狂热者,您会很忙 :Signavio和Red Hat之间的合作伙伴关系是我们为您准备的另一个顶级演讲。 邓肯道尔(Duncan Doyle&#xff…

netbeans 9_NetBeans 9抢先体验

netbeans 9Java 9即将来临,NetBeans 9也即将来临。在本文中,我们将看到NetBeans 9 Early Access为开发人员提供的支持,以帮助他们构建Java 9兼容的应用程序。 Java 9提供了许多(大约90种) 新功能,包括模块…

同一个ip能否两次加入组播_组播IGMPv1/v2/v3精华知识汇总

闲言少叙,直奔主题,开说之前先做点铺垫,回顾一下网络的基础知识。D类地址划分回顾组播是IPv4地址分类中的D类,我们回顾一下IPv4的地址划分A类:首bit0,0-127网段,网络掩码8,其中0.0.0…

弹窗要打开或保存来自_如何让 PopClip 支持印象笔记客户端:保存到印象笔记amp;高亮文字...

自从印象笔记品牌独立并发布新APP后,Mac系统下很多工具不再支持与印象笔记客户端进行联动,PopClip 就是其中之一。目前 Popclip 官方并未将印象笔记加入到插件的支持中,不过我们可以手动修改来解决这个问题。Popclip 之所以不支持新版本的印象…

vue 混入对象_特性和混入不是面向对象的

vue 混入对象让我立刻说,我们将在这里讨论的功能是那些迫切需要进行放线手术的人带给面向对象编程的纯粹的毒药 ,就像David West在他的《 Object Thinking》一书中所建议的那样。 这些功能具有不同的名称,但是最常见的是traits和mixins 。 我…

glup node 内存不够_Redis:内存被我用完了!该怎么办?

介绍Redis是一个内存数据库,当Redis使用的内存超过物理内存的限制后,内存数据会和磁盘产生频繁的交换,交换会导致Redis性能急剧下降。所以在生产环境中我们通过配置参数maxmemoey来限制使用的内存大小。当实际使用的内存超过maxmemoey后&…

pytest框架_Python最火的第三方开源测试框架——pytest

一、介绍本篇文章是介绍的是Python 世界中最火的第三方单元测试框架:pytest。它有如下主要特性:assert 断言失败时输出详细信息(再也不用去记忆 self.assert* 名称了)自动发现测试模块和函数模块化夹具用以管理各类测试资源对 unittest 完全兼容&#xf…

jvm jstat_使用jstat的JVM统计信息

jvm jstat过去,我已经写过关于Oracle和/或OpenJDK Java开发工具包(JDK)附带的几个命令行工具的信息,但是我从来没有专门写过jstat工具 。 Oracle JDK 9文档Early Access指出jstat用于“监视Java虚拟机(JVM)…

win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具

win10怎么录屏?现在看视频的用户是越来越多了,一些经验类的视频教程越来越多,不仅能够教我们学习技能,也能给我们看一些会员才能看的视频内容,他们怎么怎么做的呢?当然是电脑录屏了,由于现在的电…

python多行注释符号_涨知识Python 为什么用 # 号作注释符?

- START -关于编程语言中的注释,其重要性基本上已为大家所共识。然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。注释符通常可分为两种,即行注释与块注释(inline/block),它们在不…

Sublime Text如何安装和卸载插件

文章目录如何查找插件如何安装插件通过包控制器安装插件手动安装插件如何卸载插件如何查找插件 建议先通过插件库来搜索你想要的插件,找到你想要的插件之后,你再选择安装方式进行安装,搜索插件请点击以下链接: Package Control中…

@insert 对象_python中列表插入append(), extend(), insert()

1 append()append:只能接收一个参数,并且只能添加在列表的最后。添加数字 In [1]: a [1,2,3] In [2]: a.append(4) In [3]: a Out[3]: [1, 2, 3, 4] 添加字符串 In [6]: a [1,2,3] In [7]: a.append("daniel") In [8]: a Out[8]: [1, 2, 3, …

常用jdk的命令行工具:_jhsdb:JDK 9的新工具

常用jdk的命令行工具:我喜欢在分析性能和基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd , jps , jstat , jinfo , jhat和jmap , jrunscript , jstack之类的 工…