当前位置: 首页 > news >正文

MySQL 启动选项和字符集

1. 客户端和服务器

1.1 服务器程序
  1. 数据库实例:代表 MySQL 服务器程序的进程( mysqld 可执行文件)

  2. mysqld_safe:启动脚本,会间接调用 mysqld 并监控服务器运行状态。出现错误时可以帮助重启服务器程序,输出错误日志。

  3. mysql.server:启动脚本,会间接调用 mysqld_safe 。
    启动服务器程序 mysql.server start
    关闭服务器程序 mysql.server stop

  4. 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_servercollation_server描述

在本人电脑下,分别为 utf8mb4utf8mb4_0900_ai_ci ,说明不区分重音和大小写。

(2)数据库级别;

创建数据库时指定该数据库的字符集和比较规则(默认和服务器级别一致)

CREATE/ALTER DATABASE 数据库名
【 CHARACTER SET 字符集名】
【 COLLATE 比较规则名】

USE 数据库名;后可以查看character_set_databasecollation_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 的基础上&#xff0c…...

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年教育应用出海市场洞察》报告显示,在中国教育企业出海市场中,语言学习是最主要的赛道,但赛道竞争更为激烈。 报告指出,全…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...