【MySQL】:Linux 环境下 MySQL 使用全攻略

【MySQL】:Linux 环境下 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 上进行安装的可以下面内容

① 更新软件包列表

代码语言:javascript代码运行次数:0运行复制sudo apt update② 安装 MySQL 服务器

代码语言:javascript代码运行次数:0运行复制# 查看可使用的安装包

sudo apt search mysql-server接下来可以使用以下命令安装MySQL服务器:

代码语言:javascript代码运行次数:0运行复制# 安装最新版本

sudo apt install -y mysql-server

# 安装指定 8.0 版本

sudo apt install -y mysql-server-8.0🔥 如果不加 -y 会在安装过程中,系统将提示你设置MySQL的root密码。我们需要确保密码容易记住,因为你将在以后需要用到它。 我们这里加了 -y 所以默认没有设置密码

③ 启动 MySQL 服务

安装完成后,MySQL服务会自动启动,未启动则使用以下命令启动MySQL服务:

代码语言:javascript代码运行次数:0运行复制sudo systemctl start mysql然后我们这里是把 MySQL 设置为 开机自启动,就不用我们自己每次来调了

代码语言:javascript代码运行次数:0运行复制sudo systemctl enable mysql④ 检查 MySQL 状态

代码语言:javascript代码运行次数:0运行复制sudo systemctl status mysql至此,我们已经成功在线安装了MySQL服务器。

当前我们也可以用查看进程的方式来查看 当前 MySQL 是否成功安装

代码语言:javascript代码运行次数:0运行复制ps ajx | grep mysql⑤ 登录 MySQL

首先,使用 root 用户登录到 MySQL。打开终端并输入以下命令:

代码语言:javascript代码运行次数:0运行复制sudo mysql -u root -p登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功⑥ 更改 root 密码

代码语言:javascript代码运行次数:0运行复制# 设置密码 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

代码语言:javascript代码运行次数:0运行复制sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf🔥 找到 bind-address 和mysqlx-bind-address项,把127.0.0.1更改为 0.0.0.0 或注释掉这两行,以允许从任何 IP 地址连接。

代码语言:javascript代码运行次数:0运行复制bind-address = 0.0.0.0

mysqlx-bind-address = 0.0.0.0mysqlx-bind-address与 bind-address 的用途相似,均用于设定MySQL服务器的监听地址。不同之处在于,mysqlx-bind-address用于处理基于X Protocol的连接,而 bind-address 则关注于传统MySQL协议连接。修改之后,保存后并退出编辑器后,重启 MySQL 服务以应用更改。

代码语言:javascript代码运行次数:0运行复制sudo systemctl restart mysql⑧ 测试远程连接(自选)

从另一台计算机上,尝试使用新设置的 root 用户和密码远程连接到 MySQL 服务器。

代码语言:javascript代码运行次数:0运行复制mysql -h [服务器IP地址] -u root -p🔥 完成这些步骤后,root 用户应该能够从远程位置登录到 MySQL 服务器,并且密码也已设置完成 。请确保网络和防火墙设置允许远程连接到 MySQL 服务器(默认端口为 3306)。

2.2 MySQL 卸载 --- 不大建议🔥 要在 Ubuntu 系统上彻底卸载 MySQL,您可以按照以下步骤操作。请注意,这将完全移除 MySQL,包括所有数据和配置文件。在进行这些操作之前,一定要备份之前的所有重要数据。

① 停止 MySQL 服务

代码语言:javascript代码运行次数:0运行复制sudo systemctl stop mysql② 卸载 MySQL 安装包

使用 apt-get 命令卸载 MySQL 服务器及其相关软件包。

代码语言:javascript代码运行次数:0运行复制sudo apt-get remove --purge mysql-server mysql-client mysql-common③ 删除配置和数据文件

🔥 删除 MySQL 的配置文件和数据目录。这一步是必要的,因为 apt-get remove --purge 可能不会删除所有文件。

代码语言:javascript代码运行次数:0运行复制sudo rm -rf /etc/mysql /var/lib/mysql

