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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 学习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配置文件抓取的路径顺序,以及指定配置参数和读取配置文件,最后探讨了一下配置优先级问题,其优先级顺序为: 指定配置参数 > 读取配置文件, 而读取配置文件,是按照从前往后读取,若有重复项配置,则以最后一个配置项为准,快来试试吧。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Shell
shell学习(十七) 【mysql脚本备份】
shell学习(十七) 【mysql脚本备份】
14 0
|
2月前
|
SQL 存储 关系型数据库
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
100 0
|
1月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
5天前
|
存储 关系型数据库 MySQL
学习MySQL(5.7)第二战:四大引擎、账号管理以及建库(干货满满)
学习MySQL(5.7)第二战:四大引擎、账号管理以及建库(干货满满)
|
14天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
14天前
|
存储 关系型数据库 MySQL
Mysql学习--深入探究索引和事务的重点要点与考点
Mysql学习--深入探究索引和事务的重点要点与考点
|
20天前
|
SQL 关系型数据库 MySQL
快速学习MySQL SQL语句
快速学习MySQL SQL语句
|
20天前
|
存储 SQL 关系型数据库
MySQL学习手册(第一部分)
mysql日常使用记录
83 0