MySQL
一、基础知识
1.1、rpm
rpm是一种Linux系统下非常常见的文件格式 红帽包管理器/系统
rpm:
r —— redhat(红帽),系统名称
p —— package (包)
m —— manager (管理者/管理器)
【依赖】问题 rpm安装方式已经/正在被逐步的淘汰掉。
你想安装C;C ——> B;B ——> A
1.2、查看ip地址
① ip addr
② ifconfig
区别:
ip addr 只能看ip信息,而ifconfig还可以看其他信息
ip addr 系统自带 ifconfig需要自己安装
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d9:fc:32 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.110/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::fc57:536b:a060:4ab4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
【lo】表示的是系统的【逻辑网卡】,出现【逻辑】二字则表示【并不真实存在】
【ens33】表示的是系统的【本机网卡】
重点看【inet】信息,这个信息会显示出我们想要查看的【IP地址】———192.168.1.110
1.3、安装vim
yum install -y vim
y —— yellow dog,黄狗
u —— update,更新
m —— manager,管理器
yum 和 rpm之间的联系
1.yum命令底层基于rpm命令进行实现
2.rpm存在依赖问题,而yum不存在
yum命令的形式
【yum install/uninstall -y vim】
【yum 操作 命令选项 想要安装的软件名称】
操作:
install —— 安装操作
uninstall —— 卸载操作
【yum install -y vim】命令执行不成功。排查错误(试错)
【怀疑1】:是不是有可能连网络都连接不上?
【检验1】:ping www.baidu.com
【结果1】:ping不通,是不是有可能连网络都连接不上?
【怀疑2】:是不是自己在修改网卡配置文件时有些配置项的单词出现了基础的【单词拼写错误】
【检验2】:vi /etc/sysconfig/network-scripts/ifcfg-ens33
【结果2】:没有错误。从头来一遍。(卸载掉VMware Workstation,再通过CCleaner清理注册表,重启电脑之后关闭/退出任何一个杀毒软件/电脑管家后,重新安装VMware Workstation,重复之前课程内容来一遍)
1.4、安装lrzsz
yum install -y lrzsz
lrzsz:
rz:实现上传文件到虚拟机/CentOS系统
sz:实现发送/下载文件到本机系统(Windows系统)
1.5、安装net-tools
yum install -y net-tools
net-tools:指的是网络工具,包含了许多网络相关的命令,安装了【net-tools】之后才能正常使用【ifconfig】等网络相关的命令
net —— 网络
tools —— 工具(们)
1.6、创建文件夹
在/opt/下【创建文件夹】两个文件夹(uploads,softwares) makedirectory
【mkdir】
【mkdir uploads】
【mkdir softwares】
创建uploads并且创建softwares 【mkdir uploads && mkdir softwares】
并且操作 &&
【mkdir uploads && mkdir softwares】
softwares我们只存放解压后的文件
uploads我们只存放上传文件
将MySQL相关的rpm文件拖拽上传到【uploads】目录下。
二、安装MySQL
MySQL 属于哪种架构形式?
两种经典架构是:⭐⭐⭐
【C/S架构】:客户端-服务端架构
生活中常见的C/S架构的软件有:影音娱乐类型的大部分软件都属于(爱优腾)
【B/S架构】:Browser/Server:浏览器-服务端架构
生活中常见的B/S架构的软件项目有:百度、京东、淘宝... ...
MySQL属于C/S架构
首先验证一下CentOS中有没有自带的MySQL(MariaDB)
MySQL隶属于【Oracle】(甲骨文公司)
JDK是被SUN公司推出的一个产品,SUN公司在后续的运营过程中被【Oracle】给收购了。
往往这些大型科技型公司的产品都是收费的(MySQL也是收费的)
MySQL早期是免费的,而在新版本发布后开始收费了。
老师给同学们提供的MySQL版本为5.x。
因为广大程序员、开发者早已习惯免费的老版本,所以当Oracle公司发布收费版后,遭到开发者的联合抗议。
所以Oracle迫于压力,又推出了开源版本的【MariaDB】
命令:
rpm -qa | grep mysql -----------------检查是否自带mysql ,没有任何返回信息,没有安装MySQL
rpm -qa | grep mariadb----------------检查是否自带mariadb ,有返回信息,有安装MariaDB
rpm -qa |grep xxx
r——redhat(红帽,不仅是一家公司的名字,同时也是一个Linux发行版的系统的名字)
p——package,包
m——manager,管理者,管理器
-qa: -q和-a
-q:q————>query,查询
-a:a————>all,所有
-q -a <==> -qa:查询所有
grep:筛选/过滤
【grep mysql】或者是【grep mariadb】
|:
【rpm -qa | grep xxx】
|:管道符
管道(水管、光纤管道...):传输
rpm -qa | grep xxx
查询所有rpm程序 把查询出来的所有rpm程序传输给右边作为参数 从所有查询出来的rpm内容中过滤/筛选出包含【xxx】的内容
删除掉【mariadb】
【rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64】
通用性的写法:
【rpm -e --nodeps xxx】
-e:erase,擦除,删除
--nodeps:不检测依赖性安装,可以突破掉依赖关系直接强制卸载
rpm安装有一个特点/缺点:
d ——> c ——> b ——> a:依赖性安装
d <—— c <—— b <—— a:依赖性卸载
2.1、通过rpm安装mysql
【rpm -ivh 01_mysql-community-common-5.7.43-1.el7.x86_64.rpm】
【rpm -ivh 02_mysql-community-libs-5.7.43-1.el7.x86_64.rpm】
【rpm -ivh 03_mysql-community-client-5.7.43-1.el7.x86_64.rpm】
【rpm -ivh 04_mysql-community-server-5.7.43-1.el7.x86_64.rpm】
【rpm -ivh xxx(rpm格式文件的全称)】
解释
-ivh:
-i:install,安装
-v:view,视觉(看),进度条
-h:hour,小时,时间
h——小时
m——分钟
s——秒
datetime:时间
三、修改MySQL配置文件
【/】:根目录
【/etc/my.cnf】
【cnf】:config,配置/设置
【config】的简写形式:
【cnf】
【cfg】
完整命令:
【vi /etc/my.cnf】
datadir=/var/lib/mysql # 用来指定MySQL数据的最终存放路径
socket=/var/lib/mysql/mysql.sock # 设置MySQL的多个模块之间通信相关的配置文件在哪里
# 【socket】:网络套接字
# 【网络通信】:
# 两台或多台设备之间,【通过网络进行通信】
# 【通过网络进行通信】的本质到底是什么?
# 二进制
# 【标题头】信息:具体可能会包含你的设备信息、IP协议等等
# 二进制不利于阅读、理解
# 所以我们需要在二进制的基础上进行封装(相当于就是多了一步翻译的工作)。封装也可能会封装好几层,某一层级,我们就称之为【Socket网络套接字】
symbolic-links=0 # MySQL配置的软连接的数量
# symbolic-link:软连接 ≈ symlink
log-error=/var/log/mysqld.log # log:日志,记录的是MySQL运行全过程
# pid-file配置项用来指定进程编号存放文件的绝对路径 pid:进程id,进程编号
pid-file=/var/run/mysqld/mysqld.pid
skip-grant-tables # 它可以让我们在首次登录MySQL时,跳过密码验证
character_set_server=utf8 # 设置MySQL的默认字符集为【UTF-8】
init_connect='SET NAMES utf8' # 也是用来指定MySQL默认的字符编码集为UTF-8
# 【init】:初始化 【connect】:连接
character:字符
set:v.设置;n.集合
server:服务端/服务器
⭐⭐⭐【字符集】:
如果字符集设置的不对,那么就容易产生【中文乱码问题】
中文乱码问题】产生的根本原因是什么?
第一台计算机在美国被发明出来,而美国使用的是英语。所以第一台计算机所作的语言上的适配也仅仅针对英语。
随着技术的发展,计算机的体型也越来越小,逐步走进千家万户。那么随之进行的语言适配/支持的语言也越来越多。
但是在以往相当长的一段时间内,对于汉语/中文的支持一直做的不好。
字符编码也是在计算机发展过程中不可忽略的一个重点!
A:
为A这个字母创建对应的二进制表示形式
A —— 0000 0001,但是这样也仅仅只能让计算机看懂或者说读懂。
而如何让A这个字母正确的显示到屏幕上,更是十分的困难。当然,更不用说原本就十分复杂的汉字了。
早期的计算机根本没有对汉字进行适配
一 ———— ???? ????
所以,汉字的适配问题一直到近现代,国外计算机公司打开了中国市场之后才逐步开始解决汉字的适配问题。
比较常见的支持汉字的编码集:
【GBK、GBK2312、Latin1、ISO8859-1... ...】而在这些字符编码集中对汉字支持的最好的一个是【UTF-8】
中文乱码问题产生的根本原因是:汉字在编码过程中使用到的【字符编码集】和解码过程中使用到的【字符编码集】不一样。
3.1、error:错误
⭐⭐⭐日志级别:
碰到Bug的时候,一定要会看【日志】
- INFO:info,infomation,信息。它的日志级别最低,记录内容也最多,往往也是我们最不关心的
- WARN/WARNING:warn/warning:
警告,比INFO这个级别高一些。偶尔去关心WARN级别的内容。但是即便一个程序/代码出现了WARN/WARNING,一般情况下并不会影响程序正常运行。
- ERROR:
错误,如果一个程序出现了Error,那么这个程序大概率是无法正常运行的!这个级别也是我们在遇到Bug时,需要重点关注的内容!!!
四、启动MySQL
4.1、启动命令
在完成对MySQL配置文件的修改后,我们才可以去启动我们的MySQL服务。
【启动MySQL服务】:
systemctl status mysqld
查看状态
systemctl start mysqld
启动
systemctl restart mysqld
重启
4.2、登录MySQL
mysql -uroot -p
-u:username,用户名
-uroot : 我们在命令执行时就为命令选项【-u】指定了具体的用户名为【root】
-p:password,密码
4.3、修改密码
在MySQL的命令行界面,为root用户修改密码的命令是:
update mysql.user set authentication_string=password('root') where user='root';
flush privileges;
刷新一下权限
quit;
退出mysql
mysql8 安装
一、进入安装目录 将账户切换到root账户下,进入local目录下
cd /usr/local
若当前目录下没有mysql,则新建一个mysql的目录,用于存放wget下载的rpm包。 切换到mysql目录下
cd mysql
1
二、下载rpm安装在线安装包
直接在linux上下载在线安装包
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
也可以在自己电脑上先下载mysql80-community-release-el7-3.noarch.rpm文件再上传到linux服务器上 下载地址https://dev.mysql.com/downloads/

