【MySQL】数据库基础与MySQL的安装

news2025/1/7 6:33:30

1. 数据库基础

1.1 什么是数据库

在接触数据库之前,回想一下我们之前写的所有小项目,如果需要持久化保存一些内容,我们是保存在文件中的,似乎也能够很不错的支持我们的操作,解决我们的需求。但是,实际上是因为小项目需要持久化保存的数据规模比较少,使用文件就能够解决,但是文件也有一些缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

为了解决上述问题,专家设计了更加利于管理数据的东西——数据库

1.2 主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研 究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库 中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

2. MySQL基本常识

2.0 现有MySQL卸载

image-20240816141220031

可以看到现在系统内有mysql的服务正在运行,要卸载mysql的话需要以下几个步骤

1. 停止MySQL服务器

sudo systemctl stop mysql

此命令将停止 MySQL 服务器的运行

2. 卸载MySQL

sudo dpkg -P mysql-community-server # 单独卸载mysql-community-server,因为会弹出确认框,我们要选择yes,如果也使用管道,将会屏蔽标准输入
dpkg -l | grep mysql | awk '{print $2}' | sudo xargs dpkg -P # 批量删除所有mysql相关包
# 1. dpkg -l 列出所有包
# 2. grep mysql 查看所有包含mysql字符串的结果
# 3. awk '{print $2}' 输出文本的第二列内容
# 4. xargs是用来获取上一步输出的内容,并拼接到当前指令的最后面
#    dpkg -P 删除指定包

此命令将卸载 MySQL 软件包及其相关的依赖项

image-20240817185555971

3. 卸载残留文件

mysql卸载完成后残留文件,我们可以查找到他们并删除

