一、Mysql 8学习
一、准备工作
注意:如不执行下图操作,会访问异常,配置永久关闭需重启系统生效,此次实验建议都关闭。(生产环境中,不建议永久关闭,永久关闭会导致系统安全风险)
getenforce #检查selinux状态
"enforcing"(强制模式)、"permissive"(宽容模式)还是"disabled"(禁用状态)
setenforce 0 #临时关闭,有时候不生效

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config \\关闭访问限制
cat /etc/selinux/conifg
....................................................
SELINUX=disabled #永久关闭,需重启系统
......................................................
reboot #重启系统

二、安装mysql
1、把mysql包上传至服务器目录里,并进入目录
cd /data/download
2、删掉系统自带的mysql库,否则会和mysql8要安装的lib冲突
yum remove -y mysql-libs
3、 把文件上传到这个目录里,再用下面的语句解压
tar -xvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
4、安装(全局的依赖common,必须第一个装)
rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm

5、安装(安装lib的依赖)
rpm -ivh mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm
6、安装lib(client 和 server 都依赖它)
rpm -ivh mysql-community-libs-8.0.33-1.el7.x86_64.rpm
7、安装mysql的客户端
rpm -ivh mysql-community-client-8.0.33-1.el7.x86_64.rpm
8、安装服务端(必须先客户端后服务端)
rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm
9、 启动服务(在启动的时候会产生默认的root密码)
systemctl start mysqld.service
10、查看mysql运行状态
ps -ef|grep mysql
11、在日志里查找root密码(如果从来没有启动过,是不会有这个日志的)
grep 'temporary password' /var/log/mysqld.log
12、使用初始化密码登录
mysql -uroot -p

13、未修改初始密码前,无法查看密码复杂性
14、修改初始密码,设置新密码
alter user 'root'@'localhost' identified with mysql_native_password by '123Qwe!!';
15、退出数据库
quit;
16、用新密码登录
mysql -uroot -p #新密码登录

16、设置开机启动
systemctl enable mysqld.service

三、mysql常用命令
1、登录mysql
mysql -uroot -p
2、查看自带的库
show databases;
3、进入数据库
use mysql
4、查看数据库有哪些表
show tables;

5、查看所有用户信息
select * from user; #表中文件过多显示很乱

select * from user\G; #表中文件排序显示

6、创建数据库(删除库命令,请勿乱用:drop database 库名;)
create database hefang;
7、查看数据库创建情况
show databases;
8、进入创建的数据库
use hefang;
9、查看数据库表
show tables;
10、创建名为t1表,并创建两个字段,id、name,varchar表示设置数据长度,用字符来定义长度单位,其中1汉字=2字符=2Bytes;
create table t1 (id varchar(20),name varchar(20));
11、查看数据库表
show tables;
12、向表中插入数据(多创建几条数据)
insert into t1 values ("123","hefang");

13、查看t1表数据内容;
select * from t1;
14、更新表中数据
update t1 set name='hefangya' where id=123;
15、带id、age多个条件查询;
select * from t1 where id=456 and name='hefang';
16、退出
quit;

四、修改密码复杂度
(注意:此步骤正式环境,不建议执行)
1、查看密码复杂度
show variables like 'validate_password%';
................
validate_password.check_user_name #用于验证密码强度的字典文件路径,默认NO;
validate_password.dictionary_file #用于验证密码强度的字典文件路径;
validate_password.length #密码最小长度,参数默认为8,它有最小值的限定;
validate_password.mixed_case_count #密码至少要包含的大写字母和小写字母的个数,默认1;
validate_password.number_count #密码至少要包含的数字个数,默认1;
validate_password.policy #密码强度等级检查;(默认是1,即MEDIUM)
validate_password.special_char_count # 密码至少要包含的特殊字符个数,默认1;
..................................
2、密码强度等级检查为0
set global validate_password.policy=0;
3、密码最小长度为6
set global validate_password.length=6;

