版本:centos7.5
mysql版本:8.0.34
也许这一篇就够了!
本文记录自己在安装过程中遇到的问题呢,希望对您有所帮助!
1.关闭MySQL服务
systemctl stop mysqld
2.使用 rpm 命令查看已安装的安装包
rpm -qa|grep mysql
3.使用yum卸载安装的mysql
yum remove mysql mysql-server mysql-libs mysql-server
4.查询剩余的安装包
rpm -qa|grep mysql
5.移除掉第4步查询的安装包
# 以第4步查到的文件为准
rpm -ev mysql-community-release-el7-5.noarch
rpm -ev mysql-community-common-5.6.51-2.el7.x86_64
6.删除残余的安装包
rm -rf mysql*
7.继续查找是否还有残留文件
find / -name mysql
8.移除第7步查询残留文件
#以实际查询到的为准
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
9.最后在检查一遍
rpm -qa|grep mysql
find / -name mysql
到这里卸载基本完成
1.下载 MySQL yum包
cd ~
wget http://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
2.安装MySQL源
rpm -Uvh mysql80-community-release-el7-7.noarch.rpm
3.安装MySQL服务端
yum -y install mysql-community-server --nogpgcheck
4.启动MySQL
systemctl start mysqld.service
5.检查是否启动成功
systemctl status mysqld.service
6.获取临时密码,MySQL8.0为root用户随机生成了一个密码
grep 'temporary password' /var/log/mysqld.log
2023-07-27T08:36:25.783907Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: LTcNG*H&q7ag
2023-08-23T05:57:49.595441Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: q(RO8)Hgy-Jp
首次安装查询只有一条记录
注:第一个是上次安装时的密码,删除的时候可能没有删除掉。这里我们复制第二个密码登录即可。
7.通过临时密码登录MySQL,进行修改密码操作
mysql -u root -p
8.全局修改一下MySQL的密码规则
mysql> set global validate_password_policy=0;
ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
mysql> set global validate_password_length=1;
ERROR 1193 (HY000): Unknown system variable 'validate_password_length'
第一坑来了,什么原因导致修改密码策略失败呢
是因为mysql8.0和MySQL5.7密码校验规则不同。不符合MySQL密码规范,才报错的。
1、问题:
8.1 MySQL 5.7 进行如下设置,即可解决问题:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
8.2 MySQL 8.0 执行代码:
mysql> set global validate_password_policy=0;
ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
mysql> set global validate_password_length=1;
ERROR 1193 (HY000): Unknown system variable 'validate_password_length'
2、解决问题
分析:可以看到,修改 policy 和 length 的值,在MySQL5.7中好使,在MySQL8.0中无效。‘validate_password_policy’ 变量不存在。
解决:先修改一个满足规则的密码(如:Root_root123)。
mysql> alter user 'root'@'localhost' identified by 'Root_root123';
补充: validate_password_policy 有以下取值:
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
3. 密码修改后,可用命令查看 validate_password 密码验证插件是否安装。
执行命令后可以看到length和policy为8和MEDIUM
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------+
8 rows in set (0.13 sec)
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=1;
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------------------+-------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 4 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+-------+
8 rows in set (0.02 sec)
#修改密码为123456
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.03 sec)
修改密码策略报错到这里就结束了
9.授权其他机器远程登录
第二个坑又来了
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
报错信息:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456' WITH GRANT OPTION' at line 1
解决办法:
依次执行如下语句
mysql> use mysql;
mysql> select host, user, authentication_string, plugin from user;
#执行完上面的命令后会显示一个表格
#查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。
#授权 root 用户的所有权限并设置远程访问
#GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。
mysql> grant all on *.* to 'root'@'%';
ERROR 1410 (42000): You are not allowed to create a user with GRANT
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#再执行两次
mysql> grant all on *.* to 'root'@'%';
刷新授权
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
再次执行查看
mysql> select host, user, authentication_string, plugin from user;
你会发现 root 用户的 host 已经变成 %,说明我们的修改已经成功,可以远程访问了。
访问数据库
这里也报错了
这里我用的是navicat
输入访问的 host 和密码,报 2059 错误,这是因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。
此问题有两种方法,一种是更新 Navicat 驱动来解决此问题,另一种是将 MySQL 用户登录的加密规则修改为 mysql_native_password,第一种方法我试过了没有起作用,我这里采用第二种方法。
在8.0.19版本的mysql后,使用navicat连接时,报caching_sha2_password’ cannot be loaded的异常。
原因为:8.0.19版本的mysq用户密码加密方式为caching_sha2_password,navicat暂不支持,需要修改下mysql的加密方式。
更改root密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
#password 为你新设置的密码。
刷新授权
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
回到工具,点击连接测试,提示连接成功。
虚拟机登录验证,也没有问题
mysql> quit;
Bye
[root@hadoop100 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.34 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
本文记录自己在安装过程中遇到的问题呢,希望对您有所帮助!