在centos7.8下使用 yum 命令安装 MySQL 8.0.21

扶醉桌前 提交于 2020-08-17 17:27:45

在centos7.8下安装 mysql 8.0.21

  前言

在部署linux数据库的,往往因为客户有指定版本的要求,或者有软件安装的审计的需要制定对应的版本号,
我也遇到客户必须制定的mysql的版本的要求,mysql 版本号为v8.0.21。

mysql安装

环境检查

检查是否安装了mysql

rpm -qa| grep -i mysql  

如有,类似

mysql-libs-5.1.52-1.el6\_0.1.x86\_64\

卸载之

如果已经安装了mysql,先关闭mysql服务

killall mysqld  
rpm -e --nodeps mysql-libs-5.1.52.x86_64  

检查否存在 `mariadb` 数据库,如有,卸载之,卸载同上

rpm -qa | grep mariadb  

彻底卸载mysql

如果已经安装了mysql

killall mysqld  

使用 `find / -name mysql` 查找出所有的mysql删除对应的文件夹

查找结果如下:

\[root@SZDC04291 soft\]# find / -name mysql  
/run/lock/subsys/mysql  
/etc/linux/targeted/active/modules/100/mysql  
/usr/lib64/mysql  
/usr/local/mysql  
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/bin/mysql  
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/include/mysql  
/mysql  
/mysql/bin/mysql  
/mysql/include/mysql  
/data/mysqldata/mysql  

删除对应的mysql目录

\[root@SZDC04291 soft\]# rm -rf /run/lock/subsys/mysql*  
\[root@SZDC04291 soft\]# rm -rf /etc/lib/linux/targeted/active/modules/100/mysql*  
\[root@SZDC04291 soft\]# rm -rf /usr/lib64/mysql*  
\[root@SZDC04291 soft\]# rm -rf /usr/local/mysql/*  
\[root@SZDC04291 soft\]# rm -rf /mysql/*  
\[root@SZDC04291 soft\]# rm -rf /mysql/bin/mysql/*  
\[root@SZDC04291 soft\]# rm -rf /mysql/include/mysql/*  
\[root@SZDC04291 soft\]# rm -rf /data/mysqldata/mysql/*  

注意:卸载后/etc/my.cnf不会删除,需要进行手工删除

再次查找机器是否安装mysql

rpm -qa|grep -i mysql

无结果,说明已经卸载彻底,接下来直接安装mysql即可.

检查操作系统

如何查看linux版本是centos还是redhat

使用

cat /etc/redhat-release  

则会出现具体系统

Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
Kernel /r on an /m

CentOS release 7.8 (Final)

查看linux系统是64位还是32位

getconf LONG_BIT  
64  

  下载安装

接下来我们在 Centos7 系统下使用 yum 命令安装 MySQL,需要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,所以在安装前我们需要先去官网下载 Yum 资源包,下载地址:https://dev.mysql.com/downloads/repo/yum/

先下载 Yum 资源包

cd  /home/soft

切换到 /home/soft 把 mysql80-community-release-el7-3.noarch.rpm 下载在该目录

[root@ebs-72921 soft]# wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
--2020-07-24 10:16:32--  https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
正在解析主机 repo.mysql.com (repo.mysql.com)... 23.36.193.224
正在连接 repo.mysql.com (repo.mysql.com)|23.36.193.224|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:26024 (25K) [application/x-redhat-package-manager]
正在保存至: “mysql80-community-release-el7-3.noarch.rpm”

100%[======================================>] 26,024      --.-K/s 用时 0s      

2020-07-24 10:16:34 (101 MB/s) - 已保存 “mysql80-community-release-el7-3.noarch.rpm” [26024/26024])

mysql 安装

[root@ebs-72921 soft]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm 
警告:mysql80-community-release-el7-3.noarch.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql80-community-release-el7-3  ################################# [100%]
[root@ebs-72921 soft]# yum install mysql-server

安装过程中会需要提示下载依赖,按 y 确认下载即可:

如下图所示,

mysql 安装完成。

初始化MySQL

mysqld --initialize

启动/停止/重启 mysql服务

####  启动mysql

service mysqld start

####  停止mysql

service mysqld stop  

####  重启mysql

service mysqld restart  

查看运行状态

service mysqld status

####  查看mysql进程

ps -ef | grep mysql  

#####  结束mysql进程

kill -9 进程号 或 killall mysqld

安装问题
  1. Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details. 错误

解决方案:

根据提示,分别使用service mysqld status和journalctl -xe查看服务启动失败的原因,发现是目录权限不足造成的,通过查看mysql目录发现目录下有的文件归属还是root,改成mysql即可。

 ll /var/lib/mysql |grep mysql
 
 chown -R mysql:mysql /var/lib/mysql
  1. ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO) 错误

需要停止mysql服务,修改密码下面单独介绍,请继续,如果知道怎么处理的童鞋跳过。

初始化mysql密码

添加密码

mysql 安装好了,但是没有设置root密码,如果此时访问mysql会报错,

忘记MySQL密码或者本地lcoalhostroot用户无法登录时。可用以下方法无密码登录

关闭mysqld服务
service mysqld stop   关闭mysqld服务 (可以直接killall mysqld)  
进入安全模式

在执行命令之前必须先关闭mysqld服务,请注意!

修改配置文件无密码登录:

vi /etc/my.cnf 

