MySQL 之服务器配置和状态(MySQL Server Configuration and Status)

MySQL 之服务器配置和状态

1 MySQL 架构和性能优化

1.3 服务器配置和状态

设置 MySQL 服务的特性,可以通过 mysqld 服务选项,服务器系统变量和服务器状态变量这三个方面来进行设置和查看。

官方文档

https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.htmlhttps://dev.mysql.com/doc/refman/5.7/en/server-option-variable-reference.htmlhttps://mariadb.com/kb/en/variables-and-modes/

文档说明

Name 

Cmd-Line 

OptionFile

SystemVar

StatusVar

VarScope

Dynamic

名称 

是否能在命令行下设置

是否能写配置文件

是否是系统变量

是否是状态变量

作用范围

是否能动态修改

  • Cmd-Line 和 Opton File 列的值如果是 Yes,则表示该项是服务器选项

  • System Var 列的值如果是 Yes,则表示该项是系统变量

  • Status Var 列的值如果是 Yes,则表示该项是状态变量

  • Option File 指配置文件

  • 服务器选项通常在命令行后面添加或在配置文件中设置

  • 状态变量表示的是当前的一个状态值

  • 变量生效范围有三种,分别是全局,会话,全局和会话,Var Scope 列对应的值分别是 Global,Session,Both

  • Dynamic 列表示是否可以动态修改,如果该列值为 No,则表示不可修改,状态变量都不可修改,部分系统变量也不可修改

  • 一个配置项可以同时是服务器选项,系统变量,状态变量这三种中的两种,但不会同时是三种角色

    1.3.1 服务器选项

查看所有可用选项列表

[root@localhost ~]# mysqld --verbose --help

查看服务启动时在命令行下添加的选项

[root@localhost ~]# ps aux | grep mysqldmysql 2423 0.6 23.7 1836108 433416 ? Ssl 13:01 3:27 /usr/libexec/mysqld --basedir=/usr
#这个选项是配置在服务脚本中的[root@localhost ~]# systemctl cat mysqld.service | grep basedir# Note: we set --basedir to prevent probes that might trigger SELinux alarms,ExecStart=/usr/libexec/mysqld --basedir=/usr

查看当前服务启动选项

[root@localhost ~]# mysqld --print-defaults/usr/libexec/mysqld would have been started with the following arguments:--default_authentication_plugin=mysql_native_password --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysql/mysqld.log --pid-file=/run/mysqld/mysqld.pid
#这些选项都是写在配置文件中的[root@localhost ~]# cat /etc/my.cnf.d/mysql-server.cnf......[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysql/mysqld.logpid-file=/run/mysqld/mysqld.pid
[root@localhost ~]# cat /etc/my.cnf.d/mysql-default-authentication-plugin.cnf......[mysqld]default_authentication_plugin=mysql_native_password

在命令行中设置服务器选项

[root@localhost ~]# /usr/libexec/mysqld --basedir=/usr --max_connections=202 --user=mysql &[1] 9358
#查看mysql> show variables like 'max_connections%';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 202   |+-----------------+-------+1 row in set (0.01 sec)

在配置文件中设置服务器选项​​​​​​​​​​​​​​

[root@localhost ~]# vim /etc/my.cnf[mysqld]max_connections=200
#查看,此时配置在在配置文件中可见,但并没有生效,需要重启[root@localhost ~]# mysqld --print-defaults/usr/libexec/mysqld would have been started with the following arguments:--default_authentication_plugin=mysql_native_password --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysql/mysqld.log --pid-file=/run/mysqld/mysqld.pid --max_connections=200
#查看选项,因为此项与变量同名mysql> show variables like 'max_connections%';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 151   |+-----------------+-------+1 row in set (0.00 sec)
#重启服务[root@localhost ~]# systemctl restart mysqld.service
#再次查看mysql> show variables like 'max_connections%';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 200   |+-----------------+-------+1 row in set (0.00 sec)​​​​​​​​​​​​​
#配置文件中的服务器选项,可以写下划线,也可以写中划线[root@localhost ~]# vim /etc/my.cnf[mysqld]#max_connections=200max-connections=201
#重启服务[root@localhost ~]# systemctl restart mysqld.service
#查看mysql> show variables like 'max_connections%';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 201   |+-----------------+-------+1 row in set (0.00 sec)

非服务器选项不能加配置文件​​​​​​​

[root@localhost ~]# vim /etc/my.cnf[mysqld]#max_connections=200max-connections=201character_set_database=utf8
#无法启动服务,因为 character_set_database 不是服务器选项[root@localhost ~]# systemctl restart mysqld.serviceJob for mysqld.service failed because the control process exited with error code.See "systemctl status mysqld.service" and "journalctl -xe" for details.
#查看具体错误信息[root@localhost ~]# tail /var/log/mysql/mysqld.log

