Ubuntu下Nginx做负载实现高性能WEB服务器5---MySQL主主同步

一、MySQL复制概述

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器上已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器定位到从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

二、复制实现细节

MySQL使用3个线程来执行复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程执行更新的远远滞后。

相关阅读:

三、MySQL建立主主服务器配置方法

A、环境描述

服务器A(主) 192.168.1.9

服务器B(从) 192.168.1.10

Mysql版本:5.1.61

System OS:ubuntu 10.10 X86

主主需同步的数据库内容保持一致。

B、主主配置过程

创建同步用户

在主服务器上为从服务器建立一个连接帐户,该帐户必须授予REPLICAITON SLAVE权限。

这里服务器A和服务器B互为主从,所以都要分别建立一个同步用户。

服务器A和B:

grant replication slave on *.* to 'replication'@'192.168.1.%' identified by 'mysqlsync';  


flush privileges;  

        修改mysql配置文件:vim /etc/mysql/my.cnf

        服务器A:

#mysql replication  



server-id = 1 




log_bin = /var/log/mysql/mysql-bin.log  




master-host = 192.168.1.10  




master-user = replication 




master-password = mysqlsync 




master-port = 3306 




master-connect-retry = 60 




binlog-do-db = movie 




binlog-ignore-db = mysql 




binlog-ignore-db = information_schema 




binlog-ignore-db = phpmyadmin 




replicate-do-db = movie 




replicate-ignore-db = mysql,information_schema 

        服务器B:

#mysql replication  



server-id = 2 




log_bin = /var/log/mysql/mysql-bin.log  




master-host = 192.168.1.9  




master-user = replication 




master-password = mysqlsync 




master-port = 3306 




master-connect-retry = 60 




binlog-do-db = movie 




binlog-ignore-db = mysql 




binlog-ignore-db = information_schema 




binlog-ignore-db = phpmyadmin 




replicate-do-db = movie 




replicate-ignore-db = mysql,information_schema 

        分别在A和B上重启mysql

/etc/init.d/mysql restart 

相关推荐