MySQL 启动选项和字符集
1. 客户端和服务器
1.1 服务器程序
-
数据库实例:代表 MySQL 服务器程序的进程( mysqld 可执行文件)
-
mysqld_safe:启动脚本,会间接调用 mysqld 并监控服务器运行状态。出现错误时可以帮助重启服务器程序,输出错误日志。
-
mysql.server:启动脚本,会间接调用 mysqld_safe 。
启动服务器程序 mysql.server start
关闭服务器程序 mysql.server stop -
mysqld_multi:启动多个服务器实例。
1.2 客户端程序
mysql -h主机名 -u 用户名 -p密码 (mysql 是可执行文件)
-h 服务器进程所在计算机的域名或IP地址。运行在本机时可省略
-p 后面最好不要跟着密码,如果非要写注意 -p 和密码之间不要有空格(其他短形式 -P -V -h 和 -u可以有)
关闭客户端的方式:quit、exit、\q
1.3 客户端和服务器的连接
MySQL 的服务器程序和客户端本质上都是计算机上的一个进程,因此它们之间的交互本质上是一个进程间通信的过程。
(1)TCP/IP
MySQL 服务器默认监听 3306 端口
指定端口号启动服务器进程
mysqld -P3307
TCP/IP方式下,-h参数后必须跟随 IP 地址,本机的为127.0.0.1。-P指定需要连接的端口号
mysql -h127.0.0.1 -u root -P3307 -p
(2)命名管道和共享内存
Windows 系统可以使用。
命名管道:启动服务器时加上 --enable-named-pipe ,启动客户端时加上 --pipe 或 --protocol=pipe
共享内存:启动服务器时加上 --shared-memory ,启动客户端时加上 --protocol=memory;使用共享内存进行通信的客户端进程和服务器进程必须在同一台 Windows 主机中。
(3)UNIX 域套接字
客户端和服务器都在类 UNIX 的同一台机器上,启动客户端时没有指定主机名,或主机名为localhost,或者指定了 --protocol=socket
MySQL 服务器程序默认监听的 UNIX 域套接字文件为 /tmp/mysql.sock(8.0 版本的为 /var/run/mysqld/mysqld.sock);
如果想更改
mysqld --socket=/tmp/a.txt
客户端为
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p
1.4 服务器处理客户端的请求
(1)连接管理
MySQL 服务器采用线程池的方式,为每个连接进来的客户端分配一个线程。(客户端的数量会有限制,默认为 max_connections = 151
,严格来讲还有额外一个是为超级用户准备的)
客户端发起连接时,需要携带主机信息、用户名、密码等信息,服务器会进行验证。
MySQL 服务器接收到的请求只是一个文本消息。
(2)Server 层和存储引擎层交互,一般是以记录为单位。
(3)存储引擎
InnoDB 支持事务、行级锁、外键(默认存储引擎)
MyISAM 主要的非事务处理存储引擎
MEMORY 数据只存储在内存中;多用于临时表
XA 代表是否支持分布式事务。
ALTER TABLE 表名 ENGINE=存储引擎名;// 修改表的存储引擎
2. 启动选项和系统变量
(1)设置都有各自的默认值。
启动选项:在程序启动时指定的设置项,可在启动时修改这些默认值;各单词之间可用 - 或 _ 连接;
系统变量:运行过程中用到的变量;各单词只能用 _ 连接;
(2)启动选项和系统变量的关系
大部分系统变量都可以当作启动选项传入;
有些系统变量是在程序运行过程中自动生成的,不可以当作启动选项设置,例如 character_set_client
;
有些启动变量也不是系统变量,如 defaults-file
。
2.1 命令行上使用选项
特点:只对当次启动有效。
各启动选项之间使用空格分隔。选项名、=、选项值之间不可以有空格。
–启动选项1[=值1] --启动选项2[=值2]
mysqld --skip-networking //---------------------------------- 禁止各客户端使用TCP/IP进行通信
mysqld --default-storage-engine=MyISAM //------------ 修改默认存储引擎
mysql --help // ---------------------------------------------------- mysqld_safe等都是这种方式
mysqld --verbose --help // ------------------------------------ 比较特殊
2.2 配置文件中使用选项
配置文件中的启动选项被划分为若干个组,每个组都有一个组名。(把服务器的启动选项写在客户端组下,不会生效)
在多个配置文件中设置相同的启动选项,以最后一个文件中的为准
在同一个配置文件的不同组中设置相同的启动选项,以最后一个出现的组中的启动选项为准
mysqld --defaults-file=/tmp/myconfig.txt //---------------------------------- 忽略默认路径,只在 /tmp/myconfig.txt 搜索配置文件
defaults-extra-file 指定额外的配置文件路径,这两个只能在命令行中指定
同一个启动选项即出现在命令行中,又出现在配置文件中,以命令行中的为准。
2.3 系统变量
(1)作用范围
GLOBAL:影响服务器的整体操作;
SESSION:只影响某个客户端连接的操作(会话变量);服务器会为每个连接的客户端维护一组会话变量,大部分的会话变量在客户端连接时使用响应的全局变量的当前值进行初始化。
(2)设置和查看系统变量
通过启动选项设置的都为 GLOBAL;
在运行期间设置系统变量,省略作用范围的话默认为 SESSION;
SET [GLOBAL|SESSION] 系统变量名 = 值;
SET [@@(GLOBAL|SESSION) . ]系统变量名 = 值;
查看系统变量;如果某个系统变量没有 SESSION 作用范围,即使使用了 SESSION 修饰符,显示的是 GLOBAL 作用范围的值。
SHOW [GLOBAL|SESSION] VARIABLES LIKE ‘系统变量名’;
(3)注意事项
有些系统变量是只读的,如 version
;
有些只有 GLOBAL 作用范围,如 max_connections
有些只有 SESSION 作用范围,如insert_id
,表示对某个包含 AUTO_INCREMENT 列的表插入时,该列的初始值。
2.4 状态变量
服务器程序运行状态的变量,只能由服务器程序自己设置。
SHOW [GLOBAL|SESSION] STATUS LIKE ‘状态变量名’;
3. MySQL 字符集和比较规则
utf8mb3:删减过的 UTF-8 字符集,只使用 1 ~ 3 字节表示字符。可以表示大部分常用的字符
utf8mb4:正宗的 UTF-8 字符集,使用 1 ~ 4 字节表示字符,包含 emoji 表情。(8.0 后设置为默认的字符集)
MySQL 中表示字符集的名称使用小写形式。
(1)比较规则后缀含义
_as/ai
表示是否区分重音
_cs/ci
表示是否区分大小写
3.1 应用
MySQL 有 4 个级别的字符集和比较规则;
(1)服务器级别;使用系统变量character_set_server
和collation_server
描述
在本人电脑下,分别为 utf8mb4
和 utf8mb4_0900_ai_ci
,说明不区分重音和大小写。
(2)数据库级别;
创建数据库时指定该数据库的字符集和比较规则(默认和服务器级别一致)
CREATE/ALTER DATABASE 数据库名
【 CHARACTER SET 字符集名】
【 COLLATE 比较规则名】
USE 数据库名;后可以查看character_set_database
和collation_database
描述系统变量值。
(3)表级别
和数据库类似,默认采用表所在的数据库的字符集和比较规则。
(4)列级别;同一个表的不同列可以有不同的字符集和比较规则
CREATE TABLE 表名(
列名 字符串类型 【CHARACTER SET 字符集名】【COLLATE 比较规则名】,
其他列…
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 【CHARACTER SET 字符集名】【COLLATE 比较规则名】;
修改列的字符集时,如果列中存储的数据不能使用修改后的字符集表示,会发生错误。
(5)字符集和比较规则之间相互关联。只修改其中一个,另一个也会改变
3.2 通信过程中的字符集
下述 3 个系统变量,均是 SESSION 级别。服务器会为每个客户端维护这 3 个变量。
(1)客户端发送请求
一般情况下,客户端编码请求字符串时使用的字符集与操作系统当前的一致。在类 UNIX 系统中,由 LC_ALL > LC_CTYPE > LANG 这 3 个系统变量表示。 如果这 3 个都没有设置,操作系统当前使用的字符集就是默认字符集。
启动客户端时,如果设置了default-character-set
启动选项,会将该值作为客户端的默认字符集,在连接服务器时会将character_set_client\connecton\results
这 3 个系统变量的值初始化为客户端的默认字符集;
也可以使用 SET NAMES charset_name
一次性修改上述 3 个系统变量的值,但不会改变客户端发送请求时使用的字符集。
(2)服务器接收请求(对接收的请求进行解码)
服务器会将收到的请求当作是使用系统变量 character_set_client
进行编码的字节序列。
(3)服务器处理请求(内部表达方式和比较规则)
通过第 2 步我们已经知道了接收的都是哪些字符,但这些字符的表达方式和比较规则还不知道。
因此真正处理时,会将其转换为使用 SESSION 级别的系统变量 character_set_connection
对应字符集编码的字节序列
如果这里的编码和列采用字符集冲突,以列的字符集和比较规则优先。
(4)服务器生成响应(对结果进行编码)
会将结果使用 character_set_results
字符集进行编码,再发送给客户端。
(5)客户端收到响应
对类 UNIX 系统会使用操作系统当前使用的字符集解码
对 Win 系统会使用客户端默认的字符集解码
参考声明
《MySQL 是怎样运行的》
相关文章:
MySQL 启动选项和字符集
1. 客户端和服务器 1.1 服务器程序 数据库实例:代表 MySQL 服务器程序的进程( mysqld 可执行文件) mysqld_safe:启动脚本,会间接调用 mysqld 并监控服务器运行状态。出现错误时可以帮助重启服务器程序,输…...

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章
* 本文是来自Sui生态项目Typus团队的投稿,文中「我们」均指代该项目团队,转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念,这是一种我们用于 Typus V2 的新数据结构,以缓解 Sui 上数组和动态字段(dynamic field)…...

Linux根目录下的目录结构及其作用详解
Linux根目录是文件系统的最顶层,它包含了一些子目录,每个子目录都有特定的功能和存储的文件。只有了解了各个文件的使用功能,才能更好的去使用Linux系统。希望通过下面这张图能够让你更加了解根目录下的各个目录的功能。...

源码和SaaS账号:租房与自建房的区别
在当今数字化时代,软件已成为企业运营的重要支撑。然而,对于许多中小企业来说,获取和运营软件的方式有两种:源码和SaaS账号。这两者有何区别呢?让我们用租房和自建房的比喻来解释。 价格比较 源码:购买源码…...
Docker容器设置为自动重启
有时Docker服务出现异常,或者服务器出现异常,需要重启Docker服务或者服务器; 如果希望有一部分基础的或者常用的容器,在服务或者服务器重启的时候,可以实现自动启动,仅需使用命令进行简单配置即可实现。 D…...

速卖通卖家如何通过自己搭建测评补单系统,提高产品权重和排名?
速卖通卖家如何给店铺增加权重和排名? 在竞争激烈的速卖通平台上,为自己的店铺增加权重是吸引更多买家和提升销售的关键。店铺的权重决定着在搜索排名、推荐位和广告展示方面的优先级。今天珑哥为您介绍一些有效的策略,帮助您提升速卖通店铺…...

香港金融科技周2023:AIGC重塑金融形态
10月31日,由香港财经事务及库务局与投资推广署主办的“香港金融科技周2023大湾区专场”盛大启幕。中国AI决策领先企业萨摩耶云科技集团创始人、董事长兼 CEO林建明受邀参加圆桌会议,与中国内地、香港以及全球金融科技行业顶尖人才、创新企业、监管机构和…...
6G关键新兴技术-智能超表面(RIS)技术演进
一、产品定义及范围 根据欧盟5G公私联盟协会(5G Infrastructure Public-Private Partnership, 5GPP)定义,可重构智慧表面(Reconfigurable Intelligent Surface, RIS)技术是由能够任意塑造电磁波面的材料组成,几乎是被动(Passice)设备,可以适…...

怎么让小程序排名靠前?小程序搜索排名问题
小程序的排名是十分重要的,因为这会直接影响到用户的点击率,用户在搜索小程序时,会看到搜索引擎的前几条搜索结果,如果您的小程序不在这些位置上,很可能就会被忽略,所以,想要让用户能够看到您的…...

使用Postman快速复现浏览器的请求(包括生成调用代码)
前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 好久没有写开发类的工具使用文了,这…...
四则运算的正则校验
文章目录 四则运算的正则校验带有变量的四则运算的正则校验带有括号的四则运算的正则校验变量使用${}包裹的四则运算正则表达式变量使用${}包裹的可以有括号的四则运算正则表达式变量使用#{}包裹的可以有括号的四则运算正则表达式变量使用${}或者 #{}包裹的可以有括号的四则运算…...

【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源
一、 业务场景解释 由于公司业务需要开发设计一款文件读取导入工具,导入的配置和目标数据库并不一定在同一个数据库地址,故需要使用到自定义数据源,并且支持数据源切换 大致场景如下: 二、工具选择 鉴于市面上有很多工具&#…...
制作docker镜像文件
技术主题 Docker作为一个开源的应用容器引擎,制作自己的docker镜像文件是使用docker的第一步,这样我们能够更好地管理应用程序。 技术原理 技术原理一:安装Docker 一般都是在官网下载特定的docker文件,然后安装即可 技术原理…...
JAVA 中 Socket 和 WebSocket 区别
区别: Socket: Socket是位于java.net包下的一个类,是 Java 提供的用于在客户端和服务器之间建立网络通信的底层套接字接口,用于传输层的网络通信。 WebSocket: WebSocket 是一种基于 TCP 协议的通信协议,建立在 Socket 的基础上,…...
python 接收到一个接口的数据 是json格式 ,然后把其中键值对的一个值改掉 再返回给接口
先上代码 import json import requests # 发送请求获取接口数据 response requests.get(http://example.com/api/data) # 解析JSON数据 data json.loads(response.text) # 更改某个键值对的值 new_value new_value data[key_to_change] new_value # 将更改后…...
⌈C++11⌋实现一个简易计算器
原理: 数据栈:有数据就直接入栈 运算符栈:设遍历到当前的运算符位e,如果栈不为空,比较栈顶与当前运算符优先级e,当栈顶运算符优先级大于或者等于e的优先级,则出栈,并将两个数据栈的…...

面试算法45:二叉树最低层最左边的值
题目 如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在如图7.5所示的二叉树中最低层最左边一个节点的值是5。 分析 可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时,每当遇到新…...
Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21.
前两天下了一个demo,运行时候报了一个这样的错,特此记录一下。 先看下报的错。 Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21. Searched in the following…...
LoRaWan之LoRaMAC 的快速入门指南
概述 本快速入门指南简要介绍了 LoRaMAC 层的重要操作。示例部分提供了不同设备类别的完整示例。 初始化 LoRaMAC层的初始化函数是LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks, LoRaMacRegion_t region )。该函数具有三个参数:L…...

中国教育企业出海 新兴技术助力抢占先机
继游戏、电商、短视频等领域轮番出海之后,国内教育企业纷纷开启了出海之路。近日发布的《2023年教育应用出海市场洞察》报告显示,在中国教育企业出海市场中,语言学习是最主要的赛道,但赛道竞争更为激烈。 报告指出,全…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...