学习MySQL系列:2. MySQL配置项和配置文件

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 学习MySQL系列:2. MySQL配置项和配置文件

今天是学习MySQL 是怎样运行的:从根儿上理解 MySQL的第二天。


我们在使用MySQL的过程中,或多或少都使用过配置文件,例如: /etc/my.cnf,那你知道其中配置的具体含义么? 来,我们一起来看看今天的文章吧。


启动MySQL Server,我们有2种方式,第一种就是我们读取配置文件进行启动MySQL Server,第二种就是我们执行mysqld的时候,指定其具体参数,我们分别来介绍下。


指定配置参数


还记得我们上一节安装MySQL的时候,我们启动MySQL Server的命令么?

/home/mysql-source/bin/mysqld --user=root --basedir=/home/mysql-source --datadir=/home/mysql-source/db --socket=/home/mysql-source/db/mysql.sock


我们可以直接将参数写到mysqld后面,例如 启动的用户, MySQL安装目录, MySQL数据目录等, 那我们还可以指定其他的参数么? 当然可以。


例如,我们想将MySQL服务器字符集设置为utf8mb4,那我们可以这样启动MySQLD后指定--character_set_server=utf8mb4

/home/mysql-source/bin/mysqld ... --character_set_server=utf8mb4


我们顺利启动数据库后,利用客户端进入数据库,我们使用创建了一个库: pdudo_test_1,而后我们查看其建表语句,发现该字符集已经是utf8mb4了。


代码:

mysql> create database pdudo_test_1;
mysql> show create database pdudo_test_1;


image.png


那除此之外,我们客户端可以使用配置变量参数么? 那当然可以了,那例如,我们想使用socket进行登录数据库,我们可以在mysql后增加--socket即可,例如:

命令:

/home/mysql-source/bin/mysql --user=root --socket=/home/mysql-source/db/mysql.sock --password


image.png


在命令行提示下,我们输入命令,从而正确进入了MySQL Server中,那如上我们使用的长形式,其实它对应的还有短形式,我们可以使用mysql --help获取一下。


其实长形式是有2个--开头的,而短形式,则只有1个-开头。

这里列举几个参数

长形式 端形式 含义
--user -u 指定用户名
--password -p 指定密码
--socket -S 指定sockert路径
--host -h 指定主机名称

等等,诸如此类。


读取配置文件


MySQL中,不仅可以指定参数启动,更多的,还是使用配置文件的方式来启动服务器或者客户端。

Linux环境下,MySQL会按照如下优先级去搜索配置文件


  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf
  • [datadir]/my.cnf
  • ~/.my.cnf



关于my.cnf,配置文件选项组如下

[server]
...
[mysqld]
...
[mysqld_safe]
...
[client]
...
[mysql]
...
[mysqladmin] 
...


其中定义的格式如

key = value


的形式,等号=中间可以有空格

在命令行指定配置参数的时候,是不允许有空格的。

接着我们来看看启动的时候,mysql读取参数的作用域

这里就不补充完整了,除了一下这些以外,还有其他的,例如: [mysqldump][myisamchk][mysqlhotcopy]

作用域 命令 管控组
服务器 mysqld [mysqld] [server]
服务器 mysqld_safe [mysqld] [server][mysqld_safe]
客户端 mysql [client] [mysql]



那我们来配置一下

[root@master ~]# cat /etc/my.cnf
[mysqld]
user=root
basedir=/home/mysql-source
datadir=/home/mysql-source/db
socket=/home/mysql-source/db/mysql.sock
[mysql]
socket=/home/mysql-source/db/mysql.sock
user=root
password=lJ1&aR1!cB9_
[root@master ~]#


如上我们配置了2个项,分别是[mysqld][mysql],将作用于服务器和客户端,现在我们使用mysql应该可以直接进去的,我们尝试一下


image.png


这次我们没有服务器指定character_set_server,我们创建一个库来看看其字符集。

image.png



优先级问题


我们有没有想过这样一个问题,当有配置文件 和 又在启动的时候指定了参数的时候,谁的优先级更高呢?


为了验证该问题,我们能否修改下配置文件,例如将[mysql]user修改为pdudo,我们都知道MySQL服务器还未创建pdudo用户,然后我们再启动的时候指定其用户名为root,让我们看看效果如何吧。


修改客户端的配置,是不用重启MySQL服务器。

image.png


通过如上例子,我们发现,若是在命令行指定了配置项,则会覆盖文件的配置项。


若配置文件定义了重复项,那么以什么为准呢?


比如: 在配置文件中,定义了多个 character_set_server 且分别在不同的管控组下,我们以什么为准呢,我们可以模拟下如上情况。

image.png



我们在mysqld定义了character_set_serverutf8mb4,而又在server中定义了2个character_set_server,分别为utf8gbk,那我们重启服务器后,我们创建一下数据库,看一下字符集呢。

image.png


我们发现其创建的库字符集为gbk,于是我们可以得出结论,在配置文件出现重复项的时候,以最后一项参数为准。



总结


通过上述的学习,我们知晓了启动MySQL配置文件抓取的路径顺序,以及指定配置参数和读取配置文件,最后探讨了一下配置优先级问题,其优先级顺序为: 指定配置参数 > 读取配置文件, 而读取配置文件,是按照从前往后读取,若有重复项配置,则以最后一个配置项为准,快来试试吧。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
54 3
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
84 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
178 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
71 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
3月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
2月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
23 0
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
268 0
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
50 3
|
3月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
40 3
|
4月前
|
SQL 关系型数据库 MySQL
学习mysql基础操作
【8月更文挑战第20天】学习mysql基础操作
41 1