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

数据库基础(一)【MySQL】

文章目录

  • 安装 MySQL
  • 修改密码
  • 连接和退出数据库服务器
  • 使用 systemctl 管理服务器进程
  • 配置数据库
  • 从文件角度看待数据库
  • 查看连接情况

安装 MySQL

这是在 Linux 中安装 MySQL 的教程:Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7,机器是 centOS7.6。

实际应用中,一般 MySQL 服务都是部署在 Linux 主机上的,如果想在 Windows 系统中安装,可以参考:Windows 下 MySQL 安装。

修改密码

MySQL 在安装时会为用户设置一个默认的随机密码,可以通过:

cat /var/log/mysqld.log | grep 'temporary password'

来查看密码:

2023-10-20T08:04:42.247710Z 1 [Note] A temporary password is generated for root@localhost: crOcKwwB;7Wd

其中,crOcKwwB;7Wd就是密码,使用它来登录:

mysql -uroot -p # 以 root 身份登录

修改 root 用户的密码有多个方法,在此介绍其中一种,在命令行中使用:

[root@xy xy]# mysqladmin -uroot -p'旧密码' password '新密码'

[注] 如果出现以下提示,则说明密码过于简单:

mysqladmin: unable to change password; error: 'Your password does not satisfy the current policy requirements'

连接和退出数据库服务器

mysql -uroot -p # 以 root 身份登录
  • h: 表示你要连接的 MySQL 服务器所在的主机,127.0.0.1 表示本主机。如果连接的是本地数据库服务器,它可以省略。

  • P: 表示你要连接的 MySQL 服务器所对应的端口号,一般默认是 3306。

  • u: 表示用哪一个用户连接 MySQL 服务器,root 表示超级用户。

  • p: 表示该用户对应的密码,密码可以直接跟在-p 后面,也可以回车后输入。

为了方便学习,都以 root 用户登录数据库服务器。

在 MySQL 服务器的命令行中键入quit/exit/\q回车以退出。

使用 systemctl 管理服务器进程

systemctl 是一个用于控制和检查 systemd 系统和服务管理器的工具,它负责在 Linux 内核启动后运行和维护用户空间的组件。systemctl 可以用来启动、停止、重启、重载、启用、禁用等各种操作 systemd 的服务单元,也可以用来查看系统的状态、日志、性能等信息。

终止服务器进程:

systemctl stop mysqld

启动服务器进程:

systemctl start mysqld

重启服务器进程:

systemctl restart mysqld

mysqld可以是你想要操作的进程名称。

配置数据库

MySQL 的配置文件在这个路径:

cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidport=3306
character-set-server=utf8
default-storage-engine=innodb

其中各个选项的含义是:

  • innodb_buffer_pool_size = 128M 设置了 InnoDB 存储引擎的缓冲池大小,这是 MySQL 中最重要的数据缓存,用来缓存表数据和索引。一般建议设置为服务器总内存的 70%(如果是专用服务器)或者 10%(如果是共享服务器)。这个选项可以提高查询性能和减少磁盘 I/O。
  • log_bin 开启了二进制日志功能,这是 MySQL 中非常重要的数据完整性选项,它会记录所有对数据库的修改操作,可以用来做数据恢复和主从复制。如果不指定日志文件名,就会使用默认的 mysql-bin 前缀。
  • join_buffer_size = 128M 设置了连接查询时使用的缓冲区大小,这个选项主要用于报表服务器,可以提高连接查询的性能。
  • sort_buffer_size = 2M 设置了排序查询时使用的缓冲区大小,这个选项也主要用于报表服务器,可以提高排序查询的性能。
  • read_rnd_buffer_size = 2M 设置了随机读取时使用的缓冲区大小,这个选项在按照非索引字段排序或分组时会用到,可以提高随机读取的性能。
  • datadir=/var/lib/mysql 设置了 MySQL 数据文件所在的目录,这里是 /var/lib/mysql ,也就是说所有的数据库和表文件都存储在这个目录下。
  • socket=/var/lib/mysql/mysql.sock 设置了 MySQL 客户端程序和服务器之间的本地通信指定一个套接字文件,这里是 /var/lib/mysql/mysql.sock ,也就是说客户端程序要连接到这个套接字文件才能和服务器通信。
  • symbolic-links=0 禁用了符号链接功能,这是为了防止一些安全风险,比如通过符号链接访问或修改其他数据库或文件系统中的文件。
  • log-error=/var/log/mysqld.log 设置了 MySQL 错误日志文件的位置,这里是 /var/log/mysqld.log ,也就是说所有的错误信息都会记录在这个文件中。
  • pid-file=/var/run/mysqld/mysqld.pid 设置了 MySQL 服务器进程的标识文件的位置,这里是 /var/run/mysqld/mysqld.pid ,也就是说这个文件中存储了 MySQL 服务器进程的 ID 号。
  • port=3306 设置了 MySQL 服务器监听的端口号,默认是 3306 ,也就是说客户端程序要连接到这个端口才能和服务器通信。测试学习时可以不用改,或者使用完毕后关闭 MySQL 服务器。实际使用时一般要做修改,因为服务器一般是暴露在公网上的。
  • *character-set-server=utf8 设置了 MySQL 服务器默认使用的字符集,这里是 utf8 ,也就是说所有的数据库和表都会使用 utf8 编码存储数据,除非另外指定。
  • *default-storage-engine=innodb 设置了 MySQL 创建数据表时默认使用的存储引擎,这里是 innodb ,也就是说所有的表都会使用 innodb 存储引擎存储数据和索引,除非另外指定。

