简介
在 CentOS 7 上面安装 MySQL5.7 经历了一点小挫折,特此记录,给有需要的朋友做个参考。
我的云主机 CentOS 版本
> 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
因为现有工程的各种缘故,我需要在云主机上面安装 MySQL5.7 版本。
在网上找了挺多安装方法但总是事与愿违,会出现各种各样的问题,还好在 MySQL 官方文档 找到了解决方案。所以说遇到问题还是要到官网去找方案。
如果你已经使用 root 身份登录了主机,在下面的步骤中可以不使用 sudo。
1、Adding the Yum Repository
sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm
如果出现类似 Failed to set locale, defaulting to C 这样的错误,说明该源无法找到,可以换中方式:
yum localinstall mysql57-community-release-el7.rpm
也可以在 http://repo.mysql.com/ 找相关的源。
2、Selecting a Release Series
执行如下命令前,记得安装 yum -y install yum-utils
yum repolist all | grep mysql
sudo yum-config-manager --enable mysql57-community
yum repolist enabled | grep mysql
3、Install
sudo yum install mysql-community-server
注意:如果你是 CentOS8,还需要在执行此步骤操作前,需要执行如下命令:
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 然后重新安装 MySQL,方式如下:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install mysql-community-server
4、Start mysqld
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 的安装,接下来我们开始使用它。
mysql -uroot -p
直接回车(Enter),提示如下错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解决上述问题,需要先想办法登入 MySQL,然后再修改 root 用户的密码。
如何解决这个错误而进行登入呢?
MySQL 安装完成之后,生成的默认密码在 /var/log/mysqld.log 日志文件中,我们可以使用 grep 命令在日志中找到临时密码(temporary password)。
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 用户的密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
后续可以通过如下方式(update)修改 root 用户的密码:
update user set authentication_string=password('MyNewPass4!') where user='root';
flush privileges;
以上操作完成后,需要重启一下 MySQL 服务。
service mysqld restart
另外还有一种解决方案,就是修改 my.cnf 配置文件
sudo vim /etc/my.cnf
在 mysqld 下面新增 skip-grant-tables
[mysqld]
...
skip-grant-tables
同理,以上操作完成后需要重启一下 MySQL 服务。登入后再用上述方法设置 root 用户的密码即可。
修改默认编码
MySQL 的字符编码,可以通过下述方式查看
show variables like 'character%';
我们通过编辑 /etc/my.cnf 配置文件来改变默认编码,分别在对应的标签下面增加如下内容即可。
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
需要重启一下 MySQL 服务。
service mysqld restart
增加用户
默认只允许 root 用户在本地(即本机上)登录,如果其它机器要连接或者访问 mysql,必须添加一个允许远程连接或者访问的帐户。
当然你也可以设置让 root 用户进行远程访问,但这样就很不安全,一般也不会这么做。
select host,user,authentication_string from user;
| host | user | authentication_string |
|---|---|---|
| localhost | root | *88195A6507F4892C6CED9F6E30BA6C609AF5AFA7 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
下面新增一个允许远程连接的帐户 lisi,注意设置的密码要符合 MySQL 复杂度要求,否则设置会失败。
GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY 'lisi2018!A' WITH GRANT OPTION;
flush privileges;
再次查看一下用户会发现多了 lisi 这个用户。
| host | user | authentication_string |
|---|---|---|
| localhost | root | *88195A657F48920B6C609AF5AFA7 |
| localhost | mysql.session | *THISISNOTDTHACANEUEDHERE |
| % | lisi | *862081A20407183D1DECD57D19Dx36411 |
给朋友的教程做个小推广,喜欢 AI 的朋友可以去看看。
朋友做了一个关于 人工智能的教程,教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!点 这里 可以跳转到教程,对人工智能感兴趣的同学可以了解一下。
祝大家五一节日快乐,生活幸福😊

CentOS 7上安装MySQL 5.7的实战指南

1340





