初始数据库 - 了解数据库

centos 7 版本当中安装 mysql

安装与卸载中,⽤⼾全部切换成为root,⼀旦 安装,普通⽤⼾是可以使用的。

卸载不需要的环境

首先,在安装之前,要先确定你当前系统当中是否已经有了mysql 的环境,如果你不想卸载,继续用也可以,当然,也可以卸载之后再重新安装。

查看当前环境当中是否有 mqsql :

上述当中的 mariadb 其实就是 mysql,只不过是mysql 的一个开源分支。也是可以正常使用的,只要是 sql 的,其实使用方式都是差不多的。

使用下述 systemctl 命令 关闭 mysql  服务:
 

使用 rpm -pa 查看 使用 yum 下载的安装包,使用 grep 过滤出 mqsql 安装包:
 

 你可以一个一个卸载安装包,但是这样太麻烦。可以使用 xargs 命令可以把 安装包列表,以xargs 的形式 喂给卸载程序, 就可以批量话卸载:
 

 验证卸载:

如果上述的第一个路径当中的 my.cnf 文件已经被删除了,说明已经卸载成功了;第二个路径是上一个 mysql 残留下来的数据,这个数据没被删除也是在情理之中的。

 配置 mysql yum 源

 获取mysql官⽅yum源   http://repo.mysql.com/
 

通过上述的网址获取到  yum  源资源。

 在上述网站当中有很多的版本,首先要确定自己的版本是多少的:

我上述的版本是 centos 7.9.xx  的,所以,尽量选择相近的版本的 yum 源进行下载。

最常用的版本就是 mqsql57,在最后后面带上的 el7-11 的意思就是  centos 7.11 版本,对应下载即可。

 下载到 windows 桌面当中就可以在 linux 系统当中使用 rz 命令,来备份到 Linux 当中:

像上述一样选择 我们下载的安装到 Linux 当中:
 

 查看当中系统当中的 yum 源:

 在我们上述安装之后,可能不会有 mysql 的yum源,我们使用 rpm -ivh 上述mysql 安装包(相当于有安装,也就是解压并拷贝):
 

 查看,mysql :
 

在这个 yum 源当中就有 对应的版本 和 一些工具。

我们按照自己的需求安装即可。但是,其实会自动根据我们所选择的 yum 源,和当前我们的系统,自己选择合适的版本。


测试 安装是否成功:
 

说明当前的 yum 源已经生效了。

安装 mysql服务

yum install -y mysql-community-server

测试安装:
 

需要保证安装之后,由上述文件。

还需要有 mysqld 这个 mysql 服务端的程序。

还需要有 mysql 这样的服务(客户端)。

 启动 mysql :

 netstat -nltp 查看:

已经有 这 mysql 的服务端口号了。


mysql 的登录 

登录 mysql 用户:
 

此时我们发现登录不上去。

 解决方法有三个:


获取临时root密码:

grep 'temporary password' /var/log/mysqld.log

可以在上述 的 mysqld.log 文件当中查看密码。(这个 方式在高版本可能不能用了)

如果上述查阅到了密码:

#获取临时root密码
[whb@VM-0-3-centos 9.9]$ sudo grep 'temporary password' /var/log/mysqld.log
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for
root@localhost: yLMalT:v+5l*
#使⽤临时密码登录

[whb@VM-0-3-centos 9.9]$ mysql -uroot -p
Enter password:
1 2 3 4 5 6 7 8

#判断修改密码时候新密码是否符合当前的策略,不满⾜报错,不让修改,关闭它
#安全强度,默认为中,即1,要求必须包含 数字、符号、⼤⼩写字⺟,⻓度⾄少为8位
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

#密码最⼩⻓度
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#修改本地登录密码,暂不授权远程登录

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer@wu.888';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

#如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码


# 如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码
# 试着直接 client 登陆⼀下
 


 vim /etc/my.cnf    打开mysql配置⽂件:

然后,在[mysqld]最后⼀栏配置(不知道是什么,就放在配置⽂件最后) 加⼊: skip-grant-tables 选项,并保存退出():

skip-grant-tables 的意思就是 跳过 线权,不需要验证,跳过认证环节,直接登录。

如果你在修改的过程当中,已经启动了 mysql 的服务,那么你需要重启一下 mysql 的服务,上述配置文件当中修改的信息才会生效:

