本文最后更新于 2024-08-22,文章内容可能已经过时。

MySQL配置与安装

安装

查看是否已经安装了MySQL

rpm -qa | grep mysql

如果什么都没有,就是还没有装过MySQL

[root@10-50-132-197 ~]# rpm -qa | grep mysql
[root@10-50-132-197 ~]#

下载MySQL安装包

# mysql5.7
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

安装mysql包

yum -y install mysql57-community-release-el7-10.noarch.rpm

安装MySQL

yum -y install mysql-community-server

出现这个报错,解决方法:需要禁掉GPG验证检查,执行下面的命令

yum -y install mysql-community-server --nogpgcheck

启动MySQL服务

systemctl start mysqld.service
[root@localhost ~]# systemctl start mysqld.service
[root@localhost ~]# 

查看服务状态
service mysqld status

上图这样就是启动成功了

查看MySQL初始密码

grep "password" /var/log/mysqld.log

登录数据库

mysql -u root -p

修改MySQL默认密码
#修改密码安全策略为低(只校验密码长度,至少8位)
set global validate_password_policy=0;  
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

未修改默认密码不能操作数据库

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

授予root用户远程管理权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

退出数据库

exit

Linux远程访问配置

网络连接和端口开放

  • 使用ping命令查看服务器网络是否连接

  • 使用telnet命名查看数据库端口是否开放(默认3306)

telnet 10.50.132.197 3306

端口未开放解决方法:

关闭防火墙
systemctl stop firewalld
开放端口
  1. 开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

  1. 重新载入一下防火墙设置,使设置生效

firewall-cmd --reload

  1. 可通过如下命令查看是否生效

firewall-cmd --zone=public --query-port=3306/tcp

  1. 查看系统所有开放的端口

firewall-cmd --zone=public --list-ports

MySQL配置

如果开放了防火墙,还是不能连接,通过netstat查看3306的端口状态:

netstat -apn|grep 3306
tcp6     0     0 127.0.0.1:3306     :::*     LISTEN         13524/mysqld

如果IP未127.0.0.1则说明3306端口被绑定到了本地,不能远程访问

解决方法

更新配置文件

MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下;

在Linux下叫my.cnf,该文件位于/etc/my.cnf

可以查找下:find / -name my.cnf

通过 rpm 命令安装的 MySQL 是没有 /etc/my.cnf 文件的,如果需要配置 MySQL,可以在/etc/my.cnf新建配置文件,然后把配置信息复制到文件中即可。

通过更新配置文件 bind-address的值更改MySQL端口绑定

  • 不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。


[mysqld]

port=3306
bind-address=0.0.0.0

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

确认端口状态
[root@10-50-132-197 etc]# netstat -apn|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      12284/mysqld        
tcp6       0      0 10.50.132.197:3306      10.11.33.64:51808       ESTABLISHED 12284/mysqld  

用户访问权限

  • MySQL建用户的时候会指定一个host指定允许访问的主机

  • 默认是127.0.0.1/localhost,表示只能本地访问

  • host改为%,表示允许所有机器访问

查看用户访问权限

mysql数据库user表中记录了所有用户信息

  1. use mysql;

  2. select host,user from user;

更改用户访问权限
  • 使用用户授权命令

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

  • 直接修改表的值

 update user set host=’%’ where user=’root’;

端口号设置

查看端口号

show global variables like 'port';

mysql> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)

修改端口号

mysql 默认端口号: 3306

编辑配置文件

编辑配置文件 port 属性值设置端口号

配置文件:/etc/my.cnf

重启服务

更改配置文件后需要重新启动mysql服务才能生效

systemctl restart mysqld
[mysqld]

port=3307
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启服务时遇到报错
[root@localhost ~]# systemctl restart mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
  1. 此时mysql已经停止,但是重启失败了

  2. 把配置文件中的端口号删掉就又能启动

  3. 查看了端口号,并没有被占用

解决:

是因为启动了SELinux

临时关闭,再重新启动即成功

setenforce 0

[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start mysqld

如需永久关闭要修改/etc/selinux/config 配置文件,并重启系统

将SELINUX=enforcing改为SELINUX=disabled