其中打*号的是自定义的选项,可能数据库默认的选项就是它们,但为了保险,仍然显式地在配置文件中设定。datadir 的路径可以自定义,但这里使用默认的路径。当配置完毕后,要使配置文件生效,(重启 mysqld 后)重新连接 MySQL 服务。

在这里简单介绍一下索引:如果说数据库是一本字典,那么索引就是字典的目录。有了目录才能提高查找的效率,但目录本身也是占用数据库的空间的,所以这是空间换时间的做法。

从文件角度看待数据库

/var/lib/mysql路径下, 存放的是 MySQL 的所有数据库和表文件。例如创建了一个数据库test_db

mysql> create database test_db

在这个目录下会增加一个同名目录:

image-20231021184729051

这个目录下有一个db.log文件,它记录这个数据库的默认字符集和字符校验规则:

image-20231021184915551

如果在这个数据库中创建一个表:

mysql> use test_db; # 进入数据库mysql> create table test_table( # 创建表-> col int(2)-> );

在上面这个目录下会增加两个同名的文件:
image-20231021185500839

.frm 和 .ibd 是两种不同类型的文件:

  • .frm 文件:这是表定义文件,用于描述表结构。每当在 MySQL 中创建一个新的数据表时,都会在相应的数据库目录下生成一个与表名相同的 .frm 文件。这个文件包含了数据表的元数据信息,如字段名称、数据类型等。
  • .ibd 文件:这是表数据和索引文件。当你使用 InnoDB 存储引擎(MySQL 的默认存储引擎)创建一张表时,会在相应的数据库目录下生成一个与表名相同的 .ibd 文件。这个文件包含了数据表的实际数据以及索引信息。

需要注意的是,这两种文件都不能直接打开查看,而是由 MySQL 组织搭配的文件。如果需要查看或修改表结构,可以使用 SQL 语句;如果需要查看或修改表数据,可以使用 SQL 查询和更新语句。

而 MyISAM 存储引擎创建表时,会创建三个文件。

以上这些内容对于初学者而言可以不细究,只要知道我们在操作数据库或表的本质是对文件操作,只不过是间接地通过数据库软件支持的 SQL 语句操作,而不直接操作文件。

上面这些操作数据库和表的 SQL 语句将会在后续学习,此处只是站在文件的角度理解。

上面的操作是用户使用 SQL 语句,让 MySQL 创建数据库和表,假如用户直接操作这些底层文件会发生什么呢?下面直接将刚才创建的数据库test_db这个目录下的所有文件删除:

rm -rf test_db/

在 MySQL 客户端中查看数据库:

######## 删除前 ########
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.00 sec)
######## 删除后 ########
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

从效果上说,直接操作文件和执行 SQL 语句是一样的,但是这样做不能保证数据的安全性。例如多个客户端并发访问同一个数据库的同一张表这种情况,数据库需要限制不同客户端的行为,以保证数据的一致性等。MySQL 会记录用户的所有操作(除了修改密码这类私密的语句),并会进行一定的语法优化,将它们合并到一起。

数据库备份或移植,本质就是将这些文件拷贝,放在其他目录下。虽然这么做不会怎样,但是这是一种越级的操作。MySQL 在操作文件时,也是使用诸如rmcpmkdir这些操作的。

