Mysql8.0安装
1.下载地址
得到如下地址
https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
下载
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
#安装源
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
结果如下
[root@localhost ~]# rpm -ivh mysql80-community-release-el7-7.noarch.rpm
warning: mysql80-community-release-el7-7.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql80-community-release-el7-7 ################################# [100%]
报错
Downloading packages:
warning: /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-server-8.0.31-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
Failing package is: mysql-community-server-8.0.31-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
解决方式
0.修改配置 /etc/yum.repos.d/mysql-community.repo
1.绕开
在yum install 版本后面加上 --nogpgcheck,即可绕过GPG验证成功安装。
sudo yum install mysql-community-server -y #GPGkey验证失败
sudo yum install mysql-community-server -y --nogpgcheck # 即可安装成功
2.导入证书
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 再执行安装
sudo yum install mysql-community-server -y
2.启动
#启动mysql服务
systemctl start mysqld
#查看mysql运行状态
systemctl status mysqld
3.登录
#查找初始密码
grep 'temporary password' /var/log/mysqld.log
#通过初始密码登录
mysql -uroot -p
#初始密码状态 (此处的密码值 可以设置为原始密码【或者直接就这行这条sql】,先能够登录上,再修改密码策略,修改简单密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hi0WgzXwoS(!^C';
#降低密码等级和长度要求
set global validate_password.policy=LOW;
set global validate_password.length=4;
#修改成自己的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#刷新权限
flush privileges;
#退出MySQL命令行
exit;
#bash下重启MySQL服务
systemctl restart mysqld;
密码策略详解
【解决】
1) 查看mysql全局参数配置
该问题其实与mysql的validate_password_policy的值有关。 查看一下msyql密码相关的几个全局参数:
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM |
+----------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
6 rows in set (0.08 sec)
2)参数解释
validate_password_dictionary_file
插件用于验证密码强度的字典文件路径。
validate_password_length
密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
validate_password_mixed_case_count
密码至少要包含的小写字母个数和大写字母个数。
validate_password_number_count
密码至少要包含的数字个数。
validate_password_policy
密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
Policy Tests Performed 0 or LOW Length 1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters 2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file 默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
validate_password_special_char_count
密码至少要包含的特殊字符数。
3)修改mysql参数配置
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)
mysql>
mysql>
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 3 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 3 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 0 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
4)修改简单密码:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
4.设置远程连接
#登录mysql
mysql -uroot -p123456
#切换到mysql数据库
use mysql;
#让root可以通过任意IP登录
update user set host='%' where user='root';
exit;
#bash下重启MySQL服务
systemctl restart mysqld;
附录:可能遇到的问题
问题1:密码策略
设置的密码太过于简单了,会提示下面错误
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
【原因】
原来MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。 使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。影响的语句和函数有:create user,grant,set password,password(),old password。
问题二: 没有修改初始密码
初始密码登入后,要先修改初始密码,才能执行其他操作。
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
解决:
#初始密码状态 (此处的密码值 可以设置为原始密码【或者直接就这行这条sql】,先能够登录上,再修改密码策略,修改简单密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hi0WgzXwoS(!^C';
#降低密码等级和长度要求
set global validate_password.policy=LOW;
set global validate_password.length=4;
#修改成自己的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#刷新权限
flush privileges;
#退出MySQL命令行
exit;
问题三:完成后远程ssh无法连接
问题原因
安装MySQL数据库过程中修改了var目录的权限。
解决方法
将SSH相关文件的权限改回来,确保权限为755,属主为root:root。
修复文件权限
chmod 755 /var/empty/sshd
如果属主不对,还需要修改属主:
chown root:root /var/empty/sshd
重启sshd服务
service sshd restart