从零开始学mysql - 系统参数和配置(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 从零开始学mysql - 系统参数和配置(上)

前言


本节我们来讲述关于MYSQL的系统启动命令相关内容,也是比较基础但是可能有些人会很模糊的内容,本节的核心也是讲述配置有关的内容


思维导图


导图地址:www.mubucm.com/doc/7DDOY0C…


网络异常,图片无法展示
|


概述


下面是对于本文的简单提要:

  1. ,命令行的命令格式
  1. 单划线和双划线
  1. 配置文件
  1. 配置文件读取顺序
  1. window,mac,Linux的配置读取顺序对比
  1. 配置文件的内容
  2. 特定版本配置
  3. 配置文件优先级
  1. 多配置文件和单文件配置的读书特性:总是以最后为准
  1. 自定义配置读取:通常为命令行指定读取
  1. 系统变量的配置
  1. 查看系统变量
  2. 设置系统变量
  3. 运行时的系统变量
  1. 作用范围:全局变量和会话变量
  2. 全局变量和会话变量设置
  3. 查看系统变量的范围
  1. 系统变量的注意事项
  2. 启动选项和系统变量的区别
  3. 状态变量的补充
  1. 如何查看状态变量


命令行命格式



单划线和双划线命令格式


命令行命令就是我们通常连接mysql使用的命令,命令行的命令一般分为两种,首先是双划线的命令,比如使用mysqld --skip-networing 就可以禁止客户端连接,这种命令也被称之为长命令,使用命令的时候需要使用--两个短划线进行拼接,另一种是更为常用的命令-h-p等命令, 这样的命令只需要一个短划线即可(为--host,--port的命令简称)。

命令的另一种写法是使用下划线进行替代,--skip_networing。

单划线命令效果如下,服务端开启禁止客户端登陆之后使用客户端连接就不允许了:


mysql -h127.0.0.1 -uroot -p
    Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)


另外一个案例是服务端启动的默认创建表引擎,比如我们需要改为InnoDB引擎在使用命令的时候加上--default-storage-engine=InnoDB选项,最后只要在任意的数据库下创建一张表,在末尾可以发现表的的存储引擎变了,当然默认的存储引擎看不到效果,可以使用MyISAM进行验证:


ENGINE=MyISAM DEFAULT CHARSET=utf8


mysql的默认安装之后启动会自动附加一些参数,比如下面的命令,这里有个命令的重要使用规则是不要把变量声明的习惯带进来,在命令的=(等号)两边增加空格是不被允许的


/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so


最后如果不清楚如何使用命令,直接使用--help,不过只有一个mysqld的比较特殊,他需要使用--verbose --help才行,记不住也没关系,在--help的命令最后mysql会给我们进行提示,还是比较贴心的(不过我觉得大多数人还是会使用度娘查命令,哈哈。)


For more help options (several pages), use mysqld --verbose --help.


配置文件



虽然命令的方式十分的方便,在启动的时候也有较高的自由度,但是这种方式用的其实并不是很多,实际工作使用配置文件的形式会更多,配件文件的形式是更为常用的也是更容易记忆的方式,但是在了解配置文件之前,我们需要大致了解配置文件的读取顺序。当然不需要牢固的记忆,只要作为了解即可。


配置文件的读取顺序



Window的配置文件读取顺序


Windows不是使用MySQL的重点,但是作为自我练习的时候还是需要了解的,他的配置读取顺序如下。

  1. %WINDIR%\my.ini %windir\my.cnf% (echo %WINDIR%获取)
  2. C:\my.ini C:\my.cnf
  3. Basdir\my.ini basdir\my.cnf(based it指的是默认的安装路径)
  4. Defaults-extra-file 命令行制定的额外配置文件路径
  5. %appdata%\MySQL\ .mylogin.cnf 登陆路径选项(客户端指定,通过echo %APPDATA%可以获取)

