MySQL 配置基础
大家好,今天本人给大家带来文章《MySQL 配置基础》,文中内容主要涉及到MySQL、数据库,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!
MySQL作为一种常见的数据库管理系统(DBMS),其自身的各种配置项极大的影响了其性能。所以有必要进行了解和学习。
配置学习资源途径
我最近在看《高性能Mysql》,其中第8章讲解了关于配置的很多事项,都值得了解和学习。当然,官网也是最新信息查阅的重要渠道。
官网【可在5.1 TheMySQL Server找到配置解释。可在5.4找到BinLog相关内容。 】
MySQL配置
配置文件位置:
一般来说,MySQL服务端配置文件的默认位置是:
/etc/my.cnf或者
/etc/mysql/my.cnf
【也可以通过
mysqld --verbose --help|grep -A 1 'Default option'确认配置文件的位置】
和nginx类似,也可以选择分目录进行include,便于管理整体配置结构。 (比如!includedir /etc/my.cnf.d然后在my.conf.d目录里对不同的配置项分文件。
配置修改基础:
1、mysql配置文件是分段的,要注意配置项放在了正确的段里(比如服务器主要用 [mysqld] 这一段
1、副作用:一些配置项会产生副作用,临时修改配置需要非常小心。(比如变更query\_cache\_size会立即删除所有查询的缓存,重新构建。
2、变量的值:变量不是越大越好,可能会导致内存交换或者超出地址空间。需要跟进情况设定。
2、配置项有不同的作用域,有的是全局,有的是会话。其次,还有动态变量,可在运行时修改。【也就是说,大部分非动态变量需要重启才能生效】
3、全局变量:修改后对当前会话及已存在的会话均不生效。可通过
SHOW GLOBAL VARIABLES确认。
4、变量的单位:配置时要注意单位,命令行或者配置文件,可以使用后缀指定单位(比如1M等,但要注意,使用SQL的SET指令时就不能使用单位。
5、配置文件管理:最好使用git来进行版本管理,加上充足的注释。可以避免不少问题。
如何创建一个靠谱的MySQL配置?
1、一个好的配置,不是从学习配置项开始,也不是询问怎么设置或者怎么修改,更不是观察服务器行为和询问哪个配置可以提升性能。
【应该是从理解MySQL内核和行为开始】
2、保证基础配置都正确(比如日志路径,缓存配置,端口号,数据库存储位置等。如非必要,尽量使用默认配置。(默认配置经受过的测试是最多的。
3、优先进行语句优化等其他优化,最后考虑修改配置项。
一个最小配置示例
一般来说,选择尽量少的配置(或者说最小配置),如无必要,不用声明(不声明使用默认值)。
当然一些非常重要的配置项,即使使用默认配置,也最好声明出来。(比如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 skip_name_resolve #关闭域名解析,避免dns导致的请求失败(关闭后要使用IP访问mysql) #mysql 会做正向和反向dns查询。一旦失败就会拒绝连接。 #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
配置文件解释:
1、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
2、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
重启后,还需要获取变量值进行确认,是否配置变量符合预期。
如何确认MySQL的配置/状态?
1、
SHOW GLOBAL STATUS及
SHOW STATUS
查看数据库当前的状态参数。(确认当前运行情况)
2、
SHOW VARIABLES
查看数据库的配置参数。(也可直接进行过滤搜索,确认默认配置值)
【PS:1和2都可通过WHERE等语句进行筛选过滤。比如:
show variables where variable_name like 'inno%pool%size%';
【或者说SHOW语句本质也是在查数据库。只不过是描述数据库本身的数据
3、[shell]
mysqladmin extended-status -ri60
每60秒查看状态变量的增值
具体可参考:https://blog.csdn.net/demonson/article/details/80103204
4、
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个组件就足够了。)
1、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版本采取对应的语句进行密码修改。
- 5.7.6之前:
SET PASSWORD = PASSWORD('Newpasswd');
- 5.7.6之后:
ALTER USER USER() IDENTIFIED BY 'Newpasswd';
参考:https://blog.csdn.net/muziljx/article/details/81541896
2、[小结]如何修改配置?修改之后何时生效?如何确认修改后的值是否正确?
- 修改配置:通过
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
3、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
4、其他小问题
- 可以通过
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/
今天带大家了解了MySQL、数据库的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

- 上一篇
- Java8新特性之方法引用

- 下一篇
- 技术分享 | MySQL史上最快逻辑备份工具
-
- 自然的大炮
- 这篇文章出现的刚刚好,好细啊,很有用,码住,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-02-07 03:22:45
-
- 数据库 · MySQL | 1天前 |
- MySQL设置中文界面,超简单教程来了!
- 332浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql 索引提示
- MySQL进阶必看!FORCE/USE/IGNOREINDEX用法大揭秘
- 182浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- 手把手教你写MySQL存储过程,小白也能轻松上手
- 163浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql group by
- MySQL分组查询优化:GROUPBY原理+索引优化超全解析
- 324浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL设置中文语言,轻松拥有中文界面
- 211浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL建库语句从入门到精通:创建数据库+设置字符集&排序规则(附实例)
- 176浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- 从零开始学MySQL数据库操作,小白轻松变大神!
- 496浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL插入日期到时间字段,轻松搞定日期格式
- 484浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql 数据压缩
- MySQL怎么实现高效压缩存储?表压缩+列式存储详细解读
- 272浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql JOIN优化
- MySQL优化JOIN操作:七大技巧教你提升关联查询速度
- 106浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL出现中文乱码?超详细解决方案一次性搞定
- 211浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL主从复制这样配!搞懂这些参数,replication稳了~
- 131浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 茅茅虫AIGC检测
- 茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
- 14次使用
-
- 赛林匹克平台(Challympics)
- 探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
- 48次使用
-
- 笔格AIPPT
- SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
- 56次使用
-
- 稿定PPT
- 告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
- 51次使用
-
- Suno苏诺中文版
- 探索Suno苏诺中文版,一款颠覆传统音乐创作的AI平台。无需专业技能,轻松创作个性化音乐。智能词曲生成、风格迁移、海量音效,释放您的音乐灵感!
- 56次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览