MySQL 默认有四个数据库,每个数据库都有其特定的用途:

  1. information_schema:这个数据库提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。换句话说,information_schema 是一个信息数据库,它保存着关于 MySQL 服务器所维护的所有其他数据库的信息。
  2. mysql:这是 MySQL 的核心数据库,类似于 SQL Server 中的 master 表。它主要负责存储数据库的用户、权限设置、关键字等 MySQL 自己需要使用的控制和管理信息。
  3. performance_schema:这个数据库主要用于收集数据库服务器性能参数。它提供了进程等待的详细信息,包括锁、互斥变量、文件信息等,并保存了历史的事件汇总信息,为提供 MySQL 服务器性能做出详细的判断。
  4. sys:这个库所有的数据源来自 performance_schema。它的目标是降低 performance_schema 的复杂度,让 DBA 能更好地阅读这个库里的内容,从而让 DBA 更快地了解 DB 的运行情况。

查看连接情况

show processlist 命令可以显示当前连接到 MySQL 服务器的线程的信息,可以使用这个命令来监控服务器的性能,排查问题,或者终止某些线程。

image-20231022004024786

其中:

  • Id:一个标识,可以在 MySQL 中通过 kill id 杀死指定 id 的线程。
  • User:显示当前用户,如果不是 root,这个命令就只显示你权限范围内的 SQL 语句。
  • Host:显示这个语句是从哪个 IP 的哪个端口上发出的,可用来追踪出问题语句的用户。
  • db:当前执行的命令是在哪一个数据库上,如果没有指定数据库,则该值为 NULL。
  • Command:显示当前连接执行的命令,一般就是休眠(Sleep)、查询(Query)和连接(Connect)。
  • Time:表示该线程处于当前状态的时间,单位是秒。
  • State:显示使用当前连接的 SQL 语句的状态。
  • Info:一般记录的是线程执行的语句,默认只显示前 100 个字符,如果要看全部信息,需要使用 show full processlist。

这个命令通常用于监控服务器的性能,排查问题或终止某些线程,也可以帮助分析 SQL 语句的执行时间,锁等待和事务隔离级别等。

相关文章:

数据库基础(一)【MySQL】

文章目录 安装 MySQL修改密码连接和退出数据库服务器使用 systemctl 管理服务器进程配置数据库从文件角度看待数据库查看连接情况 安装 MySQL 这是在 Linux 中安装 MySQL 的教程:Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7,机器是 centOS7.…...

C++ -- 位运算与常用库函数(ACWING语法基础)

位运算 & 与 | 或 ~ 非 ^ 异或 >> 右移 << 左移 常用操作&#xff1a; 求x的第k位数字 x >> k & 1lowbit(x) x & -x&#xff0c;返回x的最后一位1 常用库函数、 reverse 翻转 翻转一个vector&#xff1a; reverse(a.begin(), a.end(…...

老卫带你学---leetcode刷题(557. 反转字符串中的单词 III)

557. 反转字符串中的单词 III 问题&#xff1a; 给定一个字符串 s &#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1&#xff1a;输入&#xff1a;s "Lets take LeetCode contest" 输出&#xff1a;"…...

IEEE754 标准存储浮点数

1. IEEE754 标准简介 IEEE754 标准是一种用于浮点数表示和运算的标准&#xff0c;由国际电工委员会&#xff08;IEEE&#xff09;制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则&#xff0c;旨在提供一种可移植性和一致性的方式来表示和处理浮点数 IEEE754 …...

CSS 两栏布局

目录 CSS两栏布局&#xff08;左列定宽&#xff0c;右列自适应宽&#xff09; 方法一&#xff1a;浮动margin 方法二&#xff1a;定位margin 方法三&#xff1a;浮动BFC 方法四&#xff1a;Flex布局 方法五&#xff1a;able布局 CSS两栏布局&#xff08;左列不定宽&#…...

RHCSA常用命令总结

RHCSA回顾 1.Linux学习环境的安装部署 VMware虚拟机rhel9.x 磁盘容量&#xff1a;20GB cpu:1颗2核心 内存&#xff1a;2G 网卡&#xff1a;NAT 新CD/DVD设置镜像源文件 取消显示器的3d支持 &#xff08;1&#xff09;安装RHEL9 (2)组件&#xff1a;带有GUI的服务器 (3)分区…...

【Spring Boot】详解restful api