三、mysql rpm包依赖源 上面wget下载完成后,执行下面的命令确定依赖源。
yum -y localinstall mysql80-community-release-el7-3.noarch.rpm
1
四、安装rpm包
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
1
五、安装MySql 执行以下命令:
yum install mysql-server
补充:遇到Failing package is:mysql-community-icu-data-files-8.0.29-1.el7.x86_64 GPG Keys are configured as 此问题时在yum install 版本后面加上 --nogpgcheck,即可绕过GPG验证成功安装。比如
yum install mysql-community-server --nogpgcheck
六、服务安装、启动 按顺序执行下面的命令就可以 启动mysql命令:
systemctl start mysqld
1
开机启动命令:
systemctl enable mysqld
systemctl daemon-reload
七、验证 查看mysql服务运行状态
service mysqld status
1
查看3306端口是否启动,如果启动了则表示mysql处于运行状态。
netstat -anp|grep 3306
1
八、查看root临时密码
grep "A temporary password" /var/log/mysqld.log
九、使用初始密码登录mysql
mysql -u root -p #会提示输入密码
1
十、修改初始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyDifficultPass4@';#注意8位数以上和种类至少大+写+小写+符号+数字
十一、修改初始密码为简单密码 因为mysql的密码设置的太复杂不太好记,这里把密码设置的简单一点
先看看当前的密码验证策略
输入:SHOW VARIABLES LIKE 'validate_password.%';
策略说明: validate_password.length 是密码的最小长度,默认是8,我们把它改成6 输入:set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,我们把它改成0 输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉 输入:set global validate_password.check_user_name=off;
再执行修改密码的命令
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';(现在就可以设置成功了)
1
十二、远程连接mysql 在防火墙中开启3306端口 查看防火墙状态
systemctl status firewalld.service
1
现在是关闭状态(如果是关闭状态下可以直接跳到2步骤)这里把防火墙打开
systemctl start firewalld
开放防火墙的端口
firewall-cmd --zone=public --list-ports 查看所有打开的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent # 开放3306端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent #关闭3306端口(这里只是演示一下怎么关闭开放的端口)
firewall-cmd --reload # 配置立即生效
1234
重启防火墙
systemctl restart firewalld.service
远程访问
1.mysql8.0之前版本设置远程访问
# 授权所有主机都可以通过root用户,密码123456,进行访问数据库
# 123456:给新增权限用户设置的密码
# %:代表所有主机,也可以具体到主机ip地址
# 适用于 MySQL 8.0之前的版本,可以直接授权
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
#刷新权限
flush privileges;
2、mysql8.0包括之后版本设置远程访问
# 授权所有主机都可以通过root用户,密码123456,进行访问数据库
# 123456:给新增权限用户设置的密码
# %:代表所有主机,也可以具体到主机ip地址
# MySQL 8.0之后的版本,需要先创建一个用户,再进行授权
create user root@'%' identified by '123456';
grant all privileges on *.* to root@'%' with grant option;
#刷新权限
flush privileges;
【已解决】MySQL 8.0+版本 创建新用户登录失败 ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password'
场景
创建用户时,如果是这样创建的:
create user '用户名'@'连接的IP' identified by '密码';
例如:
create user 'testuser1'@'127.0.0.1' identified by 'root123';
MySQL 8.0+版本 创建新用户登录失败,报错:
C:\Windows\System32>mysql -u testuser1 -p
Enter password: *******
ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
原因分析
MySQL8.0默认指定使用需要SSL的身份验证插件caching_sha2_password,而我们在创建账号时候没有指定REQUIRE SSL。为了降低这件事情的复杂性,我们选择了绕过SSL插件的验证,改为mysql_native_password验证来登陆即可。