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 引擎是使用得最多的。