1.MySQL 入门

1.安装目录

在mac中mysql 安装目录为/usr/local/mysql,以mysql8.0.25版本为例 ,该目录下文件如下:

├── bin  //可执行文件  
├── data //数据库文件、日志文件、表空间等
├── docs
├── include
├── keyring
├── lib
├── man
├── share
└── support-files

其中data文件夹是核心,后续笔记会涉及这块

2.mysql 架构

mysql 分为客户端和服务器端,用户通过客户端程序发送请求给服务端,服务端收到请求后处理,并把处理结果返回给客户端,架构详情可参考:MySQL基础架构

3.启动服务器

(1)mysqld

mysqld:mysqld可执行文件 即我们所理解的mysql服务端,运行这个可执行文件即可启动mysql服务器进程,但一般不直接使用该方式启动

(2)mysqld_safe

mysqld_safe:mysql启动脚本。会调用mysqld并监控服务器运行状态

(3)mysql.server

mysql.server:mysql启动脚本。会调用mysqld_safe

(4)mysqld_multi

mysqld_multi:多服务器端启动

4.启动mysql客户端

mysql -h主机名 -u用户名 -p密码

5.客户端服务器连接方式

(1)TCP/IP

mysql采用TCP/IP协议作为服务端和客户端的网络通信协议。 mysql服务器默认使用3306端口号,也可以通过启动服务端改变端口号(ex:mysqld -P3307

(2)命名管道和共享内存

windows进程间通信方式。只适合 Windows 系统下用来连接本机的 MySQL

启用方式:启动服务器加命令/配置加上--enable-named-pipe,启动客户端命令加--pipe

(3)UNIX套接字

MySQL服务器程序默认监听/tmp/mysql.sock套接字,客户端程序也默认连接到该套接字,也可以在启动服务端时更改(mysqld --socket=/tmp/a.txt)。 该方式只适合服务器程序和客户端程序都在本机上的类UNIX操作系统。

启用方式:mysql -h主机名 -u用户名 --socket -p密码 / mysql -uroot -S /tmp/mysql.sock -p

可通过命令mysql -u root -p密码 -h 127.0.0.1 -e "select @@socket"查询socket文件位置)

6.MySQL启动配置

我们都知道一个服务启动,会需要读一些配置,除了在命令行中制定启动选项,还可以通过配置文件进行配置。对于MySQL来说,配置位置可以通过以下方式获取:

$ mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

MySQL会按照位置顺序读取,因此位置越靠后优先级越高

MySQL中可以没有配置文件,没有的情况下MySQL会按照编译时的默认参数设置。

6.1 MySQL配置文件内容

配置文件中的启动选项被划分为若干个组,每个组下面可以定义多个启动选项,不同的选项组是给不同的程序使用的。如果选项组名称与程序名相同,则组中的选项将专门应用于该程序。

注意:mysqld_safe,mysql.server启动时都会读取[mysqld]内容

[server] //作用于所有的服务器程序
...
[mysqld]//应用于mysqld服务器程序
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M

[mysqld_safe]
...
[client] //作用于所有客户端程序
port=3306
socket=/tmp/mysql.sock

[mysql]//应用于mysql客户端程序
...
[mysqladmin]
force

[mysqldump]
quick

[mysqld-8.0] ///特定MySQL版本选项组
sql_mode=TRADITIONAL

7.MySQL运行时系统变量

系统变量作用范围:

  • GLOBAL:影响服务器整体操作
  • SESSION:影响某个客户端连接操作
## 查询系统变量
## 不加GLOBAL|SESSION修饰符查询=SESSION范围查询
SHOW  [GLOBAL|SESSION] VARIABLES [LIKE 匹配模式];

##设置系统变量
SET [GLOBAL|SESSION] 系统变量名 = 值;

启动选项和系统变量区别:

  • 启动选项是在程序启动时由用户传递的参数,系统变量影响服务器程序运行的变量
  • 大部分系统变量可以当作启动选项传入。但有些系统变量是在程序运行过程中自动生成,不能当作启动选项传入,如character_set_client
  • 有些启动选项不是系统变量,如defaults-file

8.字符集和比较规则

8.1 字符集

字符集主要需要注意MySQL中utf8并不是真的utf8,是utf8mb3(使用1~3个字节表示一个字符),utf8mb4才是utf8

## MySQL查看字符集
show charset;

8.2 比较规则

## MySQL查看比较规则
show collation [like 匹配模式];

utf8字符集下的比较规则如下所示:

mysql> show collation like 'utf8\_%';
+--------------------------+---------+-----+---------+----------+---------+---------------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen | Pad_attribute |
+--------------------------+---------+-----+---------+----------+---------+---------------+
| utf8_bin                 | utf8    | 83  |         | Yes      | 1       | PAD SPACE     |
| utf8_croatian_ci         | utf8    | 213 |         | Yes      | 8       | PAD SPACE     |
| utf8_czech_ci            | utf8    | 202 |         | Yes      | 8       | PAD SPACE     |
| utf8_danish_ci           | utf8    | 203 |         | Yes      | 8       | PAD SPACE     |
| utf8_esperanto_ci        | utf8    | 209 |         | Yes      | 8       | PAD SPACE     |
| utf8_estonian_ci         | utf8    | 198 |         | Yes      | 8       | PAD SPACE     |
| utf8_general_ci          | utf8    | 33  | Yes     | Yes      | 1       | PAD SPACE     |
| utf8_general_mysql500_ci | utf8    | 223 |         | Yes      | 1       | PAD SPACE     |
| utf8_german2_ci          | utf8    | 212 |         | Yes      | 8       | PAD SPACE     |
| utf8_hungarian_ci        | utf8    | 210 |         | Yes      | 8       | PAD SPACE     |
| utf8_icelandic_ci        | utf8    | 193 |         | Yes      | 8       | PAD SPACE     |
| utf8_latvian_ci          | utf8    | 194 |         | Yes      | 8       | PAD SPACE     |
| utf8_lithuanian_ci       | utf8    | 204 |         | Yes      | 8       | PAD SPACE     |
| utf8_persian_ci          | utf8    | 208 |         | Yes      | 8       | PAD SPACE     |
| utf8_polish_ci           | utf8    | 197 |         | Yes      | 8       | PAD SPACE     |
| utf8_romanian_ci         | utf8    | 195 |         | Yes      | 8       | PAD SPACE     |
| utf8_roman_ci            | utf8    | 207 |         | Yes      | 8       | PAD SPACE     |
| utf8_sinhala_ci          | utf8    | 211 |         | Yes      | 8       | PAD SPACE     |
| utf8_slovak_ci           | utf8    | 205 |         | Yes      | 8       | PAD SPACE     |
| utf8_slovenian_ci        | utf8    | 196 |         | Yes      | 8       | PAD SPACE     |
| utf8_spanish2_ci         | utf8    | 206 |         | Yes      | 8       | PAD SPACE     |
| utf8_spanish_ci          | utf8    | 199 |         | Yes      | 8       | PAD SPACE     |
| utf8_swedish_ci          | utf8    | 200 |         | Yes      | 8       | PAD SPACE     |
| utf8_tolower_ci          | utf8    | 76  |         | Yes      | 1       | PAD SPACE     |
| utf8_turkish_ci          | utf8    | 201 |         | Yes      | 8       | PAD SPACE     |
| utf8_unicode_520_ci      | utf8    | 214 |         | Yes      | 8       | PAD SPACE     |
| utf8_unicode_ci          | utf8    | 192 |         | Yes      | 8       | PAD SPACE     |
| utf8_vietnamese_ci       | utf8    | 215 |         | Yes      | 8       | PAD SPACE     |
+--------------------------+---------+-----+---------+----------+---------+---------------+

比较规则名称后缀英文释义及描述

后缀 英文释义 描述
_ai Accent-insensitive 不区分重音
_as Accent-sensitive 区分重音
_ci Case-insensitive 不区分大小写
_cs Case-sensitive 区分大小写
_bin Binary 以二进制方式比较

8.3 字符集和比较规则应用

(1)作用范围

MySQL有4个级别的字符集和比较规则:服务器级别、数据库级别、表级别、列级别

系统变量 描述
character_set_server 服务器级别字符集
collation_server 服务器级别比较规则
character_set_database 数据库级别字符集
collation_database 数据库级别比较规则

如果创建数据库不指定字符集/比较规则,将使用服务器级别字符集/比较规则;创建表不指定字符集/比较规则,则使用数据库级别字符集/比较规则;创建列不指定字符集/比较规则,则使用表级别字符集/比较规则。

字符集和比较规则间相互关联,如果只修改字符集,比较规则会变为字符集默认的比较规则,反之亦是

(2)客户端服务器通信过程字符集
a.客户端发送请求

一般情况下客户端编码请求字符串时使用的字符集与操作系统当前字符集一致

//查看操作系统字符集
$ echo $LC_ALL
$ echo $LC_CTYPE
$ echo $LANG
zh_CN.UTF-8
b.服务器接收请求

服务器将收到的请求当作系统变量character_set_client代表的字符集进行编码的字节序列

每个客户端和服务器建立连接后,服务器会为该客户端维护一个单独的character_set_client变量,变量为SESSION级别

c.服务器处理请求

服务器处理请求时,会将请求的字节序列转换为character_set_connection对应的字符集进行编码的字节序列

d.服务器生成响应

将结果集转换为character_set_results对应字符集编码发送给客户端

e.客户端接收响应

对于类UNIX操作系统,会把接收到的字节序列写入MySQL命令行界面,并默认使用当前操作系统字符集解释该字符
对于Windows系统,会使用客户端默认字符集进行解释字符

小结
系统变量 描述
character_set_client 服务器认为请求是按照该系统变量指定的字符集来编码的
character_set_connection 服务器在处理请求时,会把请求字节序列从character_set_client转换为character_set_connection
character_set_results 服务器采用该系统变量指定的字符集对返回给客户端的字符串进行编码
客户端服务器通信过程字符集.png

参考:
[1]https://dev.mysql.com/doc/refman/8.0/en/data-directory.html
[2]https://dev.mysql.com/doc/refman/8.0/en/programs-server.html
[3]MySQL是怎样运行的-小孩子4919
[4]MySQL技术内幕 Innodb存储引擎-姜承尧
[5]https://dev.mysql.com/doc/refman/8.0/en/option-files.html
[6]https://dev.mysql.com/doc/refman/8.0/en/charset-collation-names.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容