上面第一条出现.ini.cnf意味着支持多种后缀文件格式,%windir% 表示为windows的目录位置,通常是C:\windows。另外最后两个配置有点特别,第四个指的是可以利用命令参数:—defaults-extra-file=C:\xxxx\xxx\xxx.txt这样的方式指定要读取的配置文件,而最后一个%appdata%指的是windows对应应用程序目录值,另外这个.mylogin.cnf(注意前面的小数点) 这个文件不是和前面一样类似的纯文本,而是使用mysql_config_editor 使用程序的加密文件,文件也只能固定为mysql规定的一些配置信息。(这些配置这里借用官网查看一下)

Mysql_config_editor 这个编辑器是mysql官方开发的一个可执行的文件。具体的参数配置可以参考官方的配置进行处理。


类Unix的配置读取


废话不多说,我们来看下类Unix的系统读取配置,这个配置不同于window需要仔细对待,当然最好能时常回顾,因为Linux上使用mysql的场景会比较多。

  1. /etc/MySQL/my.inf
  2. SYSCONFIGDIR/my.cnf (MySQL的系统安装目录)
  3. %MYSQL_HOME%/my.cnf 仅限服务器的选项
  4. Defaults_extra-file 同样为命令行指定读取
  5. ~/.my.cnf (注意前面的逗号)
  6. ~/.mylogin.cnf 需要mysql_config_editor 的支持并不是纯文本文件

SYSCONFDIR 表示在使用 CMake 构建 MySQL 时使用SYSCONFDIR 选项指定的目录,默认的情况下为/etc的下面。

mysql_home 相信了解环境变量这个概念的都比较熟悉,可以自由选择设置还是不设置,我们可以在配置的环境变量下放置一个my.cnf,但是如果放置之后,内容就不能乱写了,只能放置关于启动服务器程序的相关选项(意味着客户端和服务端端配置可以共存),这里再次强调和.mylogin.cnf文件还是有差别,他的限制更加严格(再次啰嗦注意前面的小数点)。


补充:Mysql.server 会间接调用mysqld_safe 这个命令,而mysqld_safe 的命令会使用mysqld命令,最后mysqld 安装规则当然也会按照规则配置文件,说了这么多结果就是:mysql.server如果发现环境变量配置了my.cnf文件也会进行配置文件的应用

~是属于类unix系统的特殊符号,代表 当前用户登陆的根路径,比如mac下面通常为/User/用户名,通常可以使用home的环境变量查看,由于是每一个用户都存在一个目录,所以最后两个配置的读取顺序其实都是根据不同登陆用户判断的,所以可以在这个目录下面构建这两个“专属”文件。

Defaults-extra-file 指定为:—defaults-extra-file=C:\xxxx\xxx\xxx.txt这样的方式指定要读取的配置文件,和windows的方式一致,因为

.mylogin.cnf 含义和window中也是一样的,需要mysql_config_editor 的支持并不是纯文本文件,也不能随意的更改。


mac系统配置读取


mac系统的配置读取需要一定的获取技巧,可以使用mysql -verbose --help | grep my.cnf 这个命令来获取,可以看到下面的路径和上面讲述的路径大致逻辑是一致的。


./mysql --verbose --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf


但是个人实际寻找的时候发现 没有任何的配置文件,根据网上的资料发现需要去/usr/local/supporting-file下面有一个配置文件的模版,但是个人实际操作之后发现这个文件还是不存在的,最后不得已只能去官网拷贝一份配置文件然后按照上面的打印的规则放到指定的目录去了.....


配置文件内容


了解完配置文件的基本读取顺序之后,下面我们来了解配置文件的内容,这里说一下小插曲,mac的配置文件在/usr/local/mysql中无法发现配置文件,所以这里只好拿官方的样例文件进行解释,为了防止篇幅过长,这里放到了文章的最后部分,从配置文件中首先我们可以看到很多的配置分组,比如如下的形式:


