mysql主从复制存在的问题:主库宕机后,数据可能丢失,从库只有一个sql Thread,主库写压力大,复制很可能延时。
解决方法: 用半同步复制解决数据丢失的问题
用并行复制解决从库复制延迟的问题。
4. MySQL复制的方法
级联复制:将主库的数据同步到级联库,然后级联库把自己的数据同步到从库上,这样可以减少主库的压力
半同步复制:
默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主库或从库发生故障时,有可能从库没有接收到主库发送过来的binlog日志,这就会造成主库和从库的数据不一致,甚至在恢复时造成数据的丢失。
在开启了半同步复制机制后,主库只有当有任意一台从库已经接收到主库的数据后,告诉主库。主库收到从库同步成功的信息后,才继续后面的操作。
5. 主从延迟产生的原因及解决方案?
-
主库的并发比较高的时候,产生的DDL数量超过了从库的一个sql线程所承受的范围,那么延时就产生了。
-
还有可能是与从库的大型query语句产生的了锁等待 。
-
网络抖动
解决方案:
1)、架构方面
1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。
4.不同业务的mysql物理上放在不同机器,分散压力。
5.使用比主库更好的硬件设备作为slave总结,mysql压力小,延迟自然会变小。
2)、mysql主从同步加速
1、sync_binlog在slave端设置为0
2、–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
3、直接禁用slave端的binlog
6. 判断主从延迟的方法
可以通过命令 show slave status 查看
比如通过seconds_behind_master的值来判断
NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.
0 - 该值为零,是我们极为渴望看到的情况,表示主从复制状态正常
7. MySQL忘记root密码如何找回
-
在配置文件里加上skip-grant-tables ,重启MySQL
-
使用MySQL-uroot -p 进入
-
使用update 修改密码
mysql> USE mysql ;
mysql> UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;
8. MySQL的数据备份方式
工具一 MySQLdump工具备份
工具二: xtrabackup工具备份
备份分为:冷备,温备和热备
根据要备份的数据集合又分为: 完全备份,增量备份和差异备份
需要备份的对象:
-
数据
-
配置文件
-
OS相关的配置文件
-
代码: 存储过程,存储函数和处罚器
-
复制相关的配置
-
二进制日志
数据量比较大的时候用xtrabackup
基于MySQLdump做备份策略: 周日做全备,备份同时滚动日志
周一到周六:备份二进制文件
恢复的时候: 完全备份+二进制文件中到此处的事件
xtrabackup的特点:
-
备份过程快速、可靠;
-
备份过程不会打断正在执行的事务;
-
能够基于压缩等功能节约磁盘空间和流量;
-
自动实现备份检验;
-
还原速度快;
逻辑备份: 类似于select * from 查询满足条件的备份
物理本分: 备份文件+日志文件
所以xtrabackup就是物理备份
MySQLdump就是逻辑备份
9. innodb的特性
一:插入缓冲
二:二次写
三:自适应哈希
四:预读
10. varchar(100) 和varchar(200)的区别
varchar(100)最多存放100个字符,varchar(200)最多存放200个字符,varchar(100)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样
11. MySQL主要的索引类型
普通索引:是最基本的索引,它没有任何限制;
唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysql中MyISAM支持全文索引而InnoDB不支持;
12. 请说出非关系型数据库的典型产品、特点及应用场景?
MongoDB
特点:1.高性能,易部署,易使用。
2.面向集合存储,易存储对象类型的数据。
3.模式自由
4.自动处理碎片,以支持云计算层次的扩展性。
应用场景:
网站数据:mongodb非常适合实时的插入,更新与查询。
缓存:适合作为信息基础设施的缓存层
大尺寸、低价值的数据
高伸缩性的场景
Redis
特点:1.性能极高,能支持超过100k+每秒的读写频率
2.丰富的数据类型
3.所有操作都是原子性的
使用场景:
少量的数据存储,高速读写访问
SQLlite
特点:
1.嵌入式的,零配置,无需安装和管理配置
2.ACID事务
3.存储在单一磁盘文件中的一个完整的数据库。
应用场景:
1.需要数据库的小型桌面软件。
2.需要数据库的手机软件。
3.作为数据容器的应用场景。
13. 如何加强MySQL安全,请给出可行的具体措施?
1.避免直接从互联网访问mysql数据库,确保特定主机才拥有访问权限。
2.定期备份数据库
3.禁用或限制远程访问
在my.cnf文件里设置bind-address指定ip
4.移除test数据库(默认匿名用户可以访问test数据库)
5.禁用local infile
mysql> select load_file(“/etc/passwd”);
在my.cnf里[mysqld]下添加set-variable=local-infile=0
6.移除匿名账户和废弃的账户
7.限制mysql数据库用户的权限
8.移除和禁用.mysql_history文件
14. Binlog工作模式有哪些?各什么特点,企业如何选择?
1.row level行级模式
优点:记录数据详细(每行),主从一致
缺点:占用大量的磁盘空间,降低了磁盘的性能
2.statement level模式(默认)
优点:记录的简单,内容少 ,节约了IO,提高性能 缺点:导致主从不一致
3.MIXED混合模式
结合了statement和row模式的优点,会根据执行的每一条具体的SQL语句来区分对待记录的日志形式。对于函数,触发器,存储过程会自动使用row level模式
企业场景选择:
1.互联网公司使用mysql的功能较少(不用存储过程、触发器、函数),选择默认的statement模式。
2.用到mysql的特殊功能(存储过程、触发器、函数)则选则MIXED模式
3.用到mysql的特殊功能(存储过程、触发器、函数),有希望数据最大化一致则选择row模式。
15. 生产一主多从从库宕机,如何手工恢复?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
[外链图片转存中…(img-e6BkrKRZ-1712517091648)]
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
[外链图片转存中…(img-b4eKwD9z-1712517091648)]
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
[外链图片转存中…(img-32eDzmTC-1712517091649)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!