1.3.2 服务器系统变量

服务器系统变量分为全局变量和会话变量两种,全局变量表示可以影响到所有连接终端,所有会话,会话变量只影响当前会话。

查看系统变量​​​​​​​

#查看所有全局变量mysql> show global variables 630
#查看所有变量,包括session和globalmysql> show session variablesmysql> show variables
#查看指定变量 SHOW VARIABLES LIKE 'VAR_NAME';mysql> show variables like 'sql_log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | ON    |+---------------+-------+1 row in set (0.00 sec)
mysql> show variables like 'sql_log_%';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | ON    || sql_log_off   | OFF   |+---------------+-------+2 rows in set (0.00 sec)
#查看指定变量 SELECT @@VAR_NAME;mysql> select @@sql_log_bin;+---------------+| @@sql_log_bin |+---------------+| 1             |+---------------+1 row in set (0.00 sec)

修改服务器系统变量

查看帮助

mysql> help set

修改变量时,on|true|1 代表开启,off|false|0 代表关闭。

修改全局变量:修改后全局生效,如果仅是变量,则对于己建立的连接不生效。​​​​​​​

SET GLOBAL system_var_name=value;SET @@global.system_var_name=value;

仅是变量​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

#终端mysql> show variables like 'sql_warnings';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_warnings  | OFF   |+---------------+-------+1 row in set (0.00 sec)
#终端Bmysql> select @@sql_warnings;+----------------+| @@sql_warnings |+----------------+| 0              |+----------------+1 row in set (0.00 sec)
#终端A中修改mysql> set global sql_warnings=1;Query OK, 0 rows affected (0.00 sec)
#终端A中查看mysql> show variables like 'sql_warnings';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_warnings  | OFF   |+---------------+-------+1 row in set (0.01 sec)
#终端B中查看mysql> select @@sql_warnings;+----------------+| @@sql_warnings |+----------------+| 0              |+----------------+1 row in set (0.00 sec)
#重新建立连接再查看mysql> select @@sql_warnings;+----------------+| @@sql_warnings |+----------------+| 1              |+----------------+1 row in set (0.00 sec)

又是变量又是选项​​​​​​​

#终端Amysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 100   |+------------------------+-------+1 row in set (0.01 sec)
#终端Bmysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 100   |+------------------------+-------+1 row in set (0.01 sec)
#在终端A中修改mysql> set mysqlx_max_connections=108;ERROR 1229 (HY000): Variable 'mysqlx_max_connections' is a GLOBAL variable and should be set with SET GLOBALmysql> set global mysqlx_max_connections=108;Query OK, 0 rows affected (0.00 sec)
#终端A再次查看mysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 108   |+------------------------+-------+1 row in set (0.00 sec)
#终端B再次查看mysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 108   |+------------------------+-------+1 row in set (0.00 sec)

修改会话变量:仅对当前会话有影响​​​​​​​

SET [SESSION] system_var_name=value;SET @@[session.]system_var_name=value;​​​​​​
#终端Amysql> show variables like 'sql_log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | ON    |+---------------+-------+1 row in set (0.00 sec)
#终端Bmysql> show variables like 'sql_log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | ON    |+---------------+-------+1 row in set (0.00 sec)
#在终端A中修改mysql> set sql_log_bin=0;Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | OFF   |+---------------+-------+1 row in set (0.01 sec)
#再次在终端B中查看,并不受影响mysql> show variables like 'sql_log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_log_bin   | ON    |+---------------+-------+1 row in set (0.00 sec)#重新连接,也不受影响

只读变量无法修改​​​​​​​

#该项的 Dynamic 列值为 No,不能动态修改mysql> show variables like 'admin_port';+---------------+-------+| Variable_name | Value |+---------------+-------+| admin_port    | 33062 |+---------------+-------+1 row in set (0.00 sec)
mysql> set global admin_port=33063;ERROR 1238 (HY000): Variable 'admin_port' is a read only variable

变量无法实现永久保存,重启服务后会被重置​​​​​​​

mysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 108   |+------------------------+-------+1 row in set (0.00 sec)
#重启服务[root@localhost ~]# systemctl restart mysqld.service
#再次查看mysql> show variables like 'mysqlx_max_connections';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| mysqlx_max_connections | 100   |+------------------------+-------+1 row in set (0.00 sec)

1.3.3 服务器状态变量

服务器状态变量:分全局和会话两种,其中许多变量有双重域,既是全局变量,也是会话变量,有相同的名字。

状态变量用于保存 MySQL 运行中的统计数据的变量,只读,不可修改。

查看状态变量​​​​​​​

#查看所有全局状态变量mysql> show global status;
#查看所有状态变量,包括global和sessionmysql> show status;mysql> show session status;

查看指定变量​​​​​​​​​​​​​​

mysql> show status like 'Com_select';+---------------+-------+| Variable_name | Value |+---------------+-------+| Com_select    | 2     |+---------------+-------+1 row in set (0.00 sec)
mysql> select * from testdb.t1;Empty set (0.00 sec)
#查询次数增加mysql> show status like 'Com_select';+---------------+-------+| Variable_name | Value |+---------------+-------+| Com_select    | 3     |+---------------+-------+1 row in set (0.00 sec)
#查看全局mysql> show global status like 'Com_select';+---------------+-------+| Variable_name | Value |+---------------+-------+| Com_select    | 8     |+---------------+-------+1 row in set (0.00 sec)
#查看服务运行时长mysql> show status like 'Uptime';+---------------+-------+| Variable_name | Value |+---------------+-------+| Uptime        | 2503  |+---------------+-------+1 row in set (0.00 sec)
mysql> show global status like 'Uptime';+---------------+-------+| Variable_name | Value |+---------------+-------+| Uptime        | 2507  |+---------------+-------+1 row in set (0.00 sec)

重启服务后状态被重置​​​​​​​

[root@localhost ~]# systemctl restart mysqld.servicemysql> show status like 'Com_select';+---------------+-------+| Variable_name | Value |+---------------+-------+| Com_select    | 1     |+---------------+-------+1 row in set (0.00 sec)
mysql> show global status like 'Uptime';+---------------+-------+| Variable_name | Value |+---------------+-------+| Uptime        | 4     |+---------------+-------+1 row in set (0.00 sec)
1.3.4 服务器变量 sql_mode

sql_mode 是服务器选项,也是变量,其值会影响 SQL 语句执行的工作模式。

官方文档​​​​​​​

https://mariadb.com/kb/en/library/sql-mode/https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_sqlmodehttps://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_sqlmode​​​​​​
#查看mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)
#修改,此处修改重启服务后会还原,如果需要永久生效,则可以写配置文件mysql> set @@sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES';Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES1 row in set (0.00 sec)
常见MODE
  • NO_AUTO_CREATE_USER:禁止 GRANT 创建密码为空的用户

  • NO_ZERO_DATE:在严格模式,不允许使用 '0000-00-00' 的时间

  • ONLY_FULL_GROUP_BY:对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那认为这个 SQL 是不合法的

  • NO_BACKSLASH_ESCAPES:反斜杠 "\" 作为普通字符而非转义字符

  • PIPES_AS_CONCAT:将 "||" 视为连接操作符而非 "或" 运算符

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux的基础指令和环境部署,项目部署实战(下)

目录 上一篇:Linxu的基础指令和环境部署,项目部署实战(上)-CSDN博客 1. 搭建Java部署环境 1.1 apt apt常用命令 列出所有的软件包 更新软件包数据库 安装软件包 移除软件包 1.2 JDK 1.2.1. 更新 1.2.2. 安装openjdk&am…

LabVIEW无刷电机控制器检测系统

开发了一种基于LabVIEW的无刷电机控制器检测系统。由于无刷电机具有高效率、低能耗等优点,在电动领域有取代传统电机的趋势,而无刷电机的核心部件无刷电机控制器产量也在不断增长。然而,无刷电机控制器的出厂检测仍处于半自动化状态&#xff…

《仙台有树》里的馅料(序)

《仙台有树》一起追剧吧(二):馅料合集概览 ●德爱武美玩,全面发展 ●猜猜我是谁&真假美清歌 ●失忆的风还是吹到了仙台 ●霸道师徒强制收&你拜我,我拜你,师徒徒师甜蜜蜜 ●霸道总裁强制爱 ●仙台有…

网站搭建基本流程

需求分析: 实现网站搭建的过程:首先进行网站的需求性分析 网站可分为前台系统和后台系统,由不同的功能拆分为不同的模块 如下是一个电商网站可以拆分出的模块: 在编写代码前,我们要先对网站进行架构,通过…

反射机制的简单示例

一个使用反射机制的简单示例&#xff0c;这个示例将展示如何使用反射来实现一个通用的数据导出功能。 首先&#xff0c;让我们创建必要的项目结构和文件&#xff1a; 首先修改 pom.xml 添加依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?&…

Qt:多元素控件

目录 多元素控件介绍 QListWidget QTableWidget QTreeWidget 多元素控件介绍 多元素控件表示这个控件中包含了很多的元素&#xff0c;元素可能指的是字符串&#xff0c;也可以指的是更加复杂的数据结构、图片等等 Qt 中提供的多元素控件有: QListWidgetQListViewQTableW…

DeepSeek 助力 Vue 开发:打造丝滑的范围选择器(Range Picker)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(一)