[server] (具体的启动选项...)
[mysqld] (具体的启动选项...)
[mysqld_safe] (具体的启动选项...)
[client] (具体的启动选项...)
[mysql] (具体的启动选项...)
[mysqladmin] (具体的启动选项...)


通过这样的分组之后,可以在不同的分组下可以配置,根据分组的配置项我们又可以分为两种,一种是:选项另一种是选项=选项值,需要注意的是在配置文件中不能编写h=127.0.0.1短链接形式而是全部只能使用 长形式的配置方式,同时配置文件和命令行不同的是允许中间加入空格的,比如slow_query_log    = 0,另外我们可以使用#符号进行注释,比如#xxxx,最后我们再来看下一下命令行的形式:--option--option=optionvalue

分组的意义在于可以将客户端的命令和服务端的命令进行区分,比如下面的不同分组我们可以清晰配置变量的作用范围,也可能更好的规划我们的服务器启动参数或者客户端的连接参数。


[server] 组下边的启动选项将作用于所有的服务器程序。 
[client] 组下边的启动选项将作用于所有的客户端程序


需要注意的是mysql_safemysql.server基本都会间接调用mysqld命令,从命令的读取范围我们也可以了解到为什么建议使用mysql.server或者mysql.safe这两个命令,同时也可以发现mysql的客户端命令只能读取mysql下面的命令以及client下面的命令,通过下面的图表可以发现我们基本上只需要学习两个比较常用的命令mysqld_safemysql.server的读取范围即可。


网络异常,图片无法展示
|


Mysql.server 命令本身就是设计为针对配置文件使用,所以他最终支持的命令行的命令仅仅为 startstop


特定版本的配置


mysql的配置文件支持根据版本号的方式读取配置,比如8.0我们可以配置**[mysqld-8.0],而5.7我们就可以使用[mysqld-5.7]**,他们本身的作用是一致的,但是会根据当前的mysql版本匹配进行生效。


配置文件的优先级



总结起来就是两句话,如下记忆即可:

  • 多个文件s以文件的读取顺序中最后的读取的为最终结果
  • 单文件重复分组按照最后一个组中出现的配置为主


多配置文件的读取


通常情况下除非我们在mysql连接的时候使用指定的配置文件读取路径,否则我们通常使用上面介绍过的配置文件的读取顺序进行读取,这时候有可能出现一种情况就是多个配置文件下出现相同的配置到底应该应用哪一个配置?这里只要记住一条铁律就是最后的读取的为最终结果


单文件重复配置读取


单文件读取的优先级使用的是,按照 最后一个组中出现的配置为主,比如说出现过下面的参数配置,会按照MyISAM的配置进行读取。


[server]
    default-storage-engine=InnoDB
    [mysqld]
    default-storage-engine=MyISAM


自定义指定配置读取


如果你不想记忆那些默认的搜索规则,或者为了保证配置按照自己的想法进行读取,可以使用mysqld --defaults-file=/tmp/myconfig.txt的命令方式指定你需要读取的配置文件路径,但是需要注意--defaults-filedefaults-extra-file 这两个命令是有区别的,defaults-extra-file 可以指定额外的路径而--defaults-file 只能指定一个配置路径。

补充:如果遇到配置文件和命令行出现相同的配置,最后无论配置文件如何进行配置, 一切按照命令行的配置为主


系统变量配置



默认情况下如果我们没有进行任何配置,mysql会默认给我们分配一个配置,比如最大连接数,错误连接次数,或者查询的缓存大小等等变量的配置等,如果我们想要了解当前的配置变量,我们可以使用如下的命令进行查看。


查看系统变量


SHOW VARIABLES [LIKE 匹配的模式];


比如我们按照下面的命令进行运行查看,可以看到数量有几百条,一个个看是看不过来的,所以我们进行系统变量配置的时候会使用某一个大分类下的具体配置进行查看(下面使用了通配符的写法):