# 1. /var目录下的残留文件
sudo find /var -name "*mysql*" # 查找mysql相关文件
sudo find /var -name "*mysql*" | sudo xarg rm -rf # 删除
# 2. /etc/my.cnf文件
rm /etc/my.cnf
# 3. /etc/mysql/*的所有文件
rm -rf /etc/mysql/*

2.1 MySQL安装

1. 获取mysql5.7安装包

wget http://repo.mysql.com/mysql-apt-config_0.8.12-1_all.deb # 使用wget获取mysql5.7版本的安装包

image-20240817194847172

2. 安装mysql官方源

sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb # 使用dpkg安装官方源

image-20240817195259087

这里选择与自己ubuntu版本对应的源(使用lsb_release -a可以查看)

image-20240817195406733

笔者这里是jammy,可以看到是没有对应版本的,所以这里我选择bionic

image-20240817195510312

这里选择安装5.7版本

image-20240817195550270

3. 更新apt源

sudo apt-get update

image-20240817195657897

在更新源过程中可能遇到的问题:

  1. 出现错误E: The repostory 'file:/cdrom jammy Release' no longer has a Release file
# 解决方案
sudo vim /etc/apt/source.list
# 在source.list中找到下面这行文件并删除
deb [check-date=no] file:///cdrom jammy main restricted
  1. 出现gpg-key过期的情况
sudo apt-key adv -keyserver keyserver.ubuntu.com -recv-keys 467B942D3A79BD29 
# 这里467B942D3A79BD29替换成你自己的报错key
  1. 出现更新警告:Key is stored in legacy trusted.gpg keyring(/etc/apt/trusted.gpg)
# 这个警告的意思是,需要在trusted.gpg.d/目录下查找GPG密钥,因此将密钥文件拷贝过去即可
cp /etc/apt/trusted/gpg /etc/apt/trusted.gpg.d/
sudo apt-get update

4. 查看当前可安装的mysql版本

image-20240817195828469

这里发现三个版本可安装,我们要安装的是5.7版本

5. 安装mysql和相关服务

sudo apt install -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libmysqlclient-dev=5.7* # 分别安装5.7版本的mysql客户端 mysql服务端 mysql的连开发工具包

在弹出的框里面输入mysql的登录密码

image-20240818082216164

6. 设置/修改mysql密码,以及设置密码强度等级

ubuntu@VM-12-15-ubuntu:~$ sudo mysql_secure_installation # 要执行的指令

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y # 设置密码生效

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 # 更改密码强度等级
Please set the password for root here.

New password: 

Re-enter new password: 

Estimated strength of the password: 25 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yes
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : yes # 移除匿名用户登录
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y # 不允许远程登录
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y # 删除test数据库
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

7. mysql配置文件

sudo vim /etc/mysql/my.cnf   # 编辑配置文件
[client]
default-character-set = utf8 # 设置mysql客户端默认字符集编码为utf8

[mysql]
default-character-set = utf8 # 设置mysql默认字符集编码为utf8

[mysqld]
character-set-server = utf8 # 设置mysql服务端默认字符集编码为utf8
default-storage-engine=innodb # 设置默认存储引擎为innodb
bind-address = 0.0.0.0 # 设置能接受任意IP地址的连接
port=3306 # 默认端口号为3306

datadir=/var/lib/mysql # 默认存储目录在/var/lib/msyql中
socket=/var/lib/mysql/mysql.sock # 指定本地连接方式

8. 开启mysql服务

sudo systemctl start mysql # 开启mysql服务

现在可以登录mysql测试一下安装是否成功

mysql -uroot -p # 输入这个

image-20240821094417348

看到这个图片就是安装成功了

2.2 MySQL的登录选项

在上面的步骤中,我们使用了简单的mysql登录选项,来测试mysql的安装情况,现在我们来详细介绍一下mysql的登录选项

  • -p表示密码
  • -P指定端口号
  • -h指定IP(MySQL是一个网络服务)
  • -u指定登录用户

所以上面的mysql -uroot -p指的就是使用root用户的身份,默认IP为localhost(127.0.0.1),默认端口号,使用密码登录

2.3 MySQL的宏观认识

1. mysql的服务端和客户端认识

mysql是一个网络服务,和我们之前写过的网络服务demo一样,都有客户端服务端两个程序,我们安装完成之后使用systemctl start mysql启动的就是mysql的服务端。使用mysql -uroot -p登录的就是mysql的客户端。mysql的服务端和客户端通过网络进行通信

2. mysql的服务器、数据库、表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

  • 数据库服务器、数据库和表的关系如下:

    image-20240821104834468

2.4 MySQL的架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

mysql architecture principle review Programmer Sought

这里先见一见mysql的整体架构,我们之后再学习过程中在逐步理解

2.5 MySQL的存储引擎

存储引擎是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

可以使用下面命令来查看mysql支持的存储引擎

show engines;

image-20240821114919010

存储引擎对比图:

image-20240821115028780
本节完…

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

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

相关文章

健身房管理系统的设计与实现设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

Redis7基础篇(七)

redis哨兵(sentinel) 目录 redis哨兵(sentinel) 是什么 能干吗 案例演示 架构 案例步骤 出现的问题 哨兵的运行流程和选举原理 哨兵的使用建议​编辑 是什么 在之前的复制中我们了解到 主机shutdown之后 从机就会一直等…

轻松创作高质量的AI音乐——Suno API

Suno 歌曲生成 API 对接指南 随着人工智能技术的飞速发展,各类 AI 程序已如雨后春笋般涌现。AI 不再是遥不可及的存在,它的身影深入了人类工作与生活的每一个角落。其应用领域也愈加广泛,从初期的写作,到现如今的医疗、教育&…

为什么同一台手机连着电脑的ip地址不一样

在现代社会中,网络已成为我们日常生活不可或缺的一部分。从日常办公到休闲娱乐,网络无处不在。然而,在享受网络带来的便利时,我们可能会遇到一些看似复杂实则有趣的网络现象。今天,我们就来探讨一个常见却又容易被忽视…

LLM | 面向对话式医疗健康场景的医疗大模型

近日,复旦大学数据智能与社会计算实验室 (Fudan-DISC) 开发并开源了一个专门针对医疗健康对话式场景而设计的医疗领域大模型:DISC-MedLLM。 DISC-MedLLM DISC-MedLLM 是一个专为医疗健康对话场景而打造的领域大模型,它可以满足您的各种医疗保…

嵌入式堆栈、ARM寄存器

栈里面存放的内容:局部变量和系统信息,函数调用链路也是系统信息的一环 ARM寄存器 LR:程序跳转的时候,返回到的地址就保存到此处 PC:程序计数器,pc 要执行的下一条指令地址,就存放在此处&#…

Obsidian Publish的开源替代品Markopolis

什么是 Markopolis ? Markopolis 是一款旨在提供 Markdown 文件的 Web 应用和 API 服务器。它允许您以网站形式共享 Markdown 笔记,并使用 API 与 Markdown 文件交互和操作它们。类似于 Obsidian Publish,但又不会被锁定在 Obsidian 生态系统…

FMS 2024:多家厂商CXL技术方案总览

CXL(Compute Express Link)联盟自成立以来一直是FMS闪存峰会的常客。在2022年的峰会上,CXL联盟宣布了CXL 3.0版本规范,随后在2023年的超级计算大会上推出了CXL 3.1版本。起初,CXL作为一种主机到设备的互联标准&#xf…

【LiteX】【仿真】使用litex_sim在Python环境中实现FPGA SoC仿真测试

目录 介绍环境依赖litex_sim 入门仿真litex_server、litex_cli、litescope_cli仿真调试litex_sim仿真窗口litex_server窗口litex_cli窗口litescope_cli窗口 波形DUMP方法一:导出指定时间段的波形方法二:在命令行中配置寄存器控制波形导出方法三&#xff…

BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?

在当下这个竞争激烈的零售市场,企业如何在波诡云谲的商场中站稳脚跟,实现销售目标的翻倍增长? 答案可能就藏在那些看似杂乱无章的数字里。 是的,你没有看错,答案正是那些我们日常接触的销售数据。它们就像是宝藏&…

92.SAP ABAP - RFC函数外部调用时的debug - 笔记

当RFC函数被外部系统访问,需要联合调试时,也需要debug模式,打断点进行跟踪。这种要如何做呢? 目录 1.SE37进入程序,通过菜单Utilities-Settings进入 2.ABAP Editor-Debugging Tab页面 3.单击Set/Delete External Br…

软件设计师全套备考系列文章7 -- 树、二叉树、图

软考-- 软件设计师(7)-- 树、二叉树、图 文章目录 软考-- 软件设计师(7)-- 树、二叉树、图前言一、树的基本概念二、二叉树的基本概念三、二叉树的考点四、线索二叉树五、平衡二叉树六、图 前言 考试时间:每年5月、11…

制冷系统四通阀、截止阀和单向阀

一、 四通阀 (一)作用:是热泵型空调中的关键部件,起制冷系统中制冷、制热转换的作用,通过更换压缩机排气管和回气管进入蒸发器和冷凝器的方向,从而达到制冷和制热目的。亦可以用于除湿系统的换向化霜。 (二)工作原理&#xff1…

java接口 controller层接收list集合传参,postman 调用接口时required parameter XXX is not present

开发过程中开发一个java接口 controller层接收list集合传参,然后postman调用一直不成功,报错 使用RequestParam方式,如果postman 调用接口时报错required parameter XXX is not present 可能是(value“items”)跟你输…

微信小程序--31(todolist案例)

一.功能 输入待办事件添加代办事件删除代办事件 二、步骤 1.添加输入框 .wxml代码&#xff1a; <!-- 1.输入框 --><input type"text" bindinput"handleInput" value"{{text}}" /> .wxss代码&#xff1a; /* 1.输入框样式 */ i…

