CentOS7下安装MySQL及连接

前段时间在闲置的电脑上装了centos7,打算先装个MySQL试试。在此记录一下。

一、添加yum源

MySQL官网:https://dev.mysql.com/downloads/repo/yum/

进入官网去选择合适的rpm包,包的作用是添加MySQL yum源,我在这里下载的是 mysql80-community-release-el7-3.noarch.rpm。下载之后通过XFTP上传文件到服务器,然后在rpm文件目录下执行yum localinstall 命令:

1
yum localinstall mysql80-community-release-el7-3.noarch.rpm

如果权限不够请使用sudo执行,执行完毕过后我们可以使用 cd /etc/yum.repos.d进入到目录中查看文件,发现会有如下两个文件:

  • mysql-community.repo
  • mysql-community-source.repo

二、安装

当我们添加好yum源之后就可以执行安装命令:

1
yum install mysql-community-server

三、启动

安装完成之后使用 systemctl start 执行启动MySQL命令:

1
systemctl start mysqld.service

使用 systemctl status mysqld.service 可以查看MySQL的运行状态。

关闭命令:

1
systemctl stop mysqld.service

重启命令:

1
systemctl restart mysqld.service

四、修改密码

当MySQL服务启动之后我们就需要对密码进行更改:MySQL 默认创建了 root 用户的密码,这个密码打印在 MySQL 的日志文件/var/log/mysqld.log中,可以通过temporary password关键字来找出这个临时的密码。

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

找到密码之后使用改密码连接数据库:

1
mysql -u root -p

然后修改密码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

执行上述命令密码将被修改为:NewPassword

PS:新版本的MySQL对密码强度有限制,执行到上一步的时候,会提示密码强度不够,则应更改为更高强度的密码。

密码更改完成之后重启MySQL服务:

1
systemctl restart mysqld.service

五、开放远程连接

MySQL默认只对本机开放连接,我们则需要对mysql表的host字段进行修改以支持其他主机连接,%表示所有。

1
2
3
# 先连接数据库
use mysql;
update user set host = '%' where user = 'root';

更改完成之后刷新权限:

1
flush privileges;

然后在navicat新建连接:

问题解决步骤:

发现是防火墙未关闭,有两种方法去解决。

  1. 关闭防火墙
  2. 设置防火墙开放端口

第一种方法:

1
2
3
4
//停止
systemctl stop firewalld.service
//禁止开机启动
systemctl disable firewalld.service

第二种方法:

1
2
3
4
5
6
7
8
//这里发现防火墙是开启的,再来查看防火墙控制的端口
systemctl status firewalld
//查看防火墙控制的端口,发现我想要监听的8081端口没有开启
firewall-cmd --list-all
//永久开启3306端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
//重载防火墙
sudo firewall-cmd --reload

我使用了第一种

再次实验,成功

注:在用正版navicat连接MySQL8+时没问题,但使用破解版会出现2059错误,这是由于新版本的MySQL使用的是caching_sha2_password验证方式,但此时的navicat还没有支持这种验证方式。解决方法就是将验证方式改为以前版本(5.7及以下)使用的验证方式mysql_native_password。


后续:

2019.09.12

后期在安装mysql5.7时遇到了不少大坑,在此记录一下。

1、安装mysql5.7

CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变:

下载mysql的源

1
wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

安装yum库

1
yum localinstall -y mysql57-community-release-el7-7.noarch.rpm

安装MySQL

1
yum install -y mysql-community-server

启动MySQL服务

1
systemctl start mysqld.service

2、修改MySQL的root密码

MySQL5.7加强了root用户的安全性,因此在第一次安装后会初始化一个随机密码,以下为查看初始随机密码的方式

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

进入mysql

1
mysql -uroot -p

完成之后进入,首先修改密码策略,然后修改密码

1
2
3
set global validate_password.policy=0;  // 有时为validate_password_policy
set global validate_password.length=1; // 有时为validate_password_length
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456789';

然后退出后即可用新密码登录。

3、远程连接授权

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

授权之后,用nevicat检查一下是否可以连接,如果不可以,可能是防火墙限制了。需要在防火墙里面加开放数据库端口的规则。

4、防火墙开放数据库端口(默认3306,可以在/etc/my.cnf中修改)

【1】查看目前防火墙

1
firewall-cmd --list-all   // 若提示firewallD is not running,systemctl start firewalld开启

【2】开放3306端口

1
firewall-cmd --permanent --add-port=3306/tcp

【3】重启防火墙

1
service firewalld restart

【4】查看3306端口是否开放

1
firewall-cmd --query-port=3306/tcp

【5】再次查看现在防火墙

1
firewall-cmd --list-all

【6】再次测试是否可以远程连接,成功。

5、设置开机自启

1
2
systemctl enable mysqld
systemctl daemon-reload

:转载文章请注明出处,谢谢~