浅析Linux如何安装MySQL及遇到的问题
我在我的服务器上安装的 MySQL 3306 端口也开了,但是无法访问,查到这篇文章,正好跟我遇到的问题一样,此文记录挺详细的,故记录下。
一、安装步骤
1、查看是否已经安装 Mysql
rpm -qa | grep mysql
如果你查看出来有东西,可以使用下面命令将其删除
rpm -e 文件名
2、下载官方 Mysql 包
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
如果安装有提示:Cannot write to ‘mysql57-community-release-el7-10.noarch.rpm’ (No such file or directory),那就是权限不够
可以输入 su root 来解决,然后重新下载。
3、安装MySQL包
yum -y install mysql57-community-release-el7-10.noarch.rpm
4、安装 MySQL
yum -y install mysql-community-server
如果执行命令过程中提示:Unable to find a match: mysql-community-server
则可以通过命令解决
yum module disable mysql
5、启动 Mysql 服务
systemctl start mysqld.service
如果没有报错,进入第六步,
如果执行报错,多半是没有权限,执行下面语句赋予权限,然后重试
chown mysql:mysql -R /var/lib/mysql
6、查看 Mysql 运行状态
service mysqld status
看见这个绿色就表示启动成功了
7、查看初始密码(红色部分为初始密码)
grep 'password' /var/log/mysqld.log
如果能正常查看到,则OK;如果查看不到,则表示没有密码。
8、进入数据库
mysql -u root -p
输入命令后,点击回车,会让你输入密码,然后输入刚刚的初始密码(如果自己改过密码,就得输入自己的密码。输密码的时候不可见),当然支持粘贴,你可以复制初始密码后,然后粘贴。如果没有密码,直接回车即可。
注: 如果显示数据库无法访问
修改MySql配置文件my.cnf,新增skip-grant-tables
find / -name my.cnf
修改文件之前记得先关闭mysql服务
service mysqld stop
通过 vi 指令进入文件
新增skip-grant-tables ,添加skip-grant-tables,这样mysql可以免密登录。
// 重启服务
service mysqld start
// 再次连接MySql,重置密码
// 任意密码就可以进入了
mysql -u root -p
通过 show databases; 注意带 ; 号
show databases;
切换到mysql数据库
// 重置密码(为 root )
update user set authentication_string=password('root') where user='root';
修改配置文件my.cnf,删除skip-grant-tables,重启,再登录
删除skip-grant-tables
// 重启服务
service mysqld start
// 根据指令进入MySQL数据库
mysql -u root -p
再次使用新密码登录即可至此!Linux 下 Mysql 安装到使用讲解完成。
二、遇到的问题
温馨提示:如果本地访问Linux数据库失败,则记得看下下面三个配置是否OK
1、服务器的防火墙mysql端口3306是否开放
// 查看防火墙是否已开放3306端口
firewall-cmd --query-port=3306/tcp
// 设置3306端口为永久开放
firewall-cmd --add-port=3306/tcp --permanent
// 查看firewalld状态,发现当前是dead状态,即防火墙未开启
systemctl status firewalld
// 关闭防火墙
systemctl stop firewalld
// 重启防火墙(设置了新的端口记得先关闭,再重启)
systemctl status firewalld
2、如果是阿里云ECS,记得查看云安全组规则是否开放了3306端口,如果没有,记得加上
3、如果链接提示如下,则是没有允许远程登录(我就是遇到的这个问题)
解决办法:登录服务器mysql数据库
执行 use mysql;
执行 update user set host = '%' where user = 'root';
执行 FLUSH PRIVILEGES;
之后就可以连接成功了。