为什么mysql要做主从复制?
- 让主库负责写,从库负责读,这样即使主库出现了锁表,也可以通过读取从库来保证业务的正常运行。通过这种主从复制来进行读写分离,减轻了主数据库的负载。
- 如果主数据库宕机,可以快速将业务系统切换到从数据库上,避免数据丢失。
- 如果对数据库的读写都在同一个数据库服务器中,那随着业务量越来越大,IO访问频率越来越高,从而导致单机无法满足,所以需要做多库的存储,降低磁盘I/O访问的频率,提高单个机器的IO性能。
主从复制的原理(异步实时的将主库二进制日志(binlog)重做并应用到从库)
- 主数据库的更新事件(update、insert、delete)被写到 binlog 二进制日志文件中。
- 从库发起连接,连接到主库,并请求从binlog二进制日志文件中指定位置之后的日志内容。
- 主库接收到请求后,创建一个 binlog dump thread(binlog 转储线程),把binlog的内容发送到从库。
- 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到 relay log(中继日志)。
- 从库还会创建一个SQL线程,从relay log里面读取内容,从指定位置开始执行读取到的更新事件,将更新内容写入到从数据库。