首页 > 技术文章 > linux安装mysql-8.0.21-1.el7.x86_64.rpm-bundle

junzhu-bye 2020-10-20 20:14 原文

本文参考https://blog.csdn.net/wudinaniya/article/details/81094578

一     查看linux操作系统版本和系统内核版本

1 [root@nfs_client ~]# cat /etc/redhat-release     查看操作系统版本
2 CentOS Linux release 7.5.1804 (Core) 
3 [root@nfs_client ~]# uname -r               查看系统内核版本
4 3.10.0-862.el7.x86_64
5  

二   下载对应版本的MySQL安装文件

    1、下载地址;https://dev.mysql.com/downloads/mysql/

    2、选择对应的Linux版本和x86/x64进行下载

   可以选择 RPM Bundle,下载完记得解压  tar -xvf xxx.tar

三 卸载旧版本的MySql (没有的话,则跳过此步骤)

      1、查看旧版本MySql

rpm -qa | grep mysql
rpm -e --nodeps {-file-name}

 

有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs

 rpm -qa|grep mariadb

 yum remove mariadb-libs

 

四 安装MySql 

 解压之后的文件

 

 

 

使用命令rpm -ivh {-file-name}进行安装操作。

按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server

注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验

 

在安装 mysql-community-libs-5.7.22-1.el7.x86_64.rpm 时有可能会报错:mysql依赖错误

 

 

解决:清除yum里所有mysql依赖包

[root@nfs_client tools]# rpm -qa|grep mysql
[root@nfs_client tools]# yum remove mysql-libs
 
注意:
有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs
[root@nfs_client tools]# rpm -qa|grep mariadb
[root@nfs_client tools]# yum remove mariadb-libs

注意细节:

1> 执行 yum remove mysql-libs   命令后,会自动删除掉 /etc/ 下的 my.cnf 文件
2> 对于安装mysql组件,只有安装了 mysql-community-server-5.7.22-1.el7.x86_64.rpm 组件,才会:
a). 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹


b). 在/var/lib/下生产以下三个文件夹

c). 在/var/log/ 下生成 mysqld.log 文件

d). 在/var/run/ 下生成 mysqld 目录

个别情况:

个别情况1:

在阿里云ECS云服务器上安装mysql5.7,当安装 mysql-community-server-5.7.22-1.el7.x86_64.rpm 时报错,报错如下:

[root@i3467544tdsxfrZ ~]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
        libaio.so.1()(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64

 

真正原因:

真正的原因是 MySQL依赖libaio,所以先要安装libaio,我们通过 rpm -qa|grep libaio 命令查看一下,如图:

经过对比发现,无法正常安装mysql-community-server-5.7.22-1.el7.x86_64的服务器的确没有安装libaio

所以,解决法案就是:

安装libaio

[root@iZbp1845cet96se1qmb5ekZ ~]# yum -y install libaio

安装libaio后,再重新安装一次mysql-community-server-5.7.22-1.el7.x86_64.rpm,此时就能正常安装了

个别情况2:

比如解决了“个别情况1”,但在启动mysql的时候,启动不起来,或启动后,去查找临时密码,使用命令没反应。查看日志mysqld.log(可在/etc/my.cnf中查找到mysqld.log的配置位置),报如下错误,此时怎么解决?

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

此时,1>先通过rpm -e --nodeps xxx  卸载掉server,卸载后删除datadir目录,2>卸载后查看 /etc/my.cnf 中,datadir的配置情况,将datedir目录删除,3>最后通过命令rpm -ivh xxx 重新安装server,此时就能正常使用mysql了

命令代码如下:

[root@izbp1845cet96se1qmb5ekz ~]# rpm -e --nodeps mysql-community-server-5.7.22-1.el7.x86_64

[root@izbp1845cet96se1qmb5ekz ~]# cat /etc/my.cnf
xxxxxxxxxxxxx
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

xxxxxxxxxxxxxxx

[root@izbp1845cet96se1qmb5ekz ~]# cd /var/lib

[root@izbp1845cet96se1qmb5ekz lib]# rm -rf mysql

[root@izbp1845cet96se1qmb5ekz ~]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm

[root@izbp1845cet96se1qmb5ekz ~]# systemctl start mysqld.service
[root@izbp1845cet96se1qmb5ekz ~]# ps -ef|grep mysql
root      3306  1068  0 14:34 pts/0    00:00:00 mysql -uroot -p
mysql    27009     1  1 15:26 ?        00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root     27038 26239  0 15:27 pts/6    00:00:00 grep --color=auto mysql

 

五 登录并创建MySql密码

    1 启动MySql

        安装完后,使用命令 service mysqld start 或 systemctl start mysqld.service 启动MySQL服务。(如果mysql服务无法启动,就重启一下系统)

systemctl start mysqld.service    启动mysql
systemctl status mysqld.service  查看mysql状态
systemctl stop mysqld.service   关闭mysql

查看mysql进程 ps -ef|grep mysql
查看3306端口 netstat -anop|grep 3306

 

 

 2 登陆mysql修改root密码

        由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。

      怎么找到这个临时密码呢?

      使用:

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

即可查询到类似于如下的一条日志记录:

 

 #o(YH0ff;i30即为登录密码。使用这个随机密码登录进去,然后修改密码,使用命令:

mysql -uroot -p

输入密码

 

 

执行下面的命令修改MySql root密码

在5.6后,mysql内置密码增强机制,低强度密码会报错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

可能出现密码不符合策略或过于简单等提示,建议先使用如下密码,稍后更改策略再换

 step1:更改策略和修改密码长度

set global validate_password.policy=0set global validate_password.length=1;

不管设置  validate_password_length=1,还是2,3,4 ,‘有效密码长度’这个参数的实际值都是4。超过4后设置是多少实际就是多少。

step2:从新设置密码

alter user root@localhost identified by '123456';

 step3: 授予root用户远程访问权限:

此时,虽然防火墙我时关着的,但root用户只能用于本机访问,不能用于远程访问,否则会报以下错误。因此,接下来要做的是授予root用户远程访问权限。

查看当前授予过的权限:

use mysql;
select user,host from user;

 

不推荐直接使用root用户通过外部访问数据库,建议创建用户给予对应所需权限即可

step4.添加一个新用户

create user '新用户名'@'localhost' identified by '密码';
//允许所有ip连接(用通配符%表示)
create user '新用户名'@'%' identified by '密码';授权用户

step5.授权用户

格式:GRANT privileges ON  databasename.tablename  TO  ‘username’@‘host’
例:给admin用户授权study数据库中所有表的所有操作权限
GRANT ALL ON *.* TO 'admin'@'%';
privileges:表示要授予什么权力,例如可以有 select ,insert 等,如果要授予全部权力,则填 ALL
databasename.tablename:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有
的数据库所有的表,则填 .,*是一个通配符,表示全部。
’username‘@‘host’:表示授权给哪个用户。
step6:开放3306端口
此时外面远程访问还是访问不到,因为我的防火墙没有放开3306端口,
firewall-cmd --zone=public --add-port=3306/tcp --permanent 
firewall-cmd --reload

 我用的DataGrip连接会报错

 

 我看网上很多人都在说加上serverTimezone=UTC,我的加上不行,最后我发现我要加上useSSL=false&allowPublicKeyRetrieval=true就可以了

 

推荐阅读