数据库面试题
1.binlog的3种格式,类型对比 statement,row,mixed 是二进制的
set session binlog_format='statement'; show variables like 'binlog_format';
show master status;
show binlog events in 'mysql-bin.000002';
查看生成的binlog内容
mysqlbinlog -vv D:\program_files\phpstudy\PHPTutorial\MySQL\binlog\mysql-bin.000002 --start-position=5083
statement类型
选择不同的索引,会导致结果不同
now()等和当时环境有关的函数时,也会造成数据的不一致
row类型
binlog_row_image参数需要设置为full,不然不会记录所有字段信息,只会记录能够表示一行的字段,从而导致无法使用其进行数据恢复
优点:在row模式下,bin-log中可以不记录执行的sql语句的上下文相关信息,仅仅需要记录哪一条记录被修改了,修改成什么信样了,
所以row的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现在某些特定情况下的存储过程和function,以及trigger的调用和处罚无法被正确问题。
缺点:在row模式下,所有执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容。
2.redis的备份方式
RDB恢复大数据集速度快,它是一个整体。大文件rdb耗时。时间间隔长的话丢失数据多。
AOF的fsync策略有一秒,每次,无。默认是一秒,所以最坏情况下丢失一秒的数据。文件体积变得过大时,自动地在后台对 AOF 进行重写。相同的数据集aof通常大于rdb,rdb恢复数据集比aof快
3.eureka和zookeeper
往zookeeper的leader节点写数据时,leader会对剩下的follower节点进行主从数据同步,它必须得同步超过半数的follower节点才给客户端返回写成功的信号
leader节点挂了,zookeeper集群在剩的follower中重新选leader。选需要时间,哪怕30s到120秒,这一段时间之内,zookeeper集群是不能给外部提供服务的
所以zookeeper是cp(保证了数据一致性,但是却不是强一致性)
Eureka的客户端向Eureka注册连接失败,会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性),所以是ap
4.nacos和eureka的区别
-
eureka只支持AP,通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性
-
nacos支持CP和AP两种,注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP
- #false为永久实例,true表示临时实例开启,注册为临时实例 spring.cloud.nacos.discovery.ephemeral=true
- nacs使用的是netty和服务直接进行连接,属于长连接
- eureka是使用定时发送和服务进行联系,属于短连接