4、查看密码复杂度修改情况
show variables like 'validate_password%';
5、修改密码,设置新密码
alter user 'root'@'localhost' identified with mysql_native_password by 'qaz`123';
6、退出数据库
quit;
验证新密码登录
mysql -uroot -p
新密码
7、quit; #退出
五、配置远程登录的用户
注意:配置可远程登录的用户,拥有全部权限
1、登录mysql
mysql -uroot -p
2、查看所有用户列表
select user from mysql.user;
drop user study; #删除用户
3、创建一个支持远程登录的用户(注意:%代表所有ip,生产环境不允配置,或可指定远程ip)
create User 'study'@'%' Identified With mysql_native_password BY '123Qwe!!' password expire never;
4、对这个用户授所有权限
grant all privileges on *.* to 'study'@'%' with grant option;

5、验证用户、主机、访问配置等权限情况
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;
6、刷新权限
flush privileges;
7、退出
quit;
8、关闭防火墙
systemctl disable firewalld
9、查看mysql运行情况
ps -ef|grep mysql
10、查看mysql端口情况
netstat -anptu |grep mysq

用第三方(DBeaver)软件登录验证

登录成功

六、忘记密码了
1、停止mysql服务
systemctl stop mysqld
2、查找mysql配置文件
find / -name my.cnf
3、进入mysql的配置文件 /etc/my.cnf,找到[mysqld],在下面增加一行"skip-grant-tables',保存
vi /etc/my.cnf

4、重启mysq;服务
systemctl start mysqld
5、登录(无须密码回车登录)
mysql -uroot
6、先刷新权限表
flush privileges;
7、查看密码复杂度规则
show variables like 'validate_password%';
8、修改密码(IDENTIFIED授权,mysql_native_password是主流语言php和java等的支持的mysql加密方式)
alter user 'root'@'localhost' identified with mysql_native_password by '123Qwe!!';
9、退出
quit;

七、设置密码有效期
10、删除/etc/my.cnf里添加的 skip-grant-tables
vi /etc/my.cnf
11、重启mysql服务
systemctl restart mysqld
12、验证新密码
mysql -uroot -p
13、设置密码有效期
90天过期(注意:绿色字体是账号与密码,紫色为有效期)
alter user 'root'@'localhost' identified with mysql_native_password by '123Qwe!!' password expire interval 90 day;
设置永不过期
alter user 'root'@'localhost' identified with mysql_native_password by '123Qwe!!' password expire never;
14、先刷新权限表
flush privileges;
15、退出
quit
16、登录mysql验证
mysql -uroot -p

17、查看有效期设置情况
注意:显示全局默认密码生存周期的值,单位 :天;若结果为0或NULL,则表示已经关闭了密码过期功能;否则,需要修改该变量的值。
show variables like'default_password_lifetime';
18、先刷新权限表
flush privileges;
19、修改永久有效期
set global default_password_lifetime=-1;
20、验证设置情况
show variables like'default_password_lifetime';

21、通过 mysql.user 系统表查看数据库账号状态
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;
#从mysql.user中选择用户、主机、密码上次更改、密码有效期、密码过期、帐户锁定;
user #用户
host #主机
password_expired #密码是否过期
password_last_changed #显示用户上次更改密码的时间。
password_lifetime #显示用户的密码有效期(以天为单位)。
account_locked #显示账户是否被锁定。
22、单独设置该账号密码90天过期
ALTER USER 'study'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
23、验证
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;
24、修改账号密码永不过期
ALTER USER 'study'@'localhost' PASSWORD EXPIRE NEVER;
25、验证
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;

26、让此账号使用默认的密码过期全局策略
ALTER USER 'expuser'@'%' PASSWORD EXPIRE DEFAULT;
27、验证
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;
28、查看默认的密码过期全局策略
show variables like 'default_password_lifetime';
set global default_password_lifetime = 90; #设置全局用户密码过期时间90天
29、使 study账号密码立即过期
ALTER USER 'study'@'localhost' PASSWORD EXPIRE;
30、验证
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;

31、退出
quit;
32、登录验证账号过期情况
mysql -ustudy -p
33、刷新验证(未改密码,不允许操作)
flush privileges;
34、修改密码
alter user 'study'@'localhost' identified with mysql_native_password by '123Qwe!!' password expire never;
35、刷新验证
flush privileges;
36、开启用户远程登录,不限制ip(localhost=本机登录,%=所有ip,也可设置IP地址)
rename user 'study'@'localhost' to 'study'@'%';
37、验证
select user, host, password_last_changed, password_lifetime, password_expired,account_locked from mysql.user;
quit; #退出