目录 1.restful api 1.1.历史 1.2.内容 1.3.传参 2.Spring Boot中的Restful Api 1.restful api 1.1.历史 RESTful API&#xff08;Representational State Transferful Application Programming Interface&#xff09;是一种设计风格&#xff0c;用于构建基于网络的应用…...

LISTAGG 函数

# LISTAGG 函数 对于查询中的每个组&#xff0c;LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序&#xff0c;然后将值串联成一个字符串。 ## 语法: sql LISTAGG( [DISTINCT] aggregate_expression [, delimiter ] ) [ WITHIN GROUP (ORDER BY order_list) ] …...

485modbus转profinet网关连三菱变频器modbus通讯配置案例

本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式&#xff0c;使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关&#xff0c;用户可以有效地管理和监控设备&#xff0c;从…...

1024节日

程序员节日...

【@EnableWebMvc的原理】

用途 启用SpringMvc 的 Java 配置类&#xff0c;代替 xml 格式的配置文件。 一、查看运用&#xff08;注解 EnableWebMvc &#xff0c;实现 WebMvcConfigurer &#xff09; Component("com.ibicd") EnableWebMvc public class AppConfig implements WebMvcConfigu…...

css3 2d转换transform详细解析与代码实例transform

CSS3 Transform是CSS3的一个模块&#xff0c;其目的是为了通过对元素的变形、旋转、缩放、平移等操作&#xff0c;能够更加丰富的展示页面效果。下面是CSS3 Transform的详细解析与代码实例&#xff1a; transform属性 transform属性用于对元素进行变形操作&#xff0c;其属性…...

点亮现代编程语言的男人——C语言/UNIX之父Dennis Ritchie

祝各位程序员们1024程序员节快乐&#x1f389;&#x1f389;&#x1f389; 图片来自网络&#xff0c;侵删 前言 在程序员中&#xff0c;有一位人物的不被人熟知&#xff0c;他的贡献甚至比他自身更要出名 C语言之父&#xff0c;UNIX之父——Dennis MacAlistair Ritchie 一…...

找不到msvcp100.dll解决教程

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;本文将介绍四个修复msvcp100.dll丢失的方法&#xff0c;帮助读者快速恢复计算机的正常运…...

萃取和constexpr

最近重温了一下萃取发现其与constexpr有相似之处&#xff0c;记录如下。 一、引出萃取 STL的在中心思想是将容器和算法分开&#xff0c;再通过迭代器iterator这一迭代器来将两者粘合起来。 通过迭代器进行算法计算&#xff0c;需要涉及两个问题&#xff1a; 问题一.通常需要…...

决策树完成图片分类任务

数据集要求&#xff1a; 训练集 和 验证集 &#xff08;要求分好&#xff09; 图片放置规则 &#xff1a; 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…...

Docker 容器全部停止命令

Docker是一个开源的容器化平台&#xff0c;它可以帮助开发者快速构建、部署和运行应用程序。在使用Docker时&#xff0c;我们通常会创建多个容器来运行不同的服务或应用。当我们需要停止所有的容器时&#xff0c;可以使用一些命令来实现。本文将介绍几种常见的停止所有Docker容…...

对GRUB和initramfs的小探究

竞赛时对操作系统启动过程产生了些疑问&#xff0c;于是问题导向地浅浅探究了下GRUB和initramfs相关机制&#xff0c;相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中&#xff0c;计算机具体的启动流程如下&#xff1a; 电源启动&#xff1a;当计算机的电源打开时&…...

springboo单机多线程高并发防止重复消费的redis方案

springboo单机多线程高并发防止重复消费的redis方案 仅提供方案与测试。 想法&#xff1a;第一次收到userCode时&#xff0c;检查是否在redis中有&#xff0c;如果有&#xff0c;就表明已经消费了&#xff0c;返回抢单失败&#xff1b;否则&#xff0c;就去消费&#xff0c;顺…...

Java架构师内功数据库

目录 1 导学2 数据库基本概念2.1 数据库系统2.2 三级模式-两级映像2.3 数据库设计2.4 数据模型2.4.1 E-R模型2.4.2 关系模型2.5 关系代数3 规范化和并发控制3.1 函数依赖3.2 键与约束3.3 范式3.3.1 第一范式1NF3.3.2 第二范式3.3.3 第三范式3.4 模式分解3.5 并发控制3.6 封锁协…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

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 …...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

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

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

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...