MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录
一、mysql设计模式和技术
二、mysql服务器和客户端
启动mysql服务
启动mysql客户端程序
三、mysql存储引擎
四、mysql配置
五、mysql系统变量
六、mysql字符集
编码和解码:
常见字符集(五种):
相关概念:
mysql字符集要点:
mysql字符集(客户端和服务端):
一、mysql设计模式和技术
### 1. 设计模式:采用c/s设计模式,客户端通过用户的输入来和服务器进行通信交互,服务器则负责处理请求、解析、运算、存储和返回响应结果给客户端。### 2. 所涉及的技术:TCP/IP技术:由c/s模式决定的;进程通信技术:像命名管道和共享内存(windows)、UNIX于套接字(类UNIX),因为服务器程序和客户端程序启动后实际上是两个进程
二、mysql服务器和客户端
启动mysql服务
### 1.导入:
即启动mysql服务器程序,通过服务器文件(大部分在安装的bin目录下)来启动,下面我们根据不同系统来了解认识
### 2.类UNIX系统:
mysqld:启动一个mysql服务器进程
mysqld_safe:间接调用mysqld,监控错误并重启服务,错误日志写入
mysql.server:间接调用mysqld_safe,相关命令为mysql.server start/stop
mysqld_multi:多个进程服务
### 3.windows系统:
## 2.1 mysqld.exe:
同类UNIX的mysqld,mysqld --console(启动将错误日志输入到cmd控制台)
## 2.2 注册为服务来启动:
注册服务语句:"完整的可执行文件路径" --install [-manual] [服务名称]
描述:其中-manual选项表示手动,不添加该选项则开机自启,服务名称默认为MySQL
示例语句:"C:\Program files\MySQL\MySQL Server 5.7\bin\mysqld" --install
net命令操作控制服务:net start/stop MySQL(MySQL是服务名)
启动mysql客户端程序
### 1. mysql客户端程序:
mysql、mysqladmin、mysqldump、mysqlcheck等### 2. 启动客户端连接服务器:
mysql -uroot -p密码(显式,不安全)
mysql -uroot -p(密式)
### 3. 了解连接服务器的参数(短形式/长形式)
-u/--user=用户名:用户参数
-p/--password=端口号:密码参数
-h/--host=主机名:IP或域名参数
示例:mysql -uroot -p 或者 mysql --user=root -p
三、mysql存储引擎
### 1.存储引擎
有很多,只需了解InnoDB和MyISAM即可,查看语句show engines;
### 2.版本变化
MySQL>=5.5.5:InnoDB
MySQL<5.5.5:MyISAM
可以看出现在主要使用InnoDB
### 3.InnoDB和MyISAM的定位
InnoDB:支持事务、行级锁、外键
MyISAM:主要的非事务处理存储引擎
### 4.相关语句
## 指定表的存储引擎
create table 表名(...
)engine=引擎名称
alter table 表名 engine=引擎名称
## 查看表的结构(含存储引擎)
show create table 表名\G
四、mysql配置
### 1.配置方式
mysql的配置可以通过【启动项】和【配置文件】来实现。
启动项:通过命令行指定选项,仅对当次启动生效(没有保存到硬盘),即重启失效;
配置文件:把选项写入配置文件,在每次启动时都会被读取应用;
### 2.命令行配置启动项(选项)规范
格式:命令 --启动项1=[值1] --启动项2=[值2]
示例:mysqld --skip-networking(禁止TCP/IP网络通信)
## 选项名称规范
--skip-networking就是启动项名称(选项名称),选项名称由多个单词构成,中间可以使用“-”或“_”(短划线或下划线)连接,即也可以写为--skip_networking
## 选项值规范
不是所有的选项都是有值的如上例命令,如果有值比如【--选项名=选项值】,反则省略含等号以后内容
## 衔接规范
选项(无论是短形式还是长形式)都要满足选项名后紧跟选项值,示例:mysql -u root -p
使用长形式即【--选项名=选项值】中间不能有任何空格
### 3.查看程序启动项
mysql --help
mysqld_safe --help
mysqld --verbose --help(特殊)
### 4.选项常用的长形式-短形式
--user -u
--password -p
--port -P
--host -H
--version -V
### 5.配置文件的读取顺序
## windows
%WINDIR%\my.ini,%WINDIR%\my.cnf【这个%WINDIR%就是一个系统变量,我们可以查看一下:echo %WINDIR%】
C:\my.ini,C:\my.cnf
BASEDIR\my.ini,BASEDIR\my.cnf 【BASEDIR是你MySQL的安装路径】
defaults-extra-file 【这个用于命令行指定配置文件,例如:mysqld --defaults-extra-file=C:\my.txt】
%APPDATA%\MySQL\.mylogin.cnf 【仅限客户端】
上面这些路径会由上到下依次读取,所以越靠后权重越大,以靠后配置为准(覆盖式)
## 类NUIX
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf 【仅限服务器】
default-extra-file 【命令行指定配置文件】
~/.my.cnf 【登录用户独有】
~/.mylogin.cnf 【仅限客户端】
上面这些路径会由上到下依次读取,所以越靠后权重越大,以靠后配置为准(覆盖式)
### 6.配置文件配置启动项规范
## 格式
[组名]
选项名称
选项名称=选项值
## 选项名称规范
不能用缩写(短形式),不允许加“--”(双短划线)
## 衔接规范
【选项名称=选项值】中间可以有空格,每行只能写一个选项
## 注释
行首使用"#"来进行注释
### 7.配置文件选项组
即前面规范格式所展示的就是一个选项组格式
[mysqld]:应用于服务器的配置项
[mysql]:应用于客户端的配置项
[server]:应用于服务器的配置项
[client]:应用于客户端的配置项
如果选项组里面出现了相同的选项,则以后面出现的选项配置为准
### 8.指定搜索配置文件
mysqld --default-file=文件路径
与--default-extra-file不同的是只搜索给定路径的配置文件
### 9.命令行启动项和配置文件的区别
(1) 有些针对于命令行应用的配置项是配置文件没有的;
(2) 命令行方式是临时作用的,而配置文件方式是持久作用的;
(3) 命令行会覆盖与之相同的配置文件选项,当然是临时作用的;
五、mysql系统变量
### 1. 导入:
了解mysql的系统变量,我们可以熟悉当前版本的默认功能行为
### 2.查看系统变量:
show variables [like 匹配模式]
## 3.系统变量分类
按作用域分:全局、会话(部分)
按时效分:临时【命令行】、持久【配置文件】
### 4.设置系统变量
(1)通过启动项设置:命令行方式、配置文件方式
(2)服务器运行过程中命令设置:set [global|session] 系统变量名=值; 【作用域默认为session】
### 5.系统变量规范
虽然我们通过启动项设置系统变量时,多个单词的变量名可以用“-”或“_”连接,
但是他们在内部都会转换成“_”连接的形式,所以我们查看时要用“_”连接的系统变量名。
示例:show variables like 'max_connections';【设置时可以mysqld --max-connects=10】
### 6.系统变量和启动项
(1) 有些系统变量是运行过程中生成的,不能通过启动项来设置,如:character_set_client
(2) 启动项是程序启动传递的配置参数,而系统变量是支持和决定程序运行行为的变量
(3) 有些启动项也不是程序运行所需的,也就不是系统变量,如:defaults-file
### 7. 补充:状态变量
指我们不能设置改变的变量,由程序内部自己设置的变量,我们可以查看来了解服务器程序的运行状况
show [global|session] status [like 匹配模式];
六、mysql字符集
编码和解码:
编码:将字符映射为二进制数据的过程
解码:将二进制数据映射到字符的过程
常见字符集(五种):
ASCII:字符数范围0~128,1字节表示
Latin1(ISO 8859-1):字符数范围为0~256,1-2字节表示
GB2312:字符数范围6763(汉字)+682,1-2字节表示
GBK:在GB2312基础上的扩充(兼容),1-2字节表示
Unicode:世界级字符收编,UTF-8(1-4字节)、UTF-16(2-4字节)、UTF-32(4字节)
相关概念:
(1) 变长编码方式:
指使用不同字节数来表示一个字符的编码方式,比如上面提到的GB2312、Unicode
(2) 为什么有变长编码方式:
无非是兼容,比如Latin1用1-2字节表示,1字节表示就是因为兼容ASCII
mysql字符集要点:
### 1. mysql中的UTF-8
utf8mb3:阉割过的UTF-8字符集,用1-3字节表示,在mysql中utf8指的就是utf8mb3
utf8mb4:正宗的UTF-8字符集,用1-4字节表示
版本情况:MySQL>=8.0,将utf8mb4作为默认字符集
### 2.查看当前mysql支持的字符集
show (character set|charset) [like 匹配模式];
### 3.比较规则
一种字符集可以有多种比较规则,都有默认的比较规则
查看支持的比较规则:show collation [like 匹配模式];
示例:show collation like 'utf8\_%'(斜杠是转义符)
## 比较规则名称后缀含义
_ai accent insensitive 不区分重音
_as accent sensitive 区分重音
_ci case insensitive 不区分大小写
_cs case sensitive 区分大小写
_bin binary 以二进制大小比较
### 4. 字符集和比较规则
## 分类:
服务器级别、数据库级别、表级别、列级别
## 服务器级别:
(1) 相关系统变量:character_set_server(字符集)、collation_server(比较规则)
(2) 查看默认值:show variables where variable_name in('character_set_server','collation_server');
(3) 设置:启动项或配置文件方式
## 数据库级别
(1) 相关系统变量:character_set_database(字符集)、collation_database(比较规则)
(2) 查看默认值:要注意的是明确当前使用的数据库,使用【use 数据库】
(3) 设置:只能在创建数据库的时候指定默认字符集和比较规则(创建好之后修改语句无法作用),数据库级别默认是参考服务器级别的,所以我们一般默认就好
create database 数据库 character set 字符集 collation 比较规则;
## 表级别
(1) 查看:show table status from 数据库 like 表名;
(2) 设置:默认参考数据库级别的
create table 表名(...) character set 字符集 collation 比较规则;
## 列级别
(1) 查看:show full columns from 表名;
(2) 设置:默认参考表级别的
create table 表名(列名 类型 character set 字符集 collation 比较规则);
alter table 表名 modify 列名 类型 character set 字符集 collation 比较规则;
## 二者关系
字符集和比较规则是双向绑定的,如果修改了某个另一个也跟着改变
向上参考原则:列 >> 表 >> 数据库 >> 服务器
mysql字符集(客户端和服务端):
### 1.引入:
客户端和服务端之间进程通信发送数据会涉及到字符集的问题,于是出现了MySQL通信协议(规定了数据格式)
### 2.客户端字符集:
一般客户端请求编码字符集为操作系统当前使用的字符集
## 类UNIX
决定系统字符集的系统变量:LANG、LC_CTYPE、LC_ALL(优先级依次递增,以后者为准)
## Windows
字符集又称代码页
查看字符集:chcp
数值对应关系:936(GBK)、65001(UTF-8)
设置字符集:mysql -uroot -p --default-character-set=字符集;
### 3.服务器字符集
服务器主要维护了3个相关的字符:character_set_client、character_set_connection、character_set_result
## 连接:
当客户端和服务器建立连接后,在服务器会维护一个会话级别的变量来作为服务器响应的字符集,即character_set_client
## 处理:
处理请求时又会将character_set_client转换为会话级别的系统变量character_set_connection;
也就是用character_set_client字符集对请求数据解码,然后用character_set_connection字符集对数据进行编码;
与之对应的比较规则collation_connection。
## 响应
服务器处理请求后需要响应给客户端结果,这时又由系统变量character_set_result决定
## 总结:
所以来说只有保证连接、处理和响应三个环节的字符集一致才会保证顺利编解码和响应
## 一次性设置上面三个系统变量
set names 字符集;
### 4.字符集冲突
若客户端系统字符集、表字符集和列字符集冲突,则以【列字符集】为准(优先级更高)
### 5.字符集定义过程
客户端连接服务器(登录) >> 初始化客户端字符集并发送给服务器 >> 根据客户端字符集初始化服务器字符集(3个系统变量)
相关文章:
MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录 一、mysql设计模式和技术 二、mysql服务器和客户端 启动mysql服务 启动mysql客户端程序 三、mysql存储引擎 四、mysql配置 五、mysql系统变量 六、mysql字符集 编码和解码: 常见字符集(五种): 相关概念࿱…...
用Python制作邮件检测器
github地址: https://github.com/CaLlMeErIC/MailDetective 因为需求需要写一个简单的邮件检测系统的框架,这里记录下思路 首先第一反应,这个检测系统不应该是各个邮件收件系统都有自带的吗,于是搜索了下是否有相关的邮件检测开源软件&#…...
K8S---pod基础概念
目录 一、资源限制 二、Pod 的两种使用方式 三、Pod 资源共享 四、底层容器Pause 1、Pause共享资源 1.1 网络 1.2 存储 1.3 小结 2、Pause主要功能 3、Pod 与 Pause 结构的设计初衷 五、Pod容器的分类 1、基础容器(infrastructure container)…...
激活函数入门学习
本篇文章从外行工科的角度尽量详细剖析激活函数,希望不吝指教! 学习过程如下,先知道这个东西是什么,有什么用处,以及怎么使用它: 1. 为什么使用激活函数 2. 激活函数总类及优缺点 3. 如何选择激活函数 …...
小文智能结合ChatGPT的产业未来
最近几个月,由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在国内外各大平台掀起了一阵AI狂潮。短短几天时间,其用户量就突破了百万大关,注册用户之多一度导致服务器爆满。 继AI画图之后,ChatGPT成为了新的顶流…...
Linux-编写一个自己的命令
前言(1)在Linux中,我们对文件路径进行操作都需要输入命令。那么,有人可能就会有疑惑了,命令是什么东西?我们是否也可以创造出自己的命令呢?答案是可以的。命令本身其实就是可执行文件。但是与普…...
Nacos架构篇 - Distro协议
Distro 它是 Nacos 社区自研的一种 AP 分布式协议(也是最终一致性协议)。它面向临时实例,保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为一种有状态的中间件应用的内嵌协议,Distro 保证了…...
和月薪3W的聊过后,才知道自己一直在打杂...
前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 我了解了下他的面试过程,就一点,不管是阿里还是腾讯的面试,这个级别的程序员,都会考察项目管理能力,并且权重…...
关于Ubuntu18.04 root账户登录的问题
关于Ubuntu18.04 root账户登录的问题一、 Ubuntu 18.04添加root用户登录1. 设置root用户2. 修改/root/.profile3. 修改/etc/pam.d目录下的gdm-autologin和gdm-password4. 修改50-ubuntu.conf5. 登录root账户二、Ubuntu18.04不能远程使用root账户登录的问题1. 修改sshd_config2.…...
基于jeecgboot的flowable的H5版本在演示系统发布
目前在NBCIO 亿事达企业管理平台上发布了H5的在线演示系统,欢迎大家批评指正。 在nbcio-vue nbcio-vue: NBCIO 亿事达企业管理平台前端代码,基于ant-design-vue-jeecg的前端版本: 3.0.0代码和和flowable6.7.2,初步完成了集流程设…...
【代码训练营】day44 | 完全背包理论 518. 零钱兑换 II 377. 组合总和 Ⅳ
所用代码 java 完全背包 01背包物品只能使用一次 – 倒序遍历 for(i 0; i < weight.length; i){ 物品for (j bagWeight; j > weight[i]; j--){ 背包dp[j] max(dp[j], dp[j-weight[i]] value[i])} }完全背包物品可以使用无限次 – 正序遍历 for(i 0; i < weigh…...
ICA简介:独立成分分析
1. 简介 您是否曾经遇到过这样一种情况:您试图分析一个复杂且高度相关的数据集,却对信息量感到不知所措?这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术,可让您分离和识别多元数据集中的底层独立来源。 …...
②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 蓝桥杯真题--持续更新中...一、振兴中华二、三…...
PostgreSql 视图
一、概述 视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。 我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。 优势: 不保存数据,节省空间。减少…...
【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分)
【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分) 前言 Problem:1150 Travelling Salesman Problem (25 分) Tags:模拟 图的遍历 旅行商问题 Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1150 Travell…...
vue生命周期
vue生命周期是什么?Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。我们来看一下官网给的vue生命周期的…...
排查解决Java进程占用内存过高
排查解决Java进程占用内存过高1 在项目部署运行之前1 检查JVM参数设置2 检查代码逻辑3 使用内存分析工具4 检查线程5 调整应用程序的设计7 调整硬件资源2 在项目部署运行之后1 在项目部署运行之前 1 检查JVM参数设置 检查JVM的启动参数设置,包括-Xmx和-Xms参数&am…...
一个基于 LKM 的 Linux 内核级 rootkit 的实现
博客已迁移至:https://gls.show/ GitHub链接 演示Slides overview rootkit是一种恶意软件,攻击者可以在获得 root 或管理员权限后安装它,从而隐藏入侵并保持root权限访问。rootkit可以是用户级的,也可以是内核级的。关于rootk…...
CAN工具 - ValueCAN - 基础介绍(续)
VSpy3(Vehicle Spy 3的简写),作为一个常用的车载总线仿真工具,在车载网络领域也是有非常大的市场,前面也简单介绍过一些简单的功能,今天就再次介绍一些。什么是VSpy3?VSpy3是美国英特佩斯公司下…...
一个Laravel+vue免费开源的基于RABC控制的博客系统
项目介绍 CCENOTE 是一个使用 Vue3 Laravel8 开发的前后端分离的基于RABC权限控制管理的内容管理系统,由于作者本人比较喜欢写作的原因,因此开发了这个项目,后端使用的PHP的Laravel框架,并且整理了数据层与业务层,相…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
