简介
由于在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需要,此时数据库集群就很好地解决了这个问题。采用MySQL分布式集群,能搞搭建一个高并发、负载均衡的集群服务器。但是,如果保证这些服务器之间数据与数据的完整性呢?MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。
下图是一个多个数据库主从复制的模型(图片来自网络)
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化。业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各个从服务器上进行。
主从复制的原理
MySQL主从复制需要三个线程:master(binlog dump thread)、slave(I/O thread、SQL thread)
master(主服务器):主服务器中使用的是 dump thread线程
。当主库中有数据更新时,主库就会根据设置的binlog格式,将更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump
线程通知slave(从服务器)有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给从服务器的IO线程。
slave(从服务器):从服务器中使用I/O线程、SQL thread.
- I/O线程:该线程会连接到主数据库上,向log dump请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日志一样也是记录了数据更新的事件,它也是按照递增后缀名的方式,产生多个relay log文件,slave会使用一个index文件来追踪当前正在使用的relay log文件。
- SQL线程:该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步,此外,如果一个relay log文件中的全部事件都执行完毕,那么SQL线程会自动将relay log文件删除掉。
下图是整个过程的原理图: