MySQL主从复制我学废了
作者:互联网
MySQL主从复制
数据库
数据库 DB: 内存,CPU,磁盘,带宽 这几个方面影响性能。那优化点在哪?
不要上来就说 不要使用 select* 要选择性的添加索引之类的
- 可以先说一下监控SQL 看它的执行时间 (SQL Server Profiler)
- 查看数据库连接 怎么查
- 数据库设计之初,索引怎么选择
- SQL语句的优化
- 设置MySQL的参数
- 分布式集群如何设计
主从复制
一个数据库不是很好么,为什么会涉及到主从复制
- 如果一台数据库达到性能的瓶颈,那就要考虑,把请求做一个负载(代理层)所有请求转发到代理层,由代理层来分发,到底用哪个DB去查,那么这么多DB是否要保持数据一致呢?(根据业务)
如果要做读写分离:那就有一台专门是写 其余负责读。数据要保持一致,要想数据一致,那就要主从复制。
如何实现主从复制
- master将DML1操作语句记录在binlog日志中
- slave开启两个线程 一个IO thread 一个 SQL thread,其中IO 线程负责读取master的binlog内容,写到中继日志relay log里;SQL线程读取relay log的内容,并更新到slave的数据库中。这样就保证了主从数据一致了
- MySQL复制至少需要两个MySQL的服务,MySQL服务也可以分布在不同的服务器上。也可以在一台
通俗点说:
第一台db叫master 第二台叫slave。主从复制时,操作对象都是master,会有DML1操作(客户端发送sql语句时),在DML操作时一定会保留日志(就是binlog),有个线程IO Thread
,传给slave(要不要持久化存储?要 通过中继日志 relay log), slave和master保持一致,需要将relay log进行重放执行操作(sql thread),根据日志进行恢复
网上有一个很清晰的流程图
主从延迟怎么处理
- mysql集群
数据库持久化的两种实现方式
- 快照
- 日志
MySQL持久化方式
- MySQL快照 : MySQL的dump工具,可以将数据导出为.sql文件,通过这个sql文件,可以作数据恢复。
- Mysql的binlog
Redis持久化方式
- RDB持久化 :将Redis在内存中的数据库记录定时dump到磁盘上的RDB持久化
- AOF(append only file)持久化 :将Redis的操作日志以追加的方式写入文件
线程和进程区别
- 进程-资源分配的最小单位
- 线程-程序执行的最小单位
mysql存在几种日志
- binlog 二进制日志文件,需要手动开启,归属于mysql服务 用于记录用户对数据库操作的SQL语句 除了数据查询语句
- undo log,归属于innodb存储引擎的
- redo log,归属于innodb存储引擎的
还有慢查询日志,错误日志,mysql执行日志,不管是mysam或者innodb共用的都是binlog
标签:主从复制,持久,数据库,我学,线程,MySQL,日志 来源: https://blog.csdn.net/jerryvd/article/details/110679156