八、MySQL 8.x主从复制
一、主库配置
MYSQL主从复制环境构建至少需2台服务器,可以配置1主多从,多主多从,此次为1主1从,MYSQL主从复制架构实战步骤:
系统环境准备,分别在两个虚拟机上搭建数据库
Master:192.168.1.209 #主库
Slave:192.168.1.210 #从库
1、登录主库 192.168.63.209
mysql -uroot -p
2、然后在主库创建用户 #如用户已存在,可以执行次命令删除DROP USER '用户名'@'hostIP';
create User 'repl'@'192.168.63.210' Identified With mysql_native_password BY '123Qwe!!' password expire never;
3、授权
grant all privileges on *.* to 'repl'@'192.168.63.210' with grant option;
4、刷新
flush privileges;
5、退出
quit;

6、在主库上配置my.cnf文件
vi my.cnf
.......................................
log_bin=mysqlbinlog
server-id=2
......................................
7、重启数据库
systemctl restart mysqld

8、在从库(192.168.63.210)上远程登录验证
mysql -h192.168.63.209 -urepl -p
9、查看主库的文件
show databases;

10、退出
quit;
11、在从库上配置my.cnf文件
vi my.cnf
.......................................
log_bin=mysqlbinlog
server-id=3
......................................

12、查看配置情况#显示前后两行与行号
grep "log_bin=mysqlbinlog" /etc/my.cnf -nC 2
13、重启数据库
systemctl restart mysqld
14、进入数据库配置文件
cd /etc/my.cnf.d/
15、在主库上全量备份,并查看和记录binlog信息(用1参数备份,使用数据库密码)
mysqldump -uroot -p --all-databases --single-transaction --flush-logs --master-data=1 > /data/all_databases_01.sql
(用2参数备份)
mysqldump -uroot -p --all-databases --single-transaction --flush-logs --master-data=2 > /data/all_databases_02.sql
16、查看参数1(没有注释)参数2(有注释)区别,(在vi中输入:set nu可临时显示行号)
vi /data/all_databases_01.sql 或 sed -n '24p' /data/all_databases_01.sql
vi /data/all_databases_02.sql 或 sed -n '24p' /data/all_databases_02.sql
17、将备份的文件上传到从库服务器(此处使用服务器系统root账号密码)
scp -r /data/all_databases_01.sql root@192.168.63.210:/data/all_databases_01.sql

18、在从库上查看备份文件
ls -la /data
19、在从库上登录mysql
mysql -uroot -p
20、在从库上恢复主库备份文件
source /data/all_databases_01.sql

21检查恢复情况
show databases;
22、退出
quit;
23、查看从库中的文件
awk 'NR==24' /data/all_databases_01.sql
24、进入数据库
mysql -uroot -p
25、从库连接到主库
CHANGE MASTER TO MASTER_HOST='192.168.63.209',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123Qwe!!',MASTER_LOG_FILE='mysqlbinlog.000019',MASTER_LOG_POS=157;
26、开启
start slave;
27、查看状态(注意如果显示启动失败,日志提示主从库uuid相同,请查看uuid情况 cat /var/lib/mysql/auto.cnf文件,修改后请重启mysql数据库)
show slave status\G;

28、登录主库
mysql -uroot -p
29、在主库创建数据库
create database hefang2;
30、查看数据库创建情况
show databases;
31、进入创建的数据库
use hefang2;
32、查看数据库表
show tables;
33、创建名为t2表,并创建两个字段,id、name,varchar表示设置数据长度,用字符来定义长度单位,其中1汉字=2字符=2Bytes;
create table t2 (id varchar(20),name varchar(20));
34、查看数据库表
show tables;

35、向表中插入数据(多创建几条数据)
insert into t2 values ("123","hefang2");
36、查看t2表数据内容;
select * from t2;

37、在从库查看同步情况
show databases;
38、进入创建的数据库
use hefang2;
39、查看t表数据内容;
select * from t2;
40、为保证从库的数据安全,限制写入权限,设置只能只读
set global read_only=1;
41、查看设置情况
show global variables like "%read_only%";

