数据库基础(一)【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 语句的执行时间,锁等待和事务隔离级别等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW中将枚举与条件结构一起使用

LabVIEW中将枚举与条件结构一起使用 枚举是一个具有相应数值的字符串标签型列表。在LabVIEW(U8 , U16-默认值和U32)中以无符号整数形式应用。 例如,可以有一个枚举保存四个季节,在这种情况下,每个字符串都…

Go之流程控制大全: 细节、示例与最佳实践

引言 在计算机编程中,流程控制是核心的组成部分,它决定了程序应该如何根据给定的情况执行或决策。以下是Go语言所支持的流程控制结构的简要概览: 流程控制类型代码if-else条件分支if condition { } else { }for循环for initialization; con…

GoLong的学习之路(一)语法之变量与常量

目录 GoLang变量批量声明变量的初始化类型推导短变量声明匿名变量 常量iota(特殊)(需要重点记忆) GoLang go的诞生为了解决在21世纪多核和网络化环境越来越复杂的变成问题而发明的Go语言。 go语言是从Ken Thomepson发明的B语言和…

分享个包含各省、市、区的编码数据的在线静态资源脚本

在翻《SpringBootVue3》——十三尼克陈作者的大型前后端分离项目实战里面&#xff0c;在看到地址管理的部分时&#xff0c;发现了该作者记录有一个静态的地址资源脚本 这里做个记录&#xff0c;打点 一、引入js <script src"https://s.yezgea02.com/1641120061385/td…

2024王道考研计算机组成原理——指令系统

零、本章概要 指令寻址&#xff1a;解决的是PC"1"的问题 数据寻址&#xff1a;使用寄存器/内存/结合 基址寻址&#xff1a;用于多道程序的并发执行 直接寻址&#xff1a;call 0x12345678 变址寻址&#xff1a;esi edi用于循环&#xff0c;因为使用直接寻址需要一堆…

超市商品管理系统 JAVA语言设计实现

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的超市商品管理系统&#xff0c;超市区域模块、超市货架模块、商品类型模块、商品档案模块&#xff0c;分为用户网页端和管理后台&#xff0c;基于角色的访问控制&#xff0c;可将权限精确…

【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ JAVA泛型 泛型介绍&#xff1a; ①泛型&#…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

2023年中职组“网络安全”赛项云南省竞赛任务书

2023年中职组“网络安全”赛项 云南省竞赛任务书 一、竞赛时间 总计&#xff1a;360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固…

VSCode 自动格式化

1.打开应用商店&#xff0c;搜索 prettier code formatter &#xff0c;选择第一个&#xff0c;点击安装。 2.安装完成后&#xff0c;点击文件&#xff0c;选择首选项&#xff0c;选择设置。 3.在搜索框内输入 save &#xff0c;勾选在保存时格式化文件。 4.随便打开一个文件&a…

Access denied for user ‘root‘@‘localhost‘ (using password:YES) 解决方案(禅道相关)

如果是忘记Mysql密码或更改权限后访问不了的问题请直接跳转以下链接&#xff1a; MySQL登录时出现Access denied for user ‘root‘‘localhost‘ (using password: YES)无法打开的解决方法 关于这个问题&#xff0c;网上查到的解决方法基本都是因为忘记Mysql密码或者用户权限问…

【Java 进阶篇】Java XML解析:从入门到精通

XML&#xff08;可扩展标记语言&#xff09;是一种常用的数据格式&#xff0c;用于存储和交换数据。在Java中&#xff0c;XML解析是一项重要的任务&#xff0c;它允许您从XML文档中提取和操作数据。本篇博客将从基础开始&#xff0c;详细介绍如何在Java中解析XML文档&#xff0…

前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(二)

阳光总在风雨后&#xff0c;请相信有彩虹。 案例 - 图书管理 bootstrap弹框 需求&#xff0c;点击添加按钮&#xff0c;没有离开当前页面&#xff0c;在当前页面弹出弹框&#xff08;弹窗&#xff09; 先学着实现一个简单的弹框&#xff0c;如下图右下角 bootstrap有两种方式…

20231024后端研发面经整理

1.如何在单链表O(1)删除节点&#xff1f; 狸猫换太子 2.redis中的key如何找到对应的内存位置&#xff1f; 哈希碰撞的话用链表存 3.线性探测哈希法的插入&#xff0c;查找和删除 插入&#xff1a;一个个挨着后面找&#xff0c;知道有空位 查找&#xff1a;一个个挨着后面找…

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的&#xff1a; category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]

交换机/防火墙-基础配置-23.10.11

update 优化了目录逻辑 -10.24.2023 一.前置知识 1.MAC地址 交换机在给主机之间传递信息包时&#xff0c;通过MAC地址来标识每台主机 主机间发生信息包交换时&#xff0c;交换机就会将通信过的主机的mac地址存下 dis mac-address 交换机转发的数据包中&#xff0c;会包含一…

Java面试(JVM篇)——JVM 面试题合集 深入理解JVM虚拟机

关于什么是JVM&#xff1f; 作用&#xff1a; 运⾏并管理Java 源码⽂件所⽣成的Class⽂件&#xff0c;在不同的操作系统上安装不同的JVM &#xff0c;从⽽实现了跨平台的保证。 ⼀般情况下&#xff0c;对于开发者⽽⾔&#xff0c;即使不熟悉JVM 的运⾏机制并不影响业务代码的…

Spring+spring mvc+mybatis整合的框架

Spring是一个轻量级的企业级应用开发框架&#xff0c;于2004年由Rod Johnson发布了1.0版本&#xff0c;经过多年的更新迭代&#xff0c;已经逐渐成为Java开源世界的第一框架&#xff0c;Spring框架号称Java EE应用的一站式解决方案&#xff0c;与各个优秀的MVC框架如SpringMVC、…

Python(一)关键字、内置函数

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&am…