sudo rm -rf /var/log/mysql④ 删除 MySQL 用户 和 组

如果我们想要删除 MySQL 用户和组,可以执行以下命令:

代码语言:javascript代码运行次数:0运行复制sudo deluser mysql

sudo delgroup mysql完成以上步骤后,MySQL 应该已经从您的系统中彻底卸载。在重新安装 MySQL 或安装不同版本的 MySQL 之前,确保系统已经清理干净。

但是我这里还是不大建议删除重装,比如我今天就重装了一次,我先删干净了,但是再进行安装的时候,就会安装失败,如下:然后当我找了网上一系列教程之后,然后终于安装成功了,但是 MySQL 启动服务就报错了,真的会谢,错误如下:代码语言:javascript代码运行次数:0运行复制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 连接服务器代码语言:javascript代码运行次数:0运行复制mysql -h 127.0.0.1 -P 3306 -u root -p注意:

如果没有写 -h 127.0.0.1 默认是连接本地如果没有写 -P 3306 默认是连接3306端口号补充一个指令 -- 清屏

代码语言:javascript代码运行次数:0运行复制mysql> system clear3.2 什么是数据库 ?站在 服务器 角度 来理解 MySQL

mysql它是数据库服务的客户端mysqld它是数据库服务的服务器端mysql本质:基于C(mysql) S(mysqld)模式的一种网络服务mysql 其实就是一套给我提供数据存取的服务的网络程序

数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据 - 将来在磁盘上存储的一套数据库方案数据库服务 -- mysqld🚀 存储数据用文件就可以了,为什么还要弄个数据库? 主要是因为 文件保存数据 有以下几个缺点:

文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便🔥 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度) (理解:按照内容进行字段性提取,都需要程序员自己去做,不大方便)

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。而数据库的存储,用到了如下的存储介质:

磁盘内存数据库的水平是衡量一个程序员水平的重要指标。

数据库本质:对数据内容存储的一套解决方案你给我字段或者要求,我直接给你结果就行

3.3 服务器,数据库,表关系所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:3.4 MySQL 架构💧 MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris 。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

3.5 SQL 分类其实主要的 SQL 指令操作,在这篇博客已经讲过了,大家可以看看 【MySQL学习】:关系数据库标准语言SQL

icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/article/2458305

DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop, alterDML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert,delete,updateDML 中又单独分了一个DQL,数据查询语言 代表指令: selectDCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit3.6 存储引擎之前在这篇博客里面我们也谈过一些内容,感兴趣的朋友们可以看看

从 InnoDB 到 Memory:MySQL 存储引擎的多样性

icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/article/2458307

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

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

🥝 查看存储引擎强烈注意:在 MySQL 下,输入的一系列命令都需要打 分号,千万千万不要忘记🥝 存储引擎对比4. 数据库的操作数据库的基本指令操作,在这篇文章基本都有讲过,我这里都是一些补充

【MySQL学习】:关系数据库标准语言SQL

icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/article/2458305

4.1 查看数据库代码语言:javascript代码运行次数:0运行复制show databases;

-- 输出如下

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.01 sec)那我们查看的这些数据库在哪呢,还记得我们 MySQL 的一系列配置文件嘛,它里面有个 datadir,如下:

创建的数据库会保存在 /var/lib/mysql 下

​4.2 创建数据库代码语言:javascript代码运行次数:0运行复制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 数据库名 就行了

补充一条指令 -- 显示创建语句

代码语言:javascript代码运行次数:0运行复制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 字符集和校验规则字符集是什么?

创建数据库的时候,有两个编码集

数据库编码集 – 数据库未来存储数据--写入规则数据库校验集 – 支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据采用的编码格式--读取原则数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的

存数据的时候用什么编码,取的时候就得用什么编码去取

查看系统默认字符集以及校验规则

代码语言:javascript代码运行次数:0运行复制show variables like 'character_set_database';

show variables like 'collation_database'查看数据库支持的字符集

代码语言:javascript代码运行次数:0运行复制show charset;字符集主要是控制用什么语言。比如utf8就可以使用中文。

查看数据库支持的字符集校验规则

