请说明在复制拓扑中,中继日志集和从属服务器状态日志的作用。
中继日志用来保存从主服务器接受的二进制日志,与二进制日志相同的格式存储,由服务器自动管理,在其全部内容重放后会自动删除。
从属服务器状态日志存储关于如何连接到主服务器的信息以及主服务器的二进制日志和从属服务器的中继日志的最近复制的日志坐标信息。
中继日志集和从属服务器状态日志对于保证数据库复制时的数据一致性非常重要。
使用日志坐标进行故障转移与使用GTID进行故障转移时各自有哪些注意事项?
使用日志坐标执行故障转移时,如果新主服务器位于特定从属服务器的后面(即,如果该从属服务器已经应用了该新主服务器的日志末尾的事件),则该从属服务器会重复那些事件。如果新主服务器在特定从属服务器的前面(即,如果该新主服务器的二进制日志包含该从属服务器尚未应用的事件),该从属服务器将跳过那些事件。这些情况都应该谨慎处理以防止数据的不一致。
虽然GTID可以防止源自单个服务器上的事件重复,但是在复杂拓扑比如循环和多源拓扑中,GTID不会防止源自不同服务器上的冲突操作,因此,在故障转移后将应用程序重新连接到服务器时,必须小心检查,不要产生此类冲突。
请详细描述在复制拓扑中参与复制的线程类型以及各自所承担的功能。
当从属服务器连接到主服务器时,在主服务器上会创建Binlog转储线程,在从属服务器上会默认创建I/O线程和SQL线程。
Binlog转储线程用于从二进制日志读取事件并将其发送到从属服务器的I/O线程。
I/O线程从主服务器的Binlog转储线程读取事件并将其写入从属服务器的中继日志。
SQL(或应用)线程在单线程从属服务器上应用中继日志事件,在多线程从属服务器上分配协调工作者线程应用中继日志文件。