📃个人主页:island1314
🔥个人专栏:MySQL学习
⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞
1. 背景 🚀
世界上主流数据库种类很多,有如下情况:
- SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
- Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
- PostgreSQL : 加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
- SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中
而我们这里主要用的就是 MySQL
2. MySQL 安装、卸载
2.1 MySQL 安装 -- 基于 Ubuntu
我这里是使用 Ubuntu 系统对 MySQL 进行的使用,大家需要在自己 Linux 上进行安装的可以下面内容
① 更新软件包列表
sudo apt update
② 安装 MySQL 服务器
# 查看可使用的安装包
sudo apt search mysql-server
接下来可以使用以下命令安装MySQL服务器:
# 安装最新版本
sudo apt install -y mysql-server
# 安装指定 8.0 版本
sudo apt install -y mysql-server-8.0
🔥 如果不加 -y
会在安装过程中,系统将提示你设置MySQL的root密码。我们需要确保密码容易记住,因为你将在以后需要用到它。 我们这里加了 -y 所以默认没有设置密码
③ 启动 MySQL 服务
安装完成后,MySQL服务会自动启动,未启动则使用以下命令启动MySQL服务:
sudo systemctl start mysql
然后我们这里是把 MySQL 设置为 开机自启动,就不用我们自己每次来调了
sudo systemctl enable mysql
④ 检查 MySQL 状态
sudo systemctl status mysql
至此,我们已经成功在线安装了MySQL服务器。
当前我们也可以用查看进程的方式来查看 当前 MySQL 是否成功安装
ps ajx | grep mysql
⑤ 登录 MySQL
首先,使用 root
用户登录到 MySQL。打开终端并输入以下命令:
sudo mysql -u root -p
- 登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功
⑥ 更改 root 密码
# 设置密码 mysql8.0
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 刷新缓存
flush privileges;
⑦ 修改 MySQL 配置允许远程连接
编辑 MySQL 配置文件,通常在 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
🔥 找到 bind-address 和mysqlx-bind-address项,把127.0.0.1更改为 0.0.0.0 或注释掉这两行,以允许从任何 IP 地址连接。
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
- mysqlx-bind-address与 bind-address 的用途相似,均用于设定MySQL服务器的监听地址。
- 不同之处在于,mysqlx-bind-address用于处理基于X Protocol的连接,而 bind-address 则关注于传统MySQL协议连接。
修改之后,保存后并退出编辑器后,重启 MySQL 服务以应用更改。
sudo systemctl restart mysql
⑧ 测试远程连接(自选)
从另一台计算机上,尝试使用新设置的 root
用户和密码远程连接到 MySQL 服务器。
mysql -h [服务器IP地址] -u root -p
🔥 完成这些步骤后,root 用户应该能够从远程位置登录到 MySQL 服务器,并且密码也已设置完成 。请确保网络和防火墙设置允许远程连接到 MySQL 服务器(默认端口为 3306)。
2.2 MySQL 卸载 --- 不大建议
🔥 要在 Ubuntu 系统上彻底卸载 MySQL,您可以按照以下步骤操作。请注意,这将完全移除 MySQL,包括所有数据和配置文件。在进行这些操作之前,一定要备份之前的所有重要数据。
① 停止 MySQL 服务
sudo systemctl stop mysql
② 卸载 MySQL 安装包
使用 apt-get 命令卸载 MySQL 服务器及其相关软件包。
sudo apt-get remove --purge mysql-server mysql-client mysql-common
③ 删除配置和数据文件
🔥 删除 MySQL 的配置文件和数据目录。这一步是必要的,因为 apt-get remove --purge 可能不会删除所有文件。
sudo rm -rf /etc/mysql /var/lib/mysql
sudo rm -rf /var/log/mysql
④ 删除 MySQL 用户 和 组
如果我们想要删除 MySQL 用户和组,可以执行以下命令:
sudo deluser mysql
sudo delgroup mysql
完成以上步骤后,MySQL 应该已经从您的系统中彻底卸载。在重新安装 MySQL 或安装不同版本的 MySQL 之前,确保系统已经清理干净。
- 但是我这里还是不大建议删除重装,比如我今天就重装了一次,我先删干净了,但是再进行安装的时候,就会安装失败,如下:
- 然后当我找了网上一系列教程之后,然后终于安装成功了,但是 MySQL 启动服务就报错了,真的会谢,错误如下:
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.
🔥 然后这个问题在网上那个时候又没找到一个靠谱的方案,然后就去找了一个大佬帮忙看看,大佬帮我看了好一会之后,还是操作不了,可能是我之前的一系列操作出现了啥问题,真的强烈建议不要看到网上教什么就直接输入什么了,至少先了解一下那个指令是啥起码,最后的最后还是老老实实的选择了重装系统,血的教训 !!!
3. MySQL 介绍
3.1 连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
注意:
- 如果没有写 -h 127.0.0.1 默认是连接本地
- 如果没有写 -P 3306 默认是连接3306端口号
补充一个指令 -- 清屏
mysql> system clear
3.2 什么是数据库 ?
站在 服务器 角度 来理解 MySQL
mysql 其实就是一套给我提供数据存取的服务的网络程序
- 数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据 - 将来在磁盘上存储的一套
- 数据库方案数据库服务 -- mysqld
🚀 存储数据用文件就可以了,为什么还要弄个数据库? 主要是因为 文件保存数据 有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
🔥 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度) (理解:按照内容进行字段性提取,都需要程序员自己去做,不大方便)
- 为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。
而数据库的存储,用到了如下的存储介质:
- 磁盘
- 内存
数据库的水平是衡量一个程序员水平的重要指标。
数据库本质:对数据内容存储的一套解决方案你给我字段或者要求,我直接给你结果就行
3.3 服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如下:
3.4 MySQL 架构
💧 MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris 。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
3.5 SQL 分类
其实主要的 SQL 指令操作,在这篇博客已经讲过了,大家可以看看 【MySQL学习】:关系数据库标准语言SQLhttps://island.blog.csdn.net/article/details/141996493
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构
- 代表指令: create, drop, alter
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作
- 代表指令: insert,delete,update
- DML 中又单独分了一个DQL,数据查询语言
- 代表指令: select
- DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
- 代表指令: grant,revoke,commit
3.6 存储引擎
之前在这篇博客里面我们也谈过一些内容,感兴趣的朋友们可以看看
从 InnoDB 到 Memory:MySQL 存储引擎的多样性https://island.blog.csdn.net/article/details/142349947
🥝 存储引擎
💢 存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
🥝 查看存储引擎
- 强烈注意:在 MySQL 下,输入的一系列命令都需要打 分号,千万千万不要忘记
🥝 存储引擎对比
4. 数据库的操作
数据库的基本指令操作,在这篇文章基本都有讲过,我这里都是一些补充
【MySQL学习】:关系数据库标准语言SQLhttps://island.blog.csdn.net/article/details/141996493
4.1 查看数据库
show databases;
-- 输出如下
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
那我们查看的这些数据库在哪呢,还记得我们 MySQL 的一系列配置文件嘛,它里面有个 datadir,如下:
创建的数据库会保存在 /var/lib/mysql 下
4.2 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 大写的表示关键字
- [] 是可选项
- CHARACTER SET : 指定数据库采用的字符集
- COLLATE : 指定数据库字符集的校验规则
🔥 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci,一般来说我们直接 create database 数据库名 就行了
补充一条指令 -- 显示创建语句
mysql> show create database learn1;
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| learn1 | CREATE DATABASE `learn1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
📚 说明:
- MySQL 建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
- /*!40100 default… */ 这个不是注释,表示当前使用mysql版本大于4.01版本,就执行这句话
言归正传,回到我们之前的话题 创建的数据库会保存在 /var/lib/mysql 下
- 建立数据库,本质就是Linux下的一个目录
- 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
理解 数据库 和 文件系统 的关联
- 创建数据库:本质就是在Linux环境下MySQL特定的路径(数据路径)var/lib/mysql 创建一个目录。
所以什么叫 数据库 ?
🔥 那么就是上面看到的,在当前对应的数据路径 /var/lib/mysql 下,ls 所看到的这些文件和目录,然后这些数据库里面可以存取很多表,这就叫作数据库的表,我们的这套数据库文件并不是直接由程序员去手动修改这些文件,而是通过 MySQL 客户端然后直接去访问我们的 MySQL 服务(mysqld)
因此结论是:数据库本质其实也是文件!!!只不过这些文件并不是由程序员自己直接操作,而是由数据库服务帮我们进行操作,这个工作是谁做的? --> mysqld服务帮我们做的
4.3 字符集和校验规则
字符集是什么?
创建数据库的时候,有两个编码集
- 数据库编码集 – 数据库未来存储数据--写入规则
- 数据库校验集 – 支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据采用的编码格式--读取原则
数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的
存数据的时候用什么编码,取的时候就得用什么编码去取
查看系统默认字符集以及校验规则
show variables like 'character_set_database';
show variables like 'collation_database'
查看数据库支持的字符集
show charset;
字符集主要是控制用什么语言。比如utf8就可以使用中文。
查看数据库支持的字符集校验规则
show collation;
- 校验规则使用 utf8_ general_ ci[不区分大小写]
- 校验规则使用 utf8_ bin[区分大小写]
现在也知道创建数据库了,也知道编码和校验规则了。两个合并下面就可以创建出指定编码和校验规则的数据库了。
- 就近原则:下面可以看到创建数据库没有指定,系统就用默认的。
如下就使用 gbk,不适用 utf8 了
create database d3 charset=gbk collate gbk_chinese_ci;
数据库配置文件中配置这个编码有什么意义呢?
- 因为曾经在配置文件中设置过,所以会影响创建数据库时默认编码和校验规则,编码和校验规则是匹配的。
那问题又来了,今天为什么又要设置数据库编码呢?
- 因为数据库里是需要存表的,在数据库里可能要建各种各样的表,有存各种各样数据的需求,这些表采用编码和校验规则是继承至它所在的数据库。
- 数据库默认依赖于mysqld,表依赖于数据库。这样就可以理解为什么要做这样的配置。
4.4 修改数据库
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
- 对数据库的修改主要是修改数据库的字符集,校验规则
4.5 数据库删除
DROP DATABASE [IF EXISTS] db_ name;
- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
- 注意:不要随意删除数据库
备份和恢复
① 备份
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
🔥 把test1.sql打开后,可以看到里面是大部分内容我们就见过的,如craete database test1、use test1还有后面插入数据等等。
其实它备份的时候,是把在这个数据库里做的有效操作全备份起来了。
所以说备份的不是只有数据,还把历史上所有有效操作全部备份起来了。
② 还原
mysql> source D:/mysql-5.7.22/mytest.sql
两个注意点:
- 不用/home/root ,直接/root
- root 下的文件只有 root 下连接 mysql 才有权限恢复
注意事项
如果备份的不是整个数据库,而是其中的一张表,怎么做?
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
同时备份多个数据库
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
- 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原
- 备份时带了 -B 这个备份文件其实是带了create databdase test1,use test1
- 如果没有带 -B 备份的时候只会把这个数据库里面所有表信息数据信息全部备份出来,如果需要还原需要自己先把数据库建好。
查看连接情况
show processlist;
-- 示例
mysql> show processlist;
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 366405 | Waiting on empty queue | NULL |
| 163 | root | localhost | NULL | Query | 0 | init | show processlist |
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
2 rows in set, 1 warning (0.00 sec)
- 可以告诉我们当前有哪些用户连接到我们的MySQL
- 如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了
- 以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况
5. 共勉
【*★,°*:.☆( ̄▽ ̄)/$:*.°★* 】那么本篇到此就结束啦,如果有不懂 和 发现问题的小伙伴可以在评论区说出来哦,同时我还会继续更新关于【MySQL】的内容,请持续关注我 !!