image.png
    在状态1中,客户端的读写都是访问的节点A,节点B是A的备库,节点B会将节点A上所有的更新同步过来,到节点B上执行,从而实现节点A和节点B上的数据相同。
    发生主备切换之后,节点A就成了备库,节点B就成了主库,在切换之后,客户端读写访问的都是节点B,节点A会把节点B上发生的更新同步过来。
    在状态1中,我们可以看到节点B是没有被直接访问的,但是我们还是最好把节点B,也就是备库设置为只读模式,怎么把一个数据库设置成只读模式?为什么要把一个不会被访问到的数据库设置为只读模式呢?
    假如我们设计了一个网页来给运维提供相关信息,在搜集这些信息的过程中,可能需要执行一些查询语句,这些查询语句有时候会放到备库上来查,所以备库有时候还是会被访问的,如果我们把备库设置为只读模式,就可以防止对备库的误操作。
    如果我们把备库设置为只读模式,那么就可以通过readonly选项的值来判断它是主库还是备库了。
    如果我们把备库设置为只读模式了,那么备库还怎么和主库保持数据一致呢?
    readonly设置对于拥有超级权限的用户来说是无效的,而进行同步更新的线程刚好就拥有超级权限,所以把readonly设置成何值并不影响备库同步主库的数据。
    一个update语句在主库上执行,然后同步到备库上的详细过程是什么样的?
    image.png