在最尾部加上:添加一行 skip-grant-tables

保存,启动mysql

service mysqld start

使用 mysql -u root -p 空密码进入shell模式
mysql -u root -p

首先更新root密码为空字符串,

` mysql> update user set authentication_string='' where user='root';

//刷新权限

mysql> flush privileges;

//退出

mysql> quit;

`

quit; 退出, 然后重启 mysql

然后 vi /etc/my.cnf 删除一行 skip-grant-tables

然后 重启mysql

service mysqld restart

然后再登陆Mysql:

mysql -uroot

使用ALTER修改root用户密码,方法为 ALTER user ‘root’@’localhost’ IDENTIFIED BY ‘新密码’。如下:

mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';

//刷新权限

mysql> flush privileges;

//退出

mysql> quit;

再次使用 mysql -uroot -p 登陆 mysql就需要使用密码了,密码就是刚刚修改的密码了。

设置远程访问  

允许root用户在任何地方进行远程登录,并具有所有库任何操作权限。

如果出现 提示”Access denied for user ‘root’@’localhost’ (using password: YES)”

mysql> use mysql;  
Reading table information for completion of table and column names  
You can turn off this feature to get a quicker startup with -A

Database changed  
mysql> select user,host from user;  
+------------------+-----------+  
| user             | host      |  
+------------------+-----------+  
| epass            | %         |  
| epass            | localhost |  
| mysql.infoschema | localhost |  
| mysql.session    | localhost |  
| mysql.sys        | localhost |  
| root             | localhost |  
+------------------+-----------+  
6 rows in set (0.00 sec)

mysql>  

发现root只有本地权限,

那么,

我们需要给root 加上 127.0.0.1,% 还有指定服务器ip访问的权限,

// 设置127.0.0.1访问的root权限  
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("127.0.0.1","root",PASSWORD("123456"));

// 设置%所有ip访问的root权限,注意这个版本有点奇怪,按照道理设置所有%就可以访问了,但一定要设置 127.0.0.1 和 localhost 也要加权限。具体原因还没有查明  
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("%","root",PASSWORD("123456"));

// 我们还可以指定对应的服务器的访问权限  
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("10.6.9.96","root",PASSWORD("123456"));  
//刷新权限  
mysql> flush privileges;  
//退出  
mysql> quit;  

如果出现  `Field 'ssl_cipher' doesn't have a default value`错误怎么解决?

使用 `grant all on root.* to 'root'@'localhost'; ` 和 `grant all on root.* to 'root'@'127.0.0.1'; `命令

此时,使用 `select user,host from user;` 查看是否权限都有了

如果有,重新`mysql`,让设置生效即可访问了。

或者 可以简单一点一些,

使用  `grant all privileges on . to root@"%" identified by "Qa~!@#4^" ; ` //给mysql用户分配远程访问权限
需要使用 `flush privileges;` 刷新权限。

service mysqld restart  

测试本地是否可以访问

使用 `mysql -uroot -h127.0.0.1 -p` 登录并授权`localhost`本地`root`登录
 
 也可以使用  `mysql -uroot -p ` 登录一下测试是否可以登录

其他的问题

怎样保护“/tmp/mysql.sock ”不被删除

怎样保护“/tmp/mysql.sock ”不被删除

如果你有这个问题,事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”,在`Unix`的大多数版本上,你能通过为其设置sticky(t)位来保护你的“/tmp”文件系统。作为`root`登录并且做下列事情:

在shell模式下:

shell> chmod +t /tmp

这将保护你的“/tmp”文件系统使得文件仅能由他们的所有者或超级用户(root)删除。

你能执行`ls -ld /tmp` 检查`sticky`位是否被设置,如果最后一位许可位是t,该位被设置了。

mysql -h localhost和mysql -h 127.0.0.1的区别

mysql -h localhost和mysql -h 127.0.0.1的区别,
通过localhost连接到mysql是使用UNIX socket,而通过127.0.0.1连接到mysql是使用TCP/IP。

看看状态:mysql -h localhost

* **mysql -h localhost > status**

Connection id:     639

Current database: mysql

**Current user:   root@localhost**

SSL:           Not in use

Current pager: stdout

Using outfile:        ”

Using delimiter:    ;

Protocol version: 10

**Connection:    Localhost via UNIX socket**

看看状态:mysql -h 127.0.0.1

* **mysql -h 127.0.0.1 > status**

Connection id:     640

Current database: mysql

**Current user:   root@localhost**

SSL:           Not in use

Current pager: stdout

Using outfile:        ”

Using delimiter:    ;

Protocol version: 10

**Connection:   127.0.0.1 via TCP/IP**

# 安装时的一些错误

* -bash: ./scripts/mysql_install_db: 类似错误

出现-bash: ./scripts/mysql\_install\_db: /usr/bin/perl: bad interpreter: 没有那个文件或目录

解决办法:

yum -y install perl perl-devel  
```  

*  出现 **libaio.so.1: cannot open shared object** 类似错误

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
 

解决办法:

> yum -y install libaio-devel


*  ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘

登录时有可能报这样的错:

    ERROR 2002 (HY000): Can‘t connect to local MySQL server through >socket ‘/var/lib/mysql/mysql.sock‘ (2),原因           是/var/lib/mysql>的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:

sudo chown -R root:root /var/lib/mysql
service mysqld restart  
```  



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!