mysql> show variables like '%%';
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                                            | Value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| activate_all_roles_on_login                              | OFF                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| admin_address                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| admin_port                                               | 33062                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| admin_ssl_ca                                             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| admin_ssl_capath                                         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| admin_ssl_cert                                           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| admin_ssl_cipher                                         |          
....
| windowing_use_high_precision                             | ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
638 rows in set (0.01 sec)


比如我们想查看当前mysqld服务的默认存储引擎可以使用如下的命令,这时候就会只显示一条数据,感兴趣的读者也可以试一试在连接mysql服务之后执行SHOW VARIABLES like 'max_connections';命令查看效果:


mysql> SHOW VARIABLES LIKE 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)


另外在mysql中想要模糊的查看某一个项目的配置,可以使用百分号%进行通配符搜索,比如下面这样:


mysql> show variables like 'mysql%';
+---------------------------------------------+----------------------------------------+
| Variable_name                               | Value                                  |
+---------------------------------------------+----------------------------------------+
| mysql_native_password_proxy_users           | OFF                                    |
| mysqlx_bind_address                         | *                                      |
| mysqlx_compression_algorithms               | DEFLATE_STREAM,LZ4_MESSAGE,ZSTD_STREAM |
| mysqlx_connect_timeout                      | 30                                     |
| mysqlx_deflate_default_compression_level    | 3                                      |
| mysqlx_deflate_max_client_compression_level | 5                                      |
| mysqlx_document_id_unique_prefix            | 0                                      |
| mysqlx_enable_hello_notice                  | ON                                     |
| mysqlx_idle_worker_thread_timeout           | 60                                     |
| mysqlx_interactive_timeout                  | 28800                                  |
| mysqlx_lz4_default_compression_level        | 2                                      |
| mysqlx_lz4_max_client_compression_level     | 8                                      |
| mysqlx_max_allowed_packet                   | 67108864                               |
| mysqlx_max_connections                      | 100                                    |
| mysqlx_min_worker_threads                   | 2                                      |
| mysqlx_port                                 | 33060                                  |
| mysqlx_port_open_timeout                    | 0                                      |
| mysqlx_read_timeout                         | 30                                     |
| mysqlx_socket                               | /tmp/mysqlx.sock                       |
| mysqlx_ssl_ca                               |                                        |
| mysqlx_ssl_capath                           |                                        |
| mysqlx_ssl_cert                             |                                        |
| mysqlx_ssl_cipher                           |                                        |
| mysqlx_ssl_crl                              |                                        |
| mysqlx_ssl_crlpath                          |                                        |
| mysqlx_ssl_key                              |                                        |
| mysqlx_wait_timeout                         | 28800                                  |
| mysqlx_write_timeout                        | 60                                     |
| mysqlx_zstd_default_compression_level       | 3                                      |
| mysqlx_zstd_max_client_compression_level    | 11                                     |
+---------------------------------------------+----------------------------------------+
30 rows in set (0.00 sec)


设置系统变量


我们了解了如何查看系统变量之后,下面我们来学习如何进行系统变量的设置,其实我们在之前已经讲述过如何设置系统变量,比如我们在读取配置文件的时候使用--default-file=xxx的方式自定义读取配置文件的位置,又或者在配置文件里面制定配置然后在启动mysqld服务器进行读取相关的配置,比如上面提到的default-storage-engine=MyISAM,所以配置选项有下面的两种:


  • 通过命令行启动选项
  • 通过配置文件启动选项

所以设置系统变量也没有什么特别的,无非就是这两种方式罢了。

补充:对于启动选项来说,如果启动选项名由多个单词组成,各个单词之间用短划线 - 或者下划线 _ 连接起来都可 以,但是对应的系统变量之间必须使用下划线 _ 连接起来

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
182 0
|
1月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
22天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
61 1
|
25天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
25天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
72 3
|
25天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
77 2
|
30天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
1月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
34 2
|
1月前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
186 1
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
67 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。

热门文章

最新文章

下一篇
无影云桌面