MySQL做为一种常见的数据库管理系统(DBMS),其自身的各类配置项极大的影响了其性能。因此有必要进行了解和学习。html
我最近在看《高性能Mysql》,其中第8章讲解了关于配置的不少事项,都值得了解和学习。固然,官网也是最新信息查阅的重要渠道。mysql
官网【可在5.1 TheMySQL Server找到配置解释。可在5.4找到BinLog相关内容。 】
通常来讲,MySQL服务端配置文件的默认位置是:/etc/my.cnf
或者 /etc/mysql/my.cnf
【也能够经过mysqld --verbose --help|grep -A 1 'Default option'
确认配置文件的位置】nginx
和nginx相似,也能够选择分目录进行include,便于管理总体配置结构。 (好比!includedir /etc/my.cnf.d
而后在my.conf.d
目录里对不一样的配置项分文件。
一、mysql配置文件是分段的,要注意配置项放在了正确的段里(好比服务器主要用 [mysqld] 这一段git
一、反作用: 一些配置项会产生反作用,临时修改配置须要很是当心。(好比变动query\_cache\_size
会 当即删除全部查询的缓存,从新构建。
二、变量的值:变量不是越大越好,可能会致使内存交换或者超出地址空间。须要跟进状况设定。
二、配置项有不一样的做用域,有的是全局,有的是会话。其次,还有动态变量,可在运行时修改。【也就是说,大部分非动态变量须要重启才能生效】
三、全局变量:修改后对当前会话及已存在的会话均不生效。可经过SHOW GLOBAL VARIABLES
确认。
四、变量的单位:配置时要注意单位,命令行或者配置文件,可使用后缀指定单位(好比1M等,但要注意,使用SQL的SET指令时就不能使用单位。
五、配置文件管理:最好使用git来进行版本管理,加上充足的注释。能够避免很多问题。sql
一、一个好的配置,不是从学习配置项开始,也不是询问怎么设置或者怎么修改,更不是观察服务器行为和询问哪一个配置能够提高性能。
【应该是从理解MySQL内核和行为开始】
二、保证基础配置都正确(好比日志路径,缓存配置,端口号,数据库存储位置等。如非必要,尽可能使用默认配置。(默认配置经受过的测试是最多的。
三、优先进行语句优化等其余优化,最后考虑修改配置项。shell
通常来讲,选择尽可能少的配置(或者说最小配置),如无必要,不用声明(不声明使用默认值)。数据库
固然一些很是重要的配置项,即便使用默认配置,也最好声明出来。(好比default_storage_engine)
[mysqld] #GENERAL datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/lib/mysql/mysqld.pid user = mysql port = 3306 default_storage_engine = InnoDB #InnoDB innodb_buffer_pool_size = 256M #核心配置,须要根据实际状况调整 innodb_log_file_size = 50M #须要根据实际状况调整 innodb_file_per_table = 1 #须要根据实际状况调整 innodb_flush_method = O_DIRECT #这里是字母O,不是数字0 #LOGGING log-error = /var/log/mysql-error.log slow_query_log = /var/log/mysql-slow.log #OTHER tmp_table_size = 32M #须要根据实际状况调整 max_heap_table_size = 32M #须要根据实际状况调整 #query_cache_type = 0 #mysql 8.0有变更,参数名不是这个 #query_cache_size = 0 #mysql 8.0有变更,参数名不是这个 max_connections = 100 #须要根据实际状况调整 thread_cache_size = 50 #根据其他参数调整线程缓存 table_open_cache = 10 #根据 opened_tables 调整 open_files_limit = 65535 #尽可能调大,配合内核参数 [client] socket = /var/lib/mysql/mysql.sock port = 3306
配置文件解释:
一、Innodb的配置项:缓存
innodb_buffer_pool_size 【最核心配置,innodb严重依赖缓冲池。服务器
索引、行数据缓存、哈希索引,插入缓存、锁等。 必须为innodb配置 足够的缓冲池。 通常为内存的75%-80%,建议配置的稍低,根据状况增长比例。[ 《高性能MySQL》P343
Innodb任意时刻能够保持打开.idb
文件的数量是有限的,由以下两个参数控制:
innodb_file_per_table
:When innodb_file_per_table is enabled, tables are created in file-per-table tablespaces by default.
innodb_open_files
:It specifies the maximum number of .ibd files that MySQL can keep open at one time.多线程
也可参考官网: https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html
二、MySQL配置项:
线程缓存(thread_cache_size
):
[参数]thread_cache_size
:能够保持在缓存中的线程数。
当关闭一个链接时,会将这个链接的线程放入缓存(若是缓存有空间)。下次能够直接读缓存,而非从新创建链接。
[状态]thread_cached
:当前已经缓存了的线程数。
[状态]threads_created
:每秒建立的新线程数,(若是每秒要建立不少线程,那须要考虑增长缓存大小
[状态]threads_connectd
:当前正在链接中的线程数。
线程缓存的配置和上述3个状态高度相关。根据实际状况判断缓存应该配置多少。
PS:灵活利用SHOW STATUS
和SHOW VARIABLES
查看配置的值,查看当前状态。
table_open_cache
:若是[状态]opened_tables
很大,或者一直在增加。考虑增长这个参数。table_definition_cache
:一般均可以配置的比较高,最好能够缓存下全部表的定义。【除非有上万张表】了解了基础配置,修改了配置文件。还须要关注配置的生效问题。
有的动态配置修改以后就立刻生效。有的全局配置须要重启才能生效。systemctl restart mysqld
重启后,还须要获取变量值进行确认,是否配置变量符合预期。
一、SHOW GLOBAL STATUS
及 SHOW STATUS
查看数据库当前的状态参数。(确认当前运行状况)
二、SHOW VARIABLES
查看数据库的配置参数。(也可直接进行过滤搜索,确认默认配置值)
【PS:1和2均可经过WHERE等语句进行筛选过滤。好比:show variables where variable_name like 'inno%pool%size%';
【或者说SHOW语句本质也是在查数据库。只不过是描述数据库自己的数据
三、[shell]mysqladmin extended-status -ri60
每60秒查看状态变量的增值
具体可参考:https://blog.csdn.net/demonson/article/details/80103204
四、STATUS
查看MySQL基础信息,包括版本,字符集,socket,线程数等。
0、yum安装mysql的步骤
首先是获取rpm包,经过以下两个链接都可。文件名相似这样mysql57-community-release-el7-3.noarch.rpm
。
https://dev.mysql.com/downloads/repo/yum/
https://repo.mysql.com/
随后rpm -ivh xxx.rpm
导入包,yum makecache
生成缓存。最后yum install -y mysql-community-{client,libs,common,server}.x86_64
便可完成安装。(通常来讲,这4个组件就足够了。)
一、yum安装mysql后,初次登陆和密码问题
首先确认/etc/my.cnf
配置,确认err-log的配置。(通常默认是/var/log/mysqld.log
)而后查看错误日志,便可发现临时密码。再使用sudo mysql -uroot -p'tmp_passwd'
便可登陆。
参考:https://www.cnblogs.com/array...
其次,临时密码不可用于长期登陆,必须修改后才可进行更多操做。若是尝试使用临时密码登录后操做,会出现以下提示:You must reset your password using ALTER USER statement before executing this statement.
能够根据mysql版本采起对应的语句进行密码修改。
SET PASSWORD = PASSWORD('Newpasswd');
ALTER USER USER() IDENTIFIED BY 'Newpasswd';
参考:http://www.javashuo.com/article/p-khfpsuvt-nb.html
二、[小结]如何修改配置?修改以后什么时候生效?如何确认修改后的值是否正确?
SHOW VARIABLES WHERE xxx
确认变量当前数值,确认修改变量是不是动态生效。修改MySQL配置文件并保存(通常是/etc/my.cnf
)SHOW VARIABLES
和SHOW STATUS
加上WHERE
等语句进行筛选(前者为配置变量,后者为当前的状态),确认配置变量是否符合预期。(好比SHOW variables WHERE Variable_name = 'innodb_buffer_pool_size';
)参考:https://blog.csdn.net/demonson/article/details/80103204
三、MySQL内部的help
链接上MySQL命令行以后,能够方便的使用help查找不肯定的命令。好比help create
查看能够建立什么,help create database
确认怎么建立新库的语法。
建立数据库表的方法也不难:
CREATE TABLE test ( 列名 数据类型 限制, id INTEGER PRIMARY KEY, );
help相关参考:https://blog.csdn.net/woqutechteam/article/details/81115892
四、其余小问题
SELECT database();
和STATUS;
来确认,本身当前在哪一个数据库。SCHEMA
和DATBASE
在MySQL里是同义词。见https://stackoverflow.com/questions/1219711/mysql-create-schema-and-create-database-is-there-any-differenceinnodb_flush_method = O_DIRECT
这里是字母O
不是数字0
本文主要讲述了MySQL配置的基础知识,包括配置文件的位置、配置项的分段([mysqld])、做用域、还有配置变量的查询及当前状态变量确认。
并且对少许配置变量进行了解释。
更多配置项的解释均可经过官网确认。https://dev.mysql.com/doc/refman/5.7/en/