步骤一: 配置MySQL 8.0安装源:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
步骤二: 配置MySQL 8.0安装源:
sudo yum --enablerepo=mysql80-community install mysql-community-server
安装步骤:
输入第一个【y】同意下载 --> 输入第二个【y】同意安装 --> 至此Mysql 8.0安装完成。
步骤三: 启动MySQL服务:(该服务需要root权限启动)
sudo service mysqld start
步骤三: 查看MySQL服务状态
service mysqld status
步骤三: 查看root用户临时密码
grep "A temporary password" /var/log/mysqld.log
出现如下:(后面引号内的为临时密码)
A temporary password is generated for root@localhost: `o?7rkoXeVVey`
步骤四: 设置MySQL新密码
mysql_secure_installation
第一步:
设置新的(Mysql中的)root用户密码(需由大写、小写、数字、符号四种混合组成)
第二步:配置是否启用密码安全性检查插件,保证密码强度,按需启用。建议【y】
第三步:选择一种密码强度,0【LOW】是长度八位以上;1【MEDIUM】是长度八位以上,而且由数字、大小写、符号组成;2【STRONG】是长度八位以上,而且由数字、大小写、符号组成,并通过字典文件检测,按需选择。建议【2】
第四步:选择是否删除匿名用户。建议【y】
第五步:选择是否运行root用户远程连接。建议【n】可根据下文添加另一远程用户
第六步:选择是否删除测试数据库。建议【y】
第七步:选择是否刷新privilege表,即是否执行flush privileges命令。建议【y】
步骤五: 配置远程访问
- 登录mysql控制台
mysql -uroot -p
- 创建新的远程用户
CREATE USER '[用户名]'@'%' IDENTIFIED BY '[密码]';
- 授权给远程用户
GRANT ALL ON *.* TO '[用户名]'@'%';(ALL表示授予所有权限、*.*表示所有数据库中的所有表、%表示任意IP可以远程连接)
步骤六: 设置MySQL防火墙
- 将 MySQL 服务加入防火墙
sudo firewall-cmd --zone=public --permanent --add-service=mysql
`返回success。`
- 重启防火墙
sudo systemctl restart firewalld
步骤七: 设置MySQL端口安全组
MySQL 8.0 常见问题
- 使用 navicat 无法连接(2059 - authentication plugin 'caching_sha2_password' cannot be loaded)
1. 进入MySQL的root账户:`mysql -uroot -p`
2. 更改加密方式:`ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;`
3. 更改密码:`ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';`
4. 刷新:`FLUSH PRIVILEGES;`
注
如果报错 ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%' :
则是远程访问权限不正确,先选择数据库,查看一下再更改:(可参考步骤5)
mysql> use mysql;
Database changed
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
- 出现 GROUP BY 语句不兼容问题
1. 登录:mysql -uroot -p
2. 查看sql_mode:select @@global.sql_mode;
`查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION`
3、去掉ONLY_FULL_GROUP_BY,重新设置值:
`set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';`
4. 上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:
`set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';`
注
还有一种解决方法:修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项