我对“MySQL Replication”的理解和实践(一)

本文参考了《MySQL 5.1手册》
http://dev.mysql.com/doc/refman/5.1/en/index.html

 

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。和单项复制相对的是“同步”复制,同步复制是“MySQL簇”的一个特征,有机会研究下“MySQL Cluster”。

 

单项复制的好处

  1. 1.主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器
  2. 2.通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。
  3. 3.使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

 

复制过程及细节

MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上),过程如下

  1. 1.当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句
  2. 2.主服务器创建一个线程将二进制日志中的内容发送到从服务器。 \\该线程为主服务器上SHOW PROCESSLIST命令输出中的“Binlog Dump”线程
  3. 3.从服务器I/O线程读取主服务器“Binlog Dump”线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即“中继日志”。
  4. 4.第3个线程是SQL线程,是从服务器读取中继日志并执行日志中包含的更新。

细节补充

  1. 1.有多个从服务器的主服务器为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O和SQL线程。
  2. 2.中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。SQL线程执行完中继日志中的所有事件并且不再需要之后,立即自动删除它。没有直接的删除中继日志的机制,因为SQL线程可以负责完成。然而,FLUSH LOGS可以循环中继日志,当SQL线程删除日志时会有影响。
  3. 3.“从服务器”在数据目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info。它们包含SHOW SLAVE STATUS语句的输出所显示的信息,状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
  4. 4.由I/O线程更新master.info文件,由SQL线程更新relay-log.info文件
  5. 5.当备份从服务器的数据时,你还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有relay-log.info文件,你可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用Master_Log_File和Master_LOG_POS选项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。当然,要求二进制日志仍然在主服务器上


 

    
 
 
 
 
 

你可能感兴趣的:(mysql,mysql,数据库,职场,Replication,休闲)