Linux Centos7 安装Mysql5.7 图文详解及相关问题
目录
一、下载Mysql5.7官方Yum Repository
二、yum方式安装
三、安装Mysql Server
四、启动、查看、重启mysql 服务
五、修改配置初始化密码
1、查看密码策略:SHOW VARIABLES LIKE 'validate_password%';
2、修改密码策略为弱口令:set global validate_password_policy=LOW;
3、修改密码为简单密码: ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
七、常见问题
1、正常安装,但mysql远程连接不上,原因3306端口被屏蔽
2、mysql大小写敏感问题(实现表名、字段名不区分大小写)
3、使用group by报错(sql_mode=only_full_group_by)
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
等待一会,如下说明安装完成
启动:systemctl start mysqld.service
查看:systemctl status mysqld.service
重启:systemctl restart mysqld.service
mysql安装后会初始化root的密码,首次进入后必须修改初始化密码,且输入的密码必须符合中级策略即必须包含大小写字母数字和特殊符号
查看mysql初始化密码: grep "password" /var/log/mysqld.log
以root身份登录:mysql -uroot -p
输入初始化密码
修改密码: ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码'; 注意需要包含大小写字母、数字和符号
如果需要简单密码,可以修改密码策略,按如下步骤:或参考https://blog.csdn.net/hello_world_qwp/article/details/79551789
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
原因是mysql安装后,默认root用户只能本地访问
开启mysql的远程访问:
grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option;
flush privileges;
再试Navicat,连接成功
解决方法:
虚拟机或物理机可以通过防火墙开放3306端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
云主机可以通过安全策略,具体请查看云主机服务商项目文档或售后
解决办法:
第一步:编辑/etc/my.cnf文件,在[mysqld]节下 添加 lower_case_table_names=1 参数,并设置相应的值 (备注:为0时大小写敏感,为1时大小写不敏感,默认为0)。
(必须是在[mysqld]节点下添加,否则没有效果)
第二步:重启mysql
systemctl restart mysqld.service
第三步:查看mysql的参数
show variables like '%case%';
我的报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '*********' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因是:mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。
在sql执行时,输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。
解决方案:
(1)、查看slq_mode: select @@GLOBAL.sql_mode;
(2)、在/etc/my.cnf 中添加
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
保存退出后,重启mysql服务
本文参考:
https://blog.csdn.net/qq_36582604/article/details/80526287
https://blog.csdn.net/qq_29384639/article/details/94379329
https://www.cnblogs.com/trunkslisa/p/9470434.html
https://blog.csdn.net/qq_42175986/article/details/82384160