百度地图API快速使用 - 以批量算路为例讲解

目录 1. 开发文档链接 2. 开发流程说明 &#xff08;1&#xff09;首先-创建应用获取访问应用的AK &#xff08;2&#xff09; 查看文档的示例代码并分析 3. 简单改编示例的代码 1. 开发文档链接 批量算路 | 百度地图API SDK (baidu.com)https://lbsyun.baidu.com/faq/ap…

Adobe After Effects的插件--------3D Stroke

3D Stroke是蒙版路径描边插件。它是AE的外置插件,需要自己下载,可以在lookAE中下载。 该插件会依据图层上的蒙版路径(内部)创建蒙版,并且使原蒙版失效。 基础属性 英文属性名中文属性名描述Path路径用来选择图层上的某一段蒙版路径,若 Use All Paths 属性未勾选,该属性…

【SQL】下属员工数量

目录 题目 分析 代码 题目 表&#xff1a;Employees ----------------------- | Column Name | Type | ----------------------- | employee_id | int | | name | varchar | | reports_to | int | | age | int | -------------------…

ubuntu虚拟机磁盘扩容

首先&#xff01;&#xff01;&#xff01;关闭虚拟机 step1&#xff1a;更改虚拟机设置 【右键】你想修改的虚拟机&#xff0c;点【设置】&#xff0c;或者直接点图上位置 选择【硬盘】&#xff0c;右边【拓展】&#xff0c;弹出的窗口中修改你想修改的大小&#xff08;我从…

Chat App 项目之解析(七)

Chat App 项目介绍与解析&#xff08;一&#xff09;-CSDN博客文章浏览阅读259次&#xff0c;点赞7次&#xff0c;收藏2次。Chat App 是一个实时聊天应用程序&#xff0c;旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录&#xff0c;还提供了…