代码语言:javascript代码运行次数:0运行复制show collation;校验规则使用 utf8_ general_ ci不区分大小写校验规则使用 utf8_ bin区分大小写现在也知道创建数据库了,也知道编码和校验规则了。两个合并下面就可以创建出指定编码和校验规则的数据库了。

就近原则:下面可以看到创建数据库没有指定,系统就用默认的。如下就使用 gbk,不适用 utf8 了

代码语言:javascript代码运行次数:0运行复制create database d3 charset=gbk collate gbk_chinese_ci;数据库配置文件中配置这个编码有什么意义呢?

因为曾经在配置文件中设置过,所以会影响创建数据库时默认编码和校验规则,编码和校验规则是匹配的。那问题又来了,今天为什么又要设置数据库编码呢?

因为数据库里是需要存表的,在数据库里可能要建各种各样的表,有存各种各样数据的需求,这些表采用编码和校验规则是继承至它所在的数据库。数据库默认依赖于mysqld,表依赖于数据库。这样就可以理解为什么要做这样的配置。4.4 修改数据库代码语言:javascript代码运行次数:0运行复制ALTER DATABASE db_name

[alter_spacification [,alter_spacification]...]

alter_spacification:

[DEFAULT] CHARACTER SET charset_name

[DEFAULT] COLLATE collation_name对数据库的修改主要是修改数据库的字符集,校验规则4.5 数据库删除代码语言:javascript代码运行次数:0运行复制DROP DATABASE [IF EXISTS] db_ name;数据库内部看不到对应的数据库对应的数据库文件夹被删除,级联删除,里面的数据表全部被删注意:不要随意删除数据库备份和恢复① 备份

代码语言:javascript代码运行次数:0运行复制# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径🔥 把test1.sql打开后,可以看到里面是大部分内容我们就见过的,如craete database test1、use test1还有后面插入数据等等。

其实它备份的时候,是把在这个数据库里做的有效操作全备份起来了。

所以说备份的不是只有数据,还把历史上所有有效操作全部备份起来了。

② 还原

代码语言:javascript代码运行次数:0运行复制mysql> source D:/mysql-5.7.22/mytest.sql两个注意点:

不用/home/root ,直接/rootroot 下的文件只有 root 下连接 mysql 才有权限恢复注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

代码语言:javascript代码运行次数:0运行复制mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql同时备份多个数据库

代码语言:javascript代码运行次数:0运行复制mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原备份时带了 -B 这个备份文件其实是带了create databdase test1,use test1如果没有带 -B 备份的时候只会把这个数据库里面所有表信息数据信息全部备份出来,如果需要还原需要自己先把数据库建好。查看连接情况代码语言:javascript代码运行次数:0运行复制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】的内容,请持续关注我 !!

更多尼泊尔内容

为什么游戏越来越流行?
mobile28365-365

为什么游戏越来越流行?

🗓️ 07-03 👁️ 1706
EA认�是什么?哪些大学开设工程类专业?
侠盗猎车手5 GTA5 线下秘籍作弊码集合大全 最全作弊码收集
人们需要多久才能养成或改掉一个习惯
365提款验证

人们需要多久才能养成或改掉一个习惯

🗓️ 06-29 👁️ 6067
玉溪香烟品种汇总大全 价格及参数盘点!
365提款验证

玉溪香烟品种汇总大全 价格及参数盘点!

🗓️ 07-04 👁️ 5218
剑网三 JJC常见的减伤技能:苍云和长歌
mobile28365-365

剑网三 JJC常见的减伤技能:苍云和长歌

🗓️ 07-04 👁️ 1615
《佗》的繁体字
365提款验证

《佗》的繁体字

🗓️ 07-05 👁️ 9748
王者荣耀中反蓝的具体含义是什么?
365bet娱乐在线

王者荣耀中反蓝的具体含义是什么?

🗓️ 07-06 👁️ 3652
十大女星直播中谁最污?揭秘
365提款验证

十大女星直播中谁最污?揭秘"黄鳝门"事件始末

🗓️ 06-29 👁️ 1757