Linux下MySQL8.0的安装与使用
前言
本文为尚硅谷康师傅《MySQL从菜鸟到大牛》视频学习笔记
一、Linux系统及工具的准备
1、云服务器或虚拟机等
2、虚拟机注意网络设置
二、查看是否安装过MySQL
# 1、rpm检查安装包
rpm -qa|grep -i mysql
# 2、检查MySQL服务
systemctl status mysqld.service
三、MySQL卸载
# 1、关闭MySQL服务
systemctl stop mysqld.service
# 2、查看MySQL当前的状况
rpm -qa|grep -i mysql
# 或
yum list installed | grep mysql
# 3、卸载上述命令查询出的已安装程序
yum remove XX
# 务必拆卸干净,反复执行rpm -qa|grep -i mysql确认是否有卸载残余
# 4、查找MySQL相关文件
find / -name mysql
# 5、递归删除文件目录
rm -rf xx
四、MySQL安装
1、去MySQL官网下载对应Linux版本的MySQL
MySQL官网截图2、解压后仅需如下6个包
mysql-community-client-8.0.31-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm
mysql-community-common-8.0.31-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm
mysql-community-libs-8.0.31-1.el7.x86_64.rpm
mysql-community-server-8.0.31-1.el7.x86_64.rpm
3、开始安装
# 1、检查MySQL需要的依赖
# 给安装MySQL需要的 /tmp文件夹赋权
chmod -R 777 /tmp
# 2、检查依赖
rpm -qa | grep libaio
# 如无
yum install libaio
rpm -qa | grep net-tools
# 如无
yum install net-tools
# 3、按照如下顺序 执行安装
rpm -ivh xx
# a.mysql-community-common
# b.mysql-community-client-plugin
# c.mysql-community-libs
# d.mysql-community-client
# e.mysql-community-icu-data-files
# f.mysql-community-server
# 注:遇到错误,缺少依赖,百度后
yum install -y perl-Module-Install.noarch
# 注:安装libs时遇到报错,执行下面命令后重新安装libs
yum remove mysql-libs
# 4、查看MySQL版本
mysql --version
# 或
mysqladmin --version
# 或 -i区分大小写,不然找不到
rpm -qa | grep -i mysql
# 5、初始化 生成root用户密码
mysqld --initialize --user=mysql
# 6、查看密码
cat /var/log/mysqld.log
# 7、查看MySQL运行状态
systemctl status mysqld
# 8、启动MySQL服务
systemctl start mysqld
# 9、查询当前MySQL是否开机自启动
systemctl list-unit-files | grep mysqld.service
# 10、如果是disable,可设置开机自启动
systemctl enable mysqld.service
# 11、命令行登录
mysql -uroot -p
# 12、提示修改密码
alter user 'root'@'localhost' identified by 'abc123';
五、使用客户端工具远程连接MySQL
1、如遇2003错误号码,是端口没有开放
可以开放端口或者关闭防火墙
2、开放端口或者关闭防火墙后提示1130错误号码,解决如下
# 1、查看目前数据库
show databases;
# 2、查看MySQL数据库所有表
use mysql;
show tables;
# 3、查询user表信息
select host,user from user;
# 4、修改root用户允许连接为允许所有
update user set host = '%' where user = 'root';
# 5、刷新权限
flush privileges;
3、如果遇到2058错误号码,为8.0密码算法变更
处理方式如下
# 执行sql,允许用户以简单密码登录
alter user 'root'@'%' identified with mysql_native_password by 'abc123';
六、mysql8.0的密码强度评估
方案1,MySQL指令执行如下如下配置
[mysqld]
plugin-load-add=validate_password.so
\#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用)
validate-password=FORCE_PLUS_PERMANENT
方案二,MySQL指令执行如下
# 1、登录MySQL后执行
install plugin validate_password soname 'validate_password.so';
# 2、修改密码
alter user 'root'@'%' identified by 'abc123';
# 提示
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
# 3、修改为大小写加数字加特殊字符的密码
alter user 'root'@'%' identified by 'Hello_mysql123';
# 4、密码强度测试
select validate_password_strength('Hello_mysql123');
# 5、查询密码强度信息
show variables like 'validate_password%';
# 6、修改密码强度
set global validate_password_policy = LOW;
# 7、修改密码长度限制
set global validate_password_length = 1;
# 8、设置简单密码
alter user 'root'@'%' identified by 'abc123';
# 删除此插件
uninstall plugin validate_password;
七、字符集
1、8.0默认字符集为utf8mb4
# 1、查看字符集
show variables like '%character%';
# 2、my.cnf修改字符集只影响后续新创建的数据库及表的字符集,如需修改库的字符集如下
alter database xx character set 'utf8';
# 3、修改表的字符集如下
alter table xx convert to character set 'utf8';
2、需要注意的是,修改的目标字符集不兼容原字符集可能出现乱码
3、字符集有四个级别,分别是:服务器、库、表、列级
如果指定级不设置字符集,则使用上级字符集,若需改变可以独立级别更该字符集
八、字符集和比较规则
1、utf8=utf8mb3,三个字节一个中文字符
utf8mb4四个字节一个中文字符
# 1、查看MySQL支持的字符集
show charset;
# 或
show character set;
# 2、查看服务器的字符集和比较规则
show variables like '%_server';
# 3、查看数据库的字符集和比较规则
show variables like '%_database';
# 4、查看具体数据库的字符集
show create database dbtest1;
# 5、修改具体数据库的字符集
alter database dbtest1 default character set 'utf8' collate 'utf8_general_ci';
# 6、查看表的字符集
show create table emp1;
# 7、查看表的比较规则
show table status from dbtest1 like 'emp1';
# 8、修改表的字符集和比较规则
alter table emp1 default character set 'utf8' collate 'utf8_general_ci';
2、字符集中
character_set_client(必须一致)
character_set_connection(可以不一致)
character_set_results(必须一致)
3、其中如下设置可批量设置三个字符集
# 1、同时设置三个字符集
set names utf8;
# 或在my.cnf中添加
[client]
default-character-set=utf8
九、sql大小写规范
1、Windows是大小写不敏感的
Linux是大小写敏感的
# 1、查看是否大小写敏感
show variables like '%lower_case_table_names%'
# 0:敏感 1:不敏感,无论你存什么都变成小写 2:不敏感,写什么存什么,查找转成小写进行
# 2、MySQL5.7下Linux my.cnf修改大小写规则为大小写不敏感,重启服务
lower_case_table_names=1
# 注:但在重启服务器之前,需将原数据库库名表明改成小写,不然重启后找不到
# 3、MySQL8.0下修改此配置重启时禁止启动,如需更该需做如下操作
# a.停止MySQL服务
# b.删除数据目录(慎重),即删除/var/lib/mysql 目录
# c.在MySQL配置文件my.cnf中添加
lower_case_table_names=1
# d.启动服务器
# 结论:不建议改大小写规则
2、MySQL在Linux库名、表名、列名、别名大小写规则:
a.数据库名、表名、表的别名、变量名是严格区分大小写的
b.关键字、函数名在SQL中不区分大小写
c.列名(或字段名)与列的别名(或字段别名)在所有的情况均不区分大小写
d.MySQL在Windows下都是不区分大小写的
3、SQL编写建议如下:
a.关键字、函数名全都大写
b.数据库名、表名、表的别名、字段名、字段别名小写
c.SQL以英文分号结束
十、sql_mode的合理设置
1、sql_mode规范SQL语法的严格度
分为宽松模式和严格模式
5.6默认为宽松模式
5.7默认为严格模式
2、宽松模式下可能丢失字符,一般在数据迁移下使用
如设置字段类型char(10),当存储”1234567890abc“时
会丢失限定的10个字符外的字符,即丢失”abc“,变成”1234567890“
3、通常情况下使用严格模式
4、严格模式可能存在一下问题
当设置模式中含”NO_ZERO_DATE“
当timestamp字段没声明null或显示default子句
将自动分配default值”0000-00-00 00:00:00“零时间戳
会报错
5、查看当前sql_mode
# 1、会话查看
select @@session.sql_mode;
# 2、全局查看
select @@global.sql_mode;
# 或
show variables like 'sql_mode';
# 3、设置sql_mode当前会话,会话关闭即失效
set session sql_mode = 'xx..';
# 4、设置sql_mode当前实例,MySQL服务重启即失效
set global sql_mode = 'xx..';
# 5、永久设置,在my.cnf添加一下配置,重启MySQL
[mysqld]
sql_mode='xx..'
# 注:可以采用临时设置+永久设置,即当前实例设置,再配置文件设置,重启实例设置失效,但配置文件设置生效