文章目录
mysql8.0.30安装(centos7.8)
下载rpm安装包
注意:本教程是在新建虚拟机上安装,不涉及卸载,如需卸载请自行百度
地址:mysql8.0.30-rpm包地址
直接下载 bundel版本如下图所示:
解压bundle安装包
tar -xvf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
安装下图中选中的6 个rpm包
安装前检查
rpm -qa|grep libaio
yum install net-tools
rpm -qa|grep net-tools
yum remove mysql-libs // 删除系统带的msql库文件,否则安装时或报错
rpm安装mysql 8.0.30
安装时必须按照以下顺序安装
rpm -ivh mysql-community-common-8.0.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.30-1.el7.x86_64.rpm
查看mysql版本信息
mysql --version
mysqladmin --version
mysql操作命令
systemctl start mysqld
systemctl stop mysqld
systemctl enable mysqld //设置开机自启动
systemctl disable mysqld
systemctl status mysqld
systemctl list-unit-files|grep mysqld.service // 查看是否开机启动命令
查看临时登录密码
cat /var/log/mysqld.log |grep password
初始密码为: iAoo.oa<q65_
使用初始密码登录mysql,默认用户名是 root
mysql -uroot -p
此时表示mysql安装成功可以进行登录
修改密码
注意: 密码至少12位,包含大小写字母、特殊符号这三种可设置成功
alter user 'root'@'localhost' identified by '123_qwerQWER';
exit 命令退出mysql, 使用新密码重新登录mysql
设置远程登录
准备工作
Mysql配置了不支持远程连接,只能通过本地登录
执行如下命令关闭防火墙
systemctl start firewalld.service
systemctl status firewalld.service
systemctl stop firewalld.service
#设置开机启用防火墙
systemctl enable firewalld.service
#设置开机禁用防火墙
systemctl disable firewalld.service
或者
firewall-cmd --list-all #查看开放的端口号
firewall-cmd --add-service=http --permanent #设置开放的端口号
firewall-cmd --add-port=3306/tcp --permanent #设置开放的端口号
firewall-cmd --reload #重启防火墙
修改配置
查看命令如下:
use mysql;
select Host,User from user;
#或者
select host, user from user;
说明:Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而 %是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限。
注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产
环境的IP进行设置。
修改命令如下:
update user set host = '%' where user ='root';
flush privileges; // Host修改完成后记得执行flush privileges使配置立即生效:
结果如下图所示:
测试远程连接
本例中使用sqlyog 进行测试
查看密码校验规则
show variables like 'validate_password%';
说明如下:
修改密码校验规则
最低为4 , 如果设置值小于4, 默认是4, 修改其他默认值类似此操作
set global validate_password.length=12;
修改完规则之后 需要满足此规则才可以进行修改密码,否则报错
mysql字符集查看
在MySQL 8.0版本之前,默认字符集为 latin1 ,utf8字符集指向的是 utf8mb3 。网站开发人员在数据库
设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL8.0开始,数据库的默认编码将改为 utf8mb4 ,从而避免上述乱码的问题。
show variables like 'character%';
# 或者
show variables like '%char%';
说明如下:
-
character_set_server:服务器级别的字符集
-
character_set_database:当前数据库的字符集
-
character_set_client:服务器解码请求时使用的字符集
-
character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为- -character_set_connection设置的字符集
-
character_set_results:服务器向客户端返回数据时使用的字符集
utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示
了。而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以设计
MySQL的设计者偷偷的定义了两个概念:
- utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
- utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。
查看大小写敏感命令
show variables like '%lower_case_table%';
- 默认为0,大小写敏感 。
- 设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转
换为小写对表和数据库进行查找。 - 设置2,创建的表和数据库依据语句上格式存放,凡是查找都是转换为小写进行。
一般使用默认值即可。如需修改:
- 1、停止MySQL服务
- 2、删除数据目录,即删除 /var/lib/mysql 目录
- 3、在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
- 4、启动MySQL服务
sql_mode模式
-
宽松模式:
如果设置的是宽松模式,那么我们在插入数据的时候,即便是给了一个错误的数据,也可能会被接受,
并且不报错。
举例 :我在创建一个表时,该表中有一个字段为name,给name设置的字段类型时 char(10) ,如果我
在插入数据的时候,其中name这个字段对应的有一条数据的 长度超过了10 ,例如’1234567890abc’,超
过了设定的字段长度10,那么不会报错,并且取前10个字符存上,也就是说你这个数据被存为了’1234567890’,而’abc’就没有了。但是,我们给的这条数据是错误的,因为超过了字段长度,但是并没有报错,并且mysql自行处理并接受了,这就是宽松模式的效果。
应用场景 :通过设置sql mode为宽松模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据
库之间进行 迁移 时,则不需要对业务sql 进行较大的修改。 -
严格模式:
出现上面宽松模式的错误,应该报错才对,所以MySQL5.7版本就将sql_mode默认值改为了严格模式。所以在 生产等环境 中,我们必须采用的是严格模式,进而 开发、测试环境 的数据库也必须要设置,这样在开发测试阶段就可以发现问题。并且我们即便是用的MySQL5.6,也应该自行将其改为严格模式。
开发经验 : MySQL等数据库总想把关于数据的所有操作都自己包揽下来,包括数据的校验,其实开发中,我们应该在自己 开发的项目程序级别将这些校验给做了 ,虽然写项目的时候麻烦了一些步骤,但是这样做之后,我们在进行数据库迁移或者在项目的迁移时,就会方便很多。 -
改为严格模式后可能会存在的问题:
1、停止MySQL服务
2、删除数据目录,即删除 /var/lib/mysql 目录
3、在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
4、启动MySQL服务
若设置模式中包含了 NO_ZERO_DATE ,那么MySQL数据库不允许插入零日期,插入零日期会抛出错误而不是警告。例如,表中含字段TIMESTAMP列(如果未声明为NULL或显示DEFAULT子句)将自动分配DEFAULT ‘0000-00-00 00:00:00’(零时间戳),这显然是不满足sql_mode中的NO_ZERO_DATE而报错。
查看sql_mode模式
select @@session.sql_mode;
select @@global.sql_mode;
#或者
show variables like 'sql_mode';
#或者
select @@session.sql_mode\G
select @@global.sql_mode\G
- 永久修改-- 8.0默认严格模式,不做修改,如需修改,参考下图: