发布于 

CentOS7.9 安装 mysql5.7

简介

在 CentOS 7 上面安装 MySQL5.7 经历了一点小挫折,特此记录,给有需要的朋友做个参考。

我的云主机 CentOS 版本

1
2
3
4
5
6
7
> lsb_release -a

LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core

当然你要是不想安装指定版本的 MySQL,直接使用 yum install mysql 也可以。

安装 MySQL

因为现有工程的各种缘故,我需要在云主机上面安装 MySQL5.7 版本。

在网上找了挺多安装方法但总是事与愿违,会出现各种各样的问题,还好在 MySQL 官方文档 找到了解决方案。所以说遇到问题还是要到官网去找方案。

如果你已经使用 root 身份登录了主机,在下面的步骤中可以不使用 sudo

1、Adding the Yum Repository

1
sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm

如果出现类似 Failed to set locale, defaulting to C 这样的错误,说明该源无法找到,可以换中方式:

1
sudo yum localinstall mysql57-community-release-el7.rpm

关于源可以在 http://repo.mysql.com/ 找。

2、Selecting a Release Series

执行如下命令前,记得安装 yum -y install yum-utils

1
2
3
4
5
yum repolist all | grep mysql

yum-config-manager --enable mysql57-community

yum repolist enabled | grep mysql

3、Install

1
sudo yum install mysql-community-server

注意:如果你是 CentOS8,还需要在执行此步骤操作前,需要执行如下命令:

1
sudo yum module disable mysql

在安装过程中,可能会出现下面的错误(此时 MySQL 并没有安装成功)

Public key for mysql-community-libs-compat-5.7.38-1.el7.x86_64.rpm is not installed

Failing package is: mysql-community-libs-compat-5.7.38-1.el7.x86_64

GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

需要升级一下 GPG 然后重新安装,方式如下:

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

yum install mysql-community-server

4、Start mysqld

1
sudo service mysqld start

下面给出安装 MySQL 成功后,默认的配置文件路径,方便后续使用。

  • 配置文件:/etc/my.cnf
  • 日志文件:/var/log/mysqld.log
  • 启动脚本:/usr/lib/systemd/system/mysqld.service
  • socket文件:/var/run/mysqld/mysqld.pid

使用 MySQL

经过上面简单 4 步就可以轻松的完成 MySQL 的安装,接下来我们开始使用它。

1
mysql -uroot -p

直接回车(Enter),提示如下错误:

1
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解决上述问题,需要先想办法登入 MySQL,然后再修改 root 用户的密码。

如何解决这个错误而进行登入呢?

MySQL 安装完成之后,生成的默认密码在 /var/log/mysqld.log 日志文件中,我们可以使用 grep 命令在日志中找到临时密码(temporary password)。

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

可以看到临时密码信息:2022-04-30T04:40:47.234502Z 1 [Note] A temporary password is generated for root@localhost: Tq%y:sUnC7;d,用该密码登入 MySQL 即可。

MySQL 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含大小写字母、数字和特殊符号,并且长度不能少于8位。如果设置的密码不符合规范和要求,进行对应的操作会提示类似密码不符合规范的错误。可以查看 MySQL官网密码详细策略 了解更多这方面的知识。

登入成功之后,修改 root 用户的密码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

后续可以通过如下方式(update)修改 root 用户的密码:

1
2
3
update user set authentication_string=password('MyNewPass4!') where user='root';

flush privileges;

以上操作完成后,需要重启一下 MySQL 服务。

1
service mysqld restart

另外还有一种解决方案,就是修改 my.cnf 配置文件

1
sudo vim /etc/my.cnf

在 [mysqld] 下面新增 skip-grant-tables

1
2
3
4
[mysqld]
...

skip-grant-tables

同理,以上操作完成后需要重启一下 MySQL 服务。新增的这个配置再次登录 MySQL 无需输入 root 密码。

登入后再用上述方法设置 root 用户的密码即可,修改完成后记得去掉 skip-grant-tables 这个配置。

修改默认编码

MySQL 的字符编码,可以通过下述方式查看

1
show variables like 'character%';

我们通过编辑 /etc/my.cnf 配置文件来改变默认编码,分别在对应的标签下面增加如下内容即可。

1
2
3
4
5
6
7
8
[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

需要重启一下 MySQL 服务。

1
service mysqld restart

增加用户

默认只允许 root 用户在本地(即本机上)登录,如果其它机器要连接或者访问 mysql,必须添加一个允许远程连接或者访问的帐户。

当然你也可以设置让 root 用户进行远程访问,但这样就很不安全,一般也不会这么做。

1
select host,user,authentication_string from user;
host user authentication_string
localhost root *88195A6507F4892C6CED9F6E30BA6C609AF5AFA7
localhost mysql.session *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

下面新增一个允许远程连接的帐户 lisi,注意设置的密码要符合 MySQL 复杂度要求,否则设置会失败。

1
2
3
GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY 'lisi2018!A' WITH GRANT OPTION;

flush privileges;

再次查看一下用户会发现多了 lisi 这个用户。

host user authentication_string
localhost root *88195A6507F4892C6CED9F6E30BA6C609AF5AFA7
localhost mysql.session *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
% lisi *86BA32081A204071832FE6D1DECD57D9519D6411

重置 root 密码

如果不小心忘记了 MySQL 的 root 用户登录密码,不要紧张,通过下面简单几步的操作就可以重置。

1、修改配置文件

/etc/my.cnf (可能你的配置文件在其他目录如 /etc/mysql/my.cnf),文件中新增

1
skip-grant-tables

2、重启服务

1
service mysql restart

3、登录

在命令行直接输入 mysql 即可。

1
mysql

4、重置 root 密码

依次执行如下命令即可。

1
2
3
4
5
6
USE mysql;

# 注意 new_password 是你要重新设置的密码
UPDATE user SET authentication_string = password ('new_password') WHERE User = 'root';
flush privileges;
quit

5、再次修改配置文件

记得注释掉在第1步中增加的内容

1
# skip-grant-tables

6、重启 mysql 服务

7、使用 root 登录

1
mysql -urot -p

如果你在安装过程中,遇到了文中没有提到的问题,请耐心解决也可以给我留言,一起进步!


祝大家五一节日快乐,生活幸福


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

veryitman