上述使用的是 restart ,这个命令的效果其实是 stop + start ,也就是说,上述命令相当于是下述的两个命令:


经过上述的步骤之后,你就可以免密登录 root 账户了,但是,当你在登录之时,还是会让你输入密码,不用担心,此时直接回车就可以了。如下所示,此时我们就登录上 mysql 了:

 简单配置配置文件

[mysql]
#default-character-set=utf8  // 配置编码格式

 因为 mysql 服务,默认是一个 网络服务,所以,我们可以自己绑定端口号,使用 port 字段,就可以像设置环境变量一样,设置默认端口号。

datadir 字段:我们将来在建表建立数据库,都会存储在 datadir 字段存储的 路径当中。

[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

port=3306                            // 默认端口号
datadir=/var/lib/mysql               // 存储用户建立数据库数据的路径
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log        // 存储错误日志路径
pid-file=/var/run/mysqld/mysqld.pid  
character-set-server=utf8            // server端使用的 编码格式是 utf-8
default-storage-engine=innodb        // mysql 使用的存储引擎
# 配置完毕,重启mysql即可

同样的,每一次修改配置文件,都需要重启 mysql 服务。

设置开启自启动

 输入下述的两行命令,设置开始自启动 mysql :
 

#开启开机⾃启动
systemctl enable mysqld
systemctl daemon-reload

常见问题

mysql 已经配置了客⼾端服务器utf8编码,但是⽆法输⼊中⽂
确保您在终端命令⾏中可以输⼊中⽂: 


[whb@VM-0-3-centos ~]$ env |grep LANG
LANG=en_US.utf8

 安装遇到秘钥过期的问题:

Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

解决方案:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

其他安装 

CentOS 6.5下编译安装MySQL 5.6.14_野马红尘的技术博客_51CTO博客

CentOS 7 通过 yum 安装 MariaDB - 知乎 (zhihu.com)

Windows下通过MySQL Installer安装MySQL服务_野马红尘的技术博客_51CTO博客

windows 当中mysql 的 自启动

执行 win+r 输入 services.msc 打开服务管理器:

 

你可以在上述服务管理器当中找到你在windows 当中安装的 MySQL 找到对应的 Mysql,可以选择启动或者是 关闭。 

 

了解数据库

就算我们没有学习过数据库,看数据库这个名字要知道,这个东西就是拿来存储数据的。那么,存储数据,使用文件不就可以了吗?为什么还需要创建一个数据库呢?


文件保存数据有以下几个缺点:

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

 我们知道,我们使用 C/C++ 程序向 文件当中是输入输出数据,其实都是输入一些字符串,在文件当中保存数据都是以 字符的方式来一个一个存储数据的。

这样就有一个很大的问题:不同的语言程序对于文件当中的数据的读取有困难了,语言当中的数据类型相对于文件当中只有字符的话,就很复杂了。比如:有 int, double , short 等等。

高级语言当中之所以要创建出这么多的数据类型,就要要用不同的数据类型来描述不同表现方式的数据,使得计算机可以更好的识别处不同的数据类型,从而使用不同的运算方式。这大大的提高的计算机 和 用户之间的交互效率。

所以,如果是只看文件当中单纯的使用字符的方式来进行存储的话,是不行的。

首先,我们需要存储的数据体量可能是很大的,那么,我们要从中找到一些相同表现类型的数据,无疑是大海捞针;不看这个,就看程序员要使用怎么样的程序才能更好的提取出这些数据,如果文件当中的各种数据之间 存储 是没有规律的话,这很难实现。

 而数据库的本质就是:对于数据内容存储的一套解决方案,只需要用户或者是程序员,向数据库提供一个要求,数据库就可以给出对应要求的数据子集。 

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。

主流数据库
 

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

 mysql基本数据库操作

 连接数据库

mysql -h 127.0.0.1 -P 3306 -u root -p

因为 mysql 服务本身是一种 网络服务,所以在链接之时是需要告诉 主机ip 地址的。像上述的 ip 代表的就是 本地环回。 

网口本地环回地址详解? 有什么作用?_回环地址-CSDN博客

  

因为上述我们设置了 免密码,所以,-p 后面是空的,直接回车即可,不需要带上密码。


 我们上述设置了配置文件,所以可以简写为:

mysql -u root -p
  • 如果没有写 -h 127.0.0.1 默认是连接本地
  • 如果没有写 -P 3306 默认是连接3306端口号

上述就是默认本地主机,端口号使用配置文件当中默认的端口号。


 

谈一谈 mqsql 和 mysqld 

  •  mqsql 是mysql 的客户端;
  • 而 mysqld 是mysql 的服务器端。

所以,其实 mysql 本质上其实是一个网络服务。 

一个可执行程序,带 "d" 的,一般是一个程序的守护进程,mysql 是 基于 C(mysql)S(mysqld) 模式一种网络服务。mysqld的 就是这个网络服务的 守护进程

  •  mysql 是一套给我们提供数据服务的网络程序;
  • 而数据库一般是指,在磁盘或者内存当中存储的特定结构组织的数据。

服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:
     

 

 


 数据库使用案例

 创建一个 名为 helloworld 的 数据库(注意后面要带上分号):

create database helloworld;

 此时在存储数据库的目录当中,就存储了我们上述创建的一个数据库(下述当中是显示出一个目录出来):

 在mysql 服务当中使用 show databases; 也可以查看到当前的数据库:

 所以,本质上,在Linux 当中建立一个数据库就是建立一个目录


选择一个数据库(下述例子是使用 helloworld 这个数据库),对这个数据进行操作:

use helloworld

 


创建一个数据库表:

create table student(
    id int,
    name varchar(32),
    gender vatchar(2)
)

 在我们建立student 表之前,helloworld 目录当中只有如下一个文件:

 建立student 表之后,就多出了两个文件:
 

 所以, Linux 当中 在数据库当中创建一个 表,本质其实就是在Linux 当中创建一个文件。


 在上述建立的student表当中插入数据:

insert into student(id, name, gender) values (1, '张三' , '男');

 如果在插入过程当中出现下述的错误,说明当前属性的编码格式可能不是 utf-8 的:

 可以使用下述的命令来修改 表当中某一个属性的 编码格式:

alter table Student change 属性名 属性名 char(10) character set utf-8;

 

之后就可以 插入成功了:

我们可以尝试插入 多个对象:

然后使用 sql 语句对 student 表当中进行查询:
 

 


删除一个表:

DROP TABLE table_name ;    -- 直接删除表,不检查是否存在

MySQL 删除数据表 | 菜鸟教程 (runoob.com)


 上述例子的总结

上述我们简单的新建了一个数据库,然后在这个数据库当中建立了一个表,然后对于这个表当中的一个一个对象进行了一个访问查找的操作。

所以,其实本质上,我们新建一个数据库本质上就是在创建一个目录,在这个目录当中有一个数据库的配置文件,在这个数据库目录当中,我们新增一个 表其实就是 在这个数据库目录当中新增一个 几个文件。

对于上述的 数据库目录,和 目录当中管理着各个表的 文件,其实都不是有 用户 或者是 程序员去做的;

而是由 mysqld 服务器端帮我们去做的,用户 和 程序员本上是不参与 目录和文件的修改的,但是,通过 mysqld 我们可以对 数据库 和 数据库当中的表,和 表当中的一个一个对象属性,进行增删查改。

用户只需要通过 mysql 客户端 ,访问到 mysqld 服务器端,然后,通过 mysqld 服务器端访问到 对应主机当中的 数据库目录当中表文件,也就访问到数据库当中的 数据了。

至于数据库当中的数据,怎么被管理的,什么时候该刷新,什么时候进行增删查改··· 所有的关于数据管理的细节,作为用户或者是程序员其实都是不用关心的。作为用户只用关心,当前需要管理哪一些数据,当前需要增删查改什么数据供用户或者是程序员来使用。

 

 MySQL 架构

 MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行(在主流的操作系统当中)。比如:Unix/Linux、Windows、Mac 和 Solaris。
 

 上述的存储引擎之所以有很多种,是因为:用户存储的数据是有很多种的,比如:二进制的,文档形式的,大文件型式的···· 等等,需要用到不同的存储引擎来帮助用户来进行 增删查改。

所以,mysql 本身其实就是一个文件系统,只不过这个 musql 的 文件系统是在操作系统 之上的一个 文件系统。

 所以对于上述的 mysql ,在操作系统看来,上面的三层(最低到 存储引擎),都是属于 进程,属于用户层;而 最底层对于 硬件当中的操作才是操作系统。

 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

 存储引擎

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

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


  查看存储引擎:

show engines;

 其中 innodb 引擎是使用得最多的。

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chihiro1122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值