keepalive原理+redis+mysql

keepalive的故障切换原理

keepalive对负载均衡集群可以实现高可用
主机与备机共用一个vip的情况下,当主机宕机时,通过VRRP协议连接的心跳检测会中断,当超过限定时间后备机则判定主机挂掉,此时主机的ip和资源漂移到备机上,接替主机工作,当主机恢复后,备机再将ip和资源漂移到主机上,等待下次接替,来实现高可用

redis+哨兵模式工作原理

1、多个sentinel发现并确认master有问题
2、选举出一个sentinel作为领导
3、选出一个slave作为master
4、通知其余slave成为新的master的slave
5、通知客户端主从变化
6、等待老的master复活成为新master的slave
sentinel的任务:
监控: Sentinel 会通过ping指令不断地检查你的主服务器和从服务器是否运作正常。
提醒: 当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移:新的master会替换掉旧的master,等旧的master复活后加入slave

redis持久化存储方式

RDB方式原理:当redis需要做持久化时(执行SAVA或者BGSAVA命令,或者是达到配置条件时执行),redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中,当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb)【细节】

一句话总结:在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上

AOF方式原理:AOF可以做到全程持久化,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中,当Redis重启时,将会读取AOF文件进行“重放”以恢复到Redis关闭前的最后时刻。由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。【细节】

一句话总结:将redis执行过的所有写指令记录下来,在下次redis重新启动时,将指令从前到后再重复执行一遍,实现数据恢复

redis主从同步原理

从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。

集群:主做读写,从做读,主从异步,只有从开启持久化

mysql主从复制(AB复制)原理

1、主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
2、从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
3、从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍

mysql实战

用户
创建用户

create user '用户名'@'客户端来源IP地址' identified by '密码';

删除用户

drop user '用户名'@'客户端来源IP地址';

修改用户

rename user '用户名'@'客户端来源IP地址' to '新用户名'@'客户端来源IP地址' ;

修改密码

alter user '用户名'@'客户端来源IP地址' identified by '新密码';

忘记密码

update mysql.user SET authentication_string=password('QFedu123!') WHERE user='root' and host='localhost';

授权:
查看授权信息

show grants for '用户'@'客户端来源IP地址';  

权限管理

grant  权限 on 数据库.表  to  '用户'@'客户端来源IP地址' identified by '密码';   -- 授权并设置密码
revoke 权限 on 数据库.表 from '用户'@'客户端来源IP地址'    -- 取消权限

所有库和表

select * from mysql.user where user='shark'\G

单库【mysql.db】

select * from mysql.db  where user='shark'\G

单表【mysql.tables_priv】

select * from mysql.tables_priv where user='shark'\G

权限
all privileges 除grant外的所有权限
select 仅查权限
select,insert 查和插入权限

Example
1、

	create user 'shark'@'%';
	grant all privileges on *.*  to 'shark'@'%' identified by '123';

2、

grant select on *.*     /*设置查询数据的权限在所有的库和表*/
 to 'shark_2'@"%"       /*指定用户名和来源 ip*/
 identified by '123';   /*设置密码*/


创建:

create database 库名

删除:

drop database 库名

修改:

alter database 库名

使用:

use 库名

查看:

show database 库名
  ···查看当前库:select database();

创建表结构:

idnameagephone
create table class (
  id int  not null auto_increment,
  name varchar(10) ,
    age int ,
  phone char(11) ,
  primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 

增:
insert into 表 (列名,列名…) values (值,值,值…),(值,值,值…)

idnameagephone
1王麻子3213141098899
2九筒3213721096541
3六子1813139192657
4马邦德3715855996688
insert into student (name, age, phone) values('王麻子', 32, '13141098899');

insert into student (
    id,name, age, phone
) values(
    2,'九筒', 32, '13721096541'),
    (3,'六子', 18, '13139192657'),
    (4,'马邦德', 37, '15855996688');

删:

delete from 表名 where id = 数字;

改:

update 表名 set 字段名1=值表达式1,字段名2=值表达式2,....[where条件] [order排序] [limit限定];

查:
分组

select age,id from 表  where id > 10 group by age,id order by id desc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值