1. 背景 ?
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL : 加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中
2. MySQL 安装、卸载
2.1 MySQL 安装 -- 基于 Ubuntu
我这里是使用 Ubuntu 系统对 MySQL 进行的使用,大家需要在自己 linux 上进行安装的可以下面内容
① 更新软件包列表
sudo apt update
# 查看可使用的安装包 sudo apt search mysql-server
# 安装最新版本 sudo apt install -y mysql-server # 安装指定 8.0 版本 sudo apt install -y mysql-server-8.0
? 如果不加 -y
会在安装过程中,系统将提示你设置MySQL的root密码。我们需要确保密码容易记住,因为你将在以后需要用到它。 我们这里加了 -y 所以默认没有设置密码
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql
ps ajx | grep mysql
⑤ 登录 MySQL
sudo mysql -u root -p
登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功
# 设置密码 mysql8.0 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; # 刷新缓存 flush privileges;
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
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协议连接。
sudo systemctl restart mysql
⑧ 测试远程连接(自选)
mysql -h [服务器IP地址] -u root -p
? 完成这些步骤后,root 用户应该能够从远程位置登录到 MySQL 服务器,并且密码也已设置完成 。请确保网络和防火墙设置允许远程连接到 MySQL 服务器(默认端口为 3306)。
2.2 MySQL 卸载 --- 不大建议
? 要在 Ubuntu 系统上彻底卸载 MySQL,您可以按照以下步骤操作。请注意,这将完全移除 MySQL,包括所有数据和配置文件。在进行这些操作之前,一定要备份之前的所有重要数据。
① 停止 MySQL 服务
sudo systemctl stop mysql
使用 apt-get 命令卸载 MySQL 服务器及其相关软件包。
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo rm -rf /etc/mysql /var/lib/mysql sudo rm -rf /var/log/mysql
sudo deluser mysql sudo delgroup 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它是数据库服务的客户端
mysqld它是数据库服务的服务器端
mysql本质:基于C(mysql) S(mysqld)模式的一种网络服务
数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据 - 将来在磁盘上存储的一套
数据库方案数据库服务 -- mysqld
文件的安全性问题
文件不利于数据查询和管理
文件不利于存储海量数据
文件在程序中控制不方便
? 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度) (理解:按照内容进行字段性提取,都需要程序员自己去做,不大方便)
为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。
磁盘
内存
3.3 服务器,数据库,表关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
3.4 MySQL 架构
? MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris 。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
3.5 SQL 分类
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 存储引擎
? 存储引擎
? 存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
? 查看存储引擎

强烈注意:在 MySQL 下,输入的一系列命令都需要打 分号,千万千万不要忘记
? 存储引擎对比

4. 数据库的操作
4.1 查看数据库
show databases; -- 输出如下 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec)
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版本,就执行这句话
建立数据库,本质就是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;
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
如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了
以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况
本文链接:https://blog.runxinyun.com/post/378.html 转载需授权!
留言0