安装MySQL 8.0+
准备工作
1.查看是否有安装过mysql
rpm -qa | grep -i mysql
2.删除mysql
yum -y remove MySQL-*
一般用rpm -e 的命令删除mysql,这样表面上删除了mysql,可是mysql的一些残余程序仍然存在,并且通过第一步的方式也查找不到残余,而yum命令比较强大,可以完全删除mysql.(ps:用rpm删除后再次安装的时候会提示已经安装了,这就是rpm没删除干净的原因)
3.把所有出现的目录统统删除
find / -name mysql
查找mysql的一些目录,把所有出现的目录删除,可以使用rm -rf 路径,删除时请注意,一旦删除无法恢复。
4.删除配置文件
rm -rf /etc/my.cnf
5.删除mysql的默认密码
rm -rf /root/.mysql_sercret
删除mysql的默认密码,如果不删除,以后安装mysql这个sercret中的默认密码不会变,使用其中的默认密码就可能会报类似Access denied for user ‘root@localhost’ (using password:yes)的错误.
五步完成之后,这样mysql就全部删除干净了,若没安装过mysql可忽略以上步骤
1.配置Mysql 8.0安装源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.在运行安装程序之前导入密钥:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
3.安装Mysql 8.0
sudo yum --enablerepo=mysql80-community install mysql-community-server -y
看到complet(完毕)就是安装完啦
配置MySQL
vi /etc/selinux/config
SELINUX=disabled
mkdir -p /var/log/mysql
chown mysql:mysql /var/log/mysql/*
chown -R mysql:mysql /var/lib/mysql/
- my.cnf文件:
vi /etc/my.cnf
[mysqld]
#不区分大小写
lower_case_table_names=1
# 允许最大连接数
max_connections = 1000
# 允许最大同时连接数
max_user_connections = 500
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 允许服务端使用的最大内存
max_allowed_packet = 1024M
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 数据存放目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
event_scheduler=ON
slow_query_log = ON
# 慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
innodb_buffer_pool_size = 6G
default-authentication-plugin=mysql_native_password
server-id=10
log-bin=/var/lib/mysql/mysql-bin
max_connect_errors=1000
#日志及进程数据的存放目录
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
4.启动mysql服务
mysqld --initialize
systemctl start mysqld
显示如下:
启动完成
5.查看mysql服务运行状态
service mysqld status
6.查看root临时密码
安装完mysql之后,会生成一个临时的密码让root用户登录
grep "A temporary password" /var/log/mysql/mysqld.log
7.更改临时密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '1q2w#E$R';
FLUSH PRIVILEGES;
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1q2w#E$R';
FLUSH PRIVILEGES;
8.修改权限
mysql> SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
+-----------+---------------+------------+------------+
| host | user | Grant_priv | Super_priv |
+-----------+---------------+------------+------------+
| localhost | root | Y | Y |
| localhost | mysql.session | N | Y |
| localhost | mysql.sys | N | N |
| % | root | Y | Y |
| localhost | mysqladmin | Y | Y |
+-----------+---------------+------------+------------+
5 rows in set (0.00 sec)
mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
备用改密方案
先看看当前的密码验证策略
SHOW VARIABLES LIKE 'validate_password.%';
策略说明
validate_password.length 是密码的最小长度,默认是8,我们把它改成6
输入:set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;
再执行修改密码的命令
输入:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘12345’;
密码设成功
用mysql客户连接报不允许连接的错误,那是因为没开通远程访问的权限
- 将MySQL设置为开机自启动:
sudo service mysqld stop
sudo service mysqld start
systemctl enable mysqld
systemctl status mysqld
关闭防火墙(看情况操作)
sudo systemctl stop firewalld
sudo systemctl disable firewalld