目录 一、B2109 统计数字字符个数 - 洛谷 算法代码&#xff1a; 1. 引入库和命名空间 2. 主函数 3. 读取输入 4. 变量初始化 5. 遍历字符串 6. 输出结果 7. 返回值 总结 评测记录&#xff1a; 二、B2110 找第一个只出现一次的字符 - 洛谷 方法一&#xff1a;算法代…

Golang GORM系列:GORM并发与连接池

GORM 是一个流行的 Go 语言 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;用于简化数据库操作。它支持连接池和并发访问功能&#xff0c;这些功能对于高性能、高并发的应用场景非常重要。本文结合示例详细介绍gorm的并发处理能力&#xff0c;以及如何是哟个连接池提升…

C#之上位机开发---------C#通信库及WPF的简单实践

〇、上位机&#xff0c;分层架构 界面层 要实现的功能&#xff1a; 展示数据 获取数据 发送数据 数据层 要实现的功能&#xff1a; 转换数据 打包数据 存取数据 通信层 要实现的功能&#xff1a; 打开连接 关闭连接 读取数据 写入数据 实体类 作用&#xff1a; 封装数据…

Ubuntu24安装MongoDB(解压版)

目录 0.需求说明1.环境检查2.下载软件2.1.下载MongoDB服务端2.2.下载MongoDB连接工具(可略过)2.3.检查上传或下载的安装包 3.安装MongoDB3.1.编辑系统服务3.2.启动服务3.3.客户端连接验证3.3.1.创建管理员用户 4.远程访问4.1.开启远程访问4.2.开放防火墙 0.需求说明 问&#x…

《DeepSeek-V3:人工智能大语言模型》

《DeepSeek-V3:人工智能大语言模型》 1. 引言 我们介绍了 DeepSeek-V3,这是一个强大的专家混合 (MoE) 语言模型,总共有 671B 个参数,每个令牌激活了 37B。 为了实现高效的推理和具有成本效益的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 DeepSeekMoE 架构,这些…

解锁机器学习核心算法 | K -近邻算法:机器学习的神奇钥匙

一、引言 今天我们继续学习机器学习核心算法 —— K - 近邻&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;算法。它就像是一位经验丰富的 “老江湖”&#xff0c;以其简单而又强大的方式&#xff0c;在众多机器学习任务中占据着不可或缺的地位。 K - 近邻…

算法分析—— 《归并排序》

《排序数组》 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))&#xff0c;并且空间复杂度尽可能小。 示例 1&#xff1a; 输入&#xff1a;nums [5,2…

linux云服务器部署deepseek,并通过网页访问

参考视频&#xff1a;https://www.douyin.com/root/search/linux%E5%AE%89%E8%A3%85%20deepseek?aid3aa2527c-e4f2-4059-b724-ab81a140fa8b&modal_id7468518885570940214&typegeneral 修改ollama配置文件 vim /etc/systemd/system/ollama.service 我的电脑硬盘只有4…

FastAdmin后端列表导入表格数据

后台添加数据的时候增加通过表格导入功能 如下图index.html页面增加导入和模板下载按钮代码如下 <div class"panel panel-default panel-intro">{:build_heading()}<div class"panel-body"><div id"myTabContent" class"ta…

可调节图片参数,解决图片模糊及尺寸过小问题的工具

软件介绍 你是否正为图片模糊、尺寸太小而烦恼&#xff1f;别担心&#xff0c;有这样一款神器能帮你轻松解决。它能精准调节图片参数&#xff0c;即便原本模糊不清的图片&#xff0c;经它处理后也能变得高清锐利&#xff0c;瞬间让图片焕然一新。而且&#xff0c;它还具备导出…

Windows网络安全基础

随着互联网的发展和普及&#xff0c;Windows网络安全问题愈发严重。在本文中&#xff0c;我们将会介绍Windows网络安全的基本概念&#xff0c;包括网络攻击类型、网络安全威胁、网络安全防御措施等等&#xff0c;帮助初学者更好地了解Windows网络安全。 一、网络攻击类型 网络…

代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!

1 代码自动完成 1.1 应用场景 在编辑文档时&#xff0c;为了提高编辑效率&#xff0c;编辑器一般都会带有自动完成功能&#xff0c;比如&#xff1a;输入括号时自动补全另一半&#xff0c;输入文字时&#xff0c;自动补全剩下的部分。 1.2 使用方法 1.2.1 自动缩进 单击主菜…

vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive

keepalive没有效果&#xff0c;无法缓存页面&#xff1f; 问题大概是组件的name值不对应&#xff0c;vue2修改组件文件的name值&#xff0c;vue3保持组件文件名称和路由页面配置的name一致就可以了&#xff0c;如果vue3不想保持一致&#xff0c;必须手动在文件后面添加export..…