一、mysqlAB 复制

1、简介

Advanced Backup Replication


是一种数据复制技术,是mysql数据库提供的一种高可用、高性能的解决方案



AB复制的模式:


一主一从; 一主多从,双主,多主多从



单向复制的优点:


有力于健壮性、速度、便于管理。


2、AB复制的工作原理:

1) 首先先启动master的二进制日志


2) slave start开始,slave通过I/O线程方式向master索要二进制日志文件,


   slave要知道从哪个位置开始要


3) master接收到slave的请求之后,就会从相应的位置开始给slave传送日志


4) slave接收到日志后,会写入本地的中继日志中


5) slave通过sql线程读取中继日志的内容,在数据库中执行相应的操作,



到此为止,master与slave上的数据就一致了。


之后进入等待状态,等待后续的更新



3、主从服务器上相关的线程



1) 从服务器


I/O线程: 负责从主服务器所要二进制日志,并存放在从服务器的中继日志中


sql线程: 负责读取从服务器的中继日志,并对数据库做相应指令操作



2) 主服务器


binlog dump线程: 负责发送二进制日志



====================================================



4、安装配置流程

安装环境:



使用tar包编译安装mysql5.5



master: 172.16.254.71/16


slave: 172.16.254.72/16



具体配置

===master===



* 编辑配置文件

#vi /etc/my.cnf 

 ---------------------- 

  53 binlog_format=mixed 

  58 server-id       = 1 

  59 skip-name-resolve 

 ----------------------

* 重启服务


#service mysqld restart



*设置授权


mysql> grant replication slave,reload,super on *.* to slave@172.16.254.72 identified by '123456';


mysql> flush privileges;



* 做一次全库备份


mysql> flush tables with read lock;   


# mysqldump -uroot --all-databases > /tmp/all.sql  全库备份



* 备份拷贝到slave


#scp /tmp/all.sql 172.16.254.72:/tmp



===slave===



* 修改配置文件



#vi /etc/my.cnf 

 ---------------------- 

  58 server-id       = 2 

  59 relay_log = mysql-relay 

  60 relay_log_index = mysql-relay.index 

  61 skip-name-resolve 

 ---------------------- 

 #service mysqld restart

* 恢复数据库(来自与master的备份文件)


# mysql -u root < /tmp/all.sql




=================================================


*在master上查看二进制日志信息




mysql> show master status; 

 +------------------+----------+--------------+------------------+ 

 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

 +------------------+----------+--------------+------------------+ 

 | mysql-bin.000006 |      346 |              |                  | 

 +------------------+----------+--------------+------------------+ 

 1 row in set (0.00 sec)

*在slave上同步数据,告知master从哪里开始

mysql> reset slave;

mysql> change master to master_host="172.16.254.71",master_port=3306,master_user="slave",master_password="123456",master_log_file="mysql-bin.000006",master_log_pos=346;




mysql> slave start; 


 mysql> show slave status\G 


              Slave_IO_Running: Yes 

             Slave_SQL_Running: Yes 



* 主服务器解锁
 mysql> unlock tables;

在主服务器上创建一个数据库,创建一个表,添加一行内容


在从服务器看是否已经同步

5、抓包测试

#tcpdump -i eth0 tcp port 3306



===mysql-proxy===



1、概述

mysql-proxy: 172.16.254.70/16
 mysql-master: 172.16.254.71/16 

 mysql-slave: 172.16.254.72/16 


 ftp://172.16.254.101/mysql 


 mysql-proxy-0.8.1-1.el6.x86_64.rpm   

 rw-splitting.lua


2、安装流程

===proxy===
 # rpm -ivh mysql-proxy-0.8.1-1.el6.x86_64.rpm 

 # cp rw-splitting.lua /usr/share/doc/mysql-proxy-0.8.1/examples/ 


 +-------------+ 

 | mysql-proxy |--------+-----Master(RW) 

 +-------------+        | 

                        +-----Slave(R) 


 # vi /etc/sysconfig/mysql-proxy 

 ---------------------- 

 PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog -b 172.16.254.71 -r 172.16.254.72 -s /usr/share/doc/mysql-proxy-0.8.1/examples/rw-splitting.lua -P 0.0.0.0:3306" 

 ---------------------- 


 ===============

Master/Slave的授权操作


---master--- 

 mysql> grant all on *.* to proxy@'%' identified by 'proxy'; 



 ---mysql-proxy--- 

 # mysql -h 172.16.254.71 -u proxy -pproxy 

 # mysql -h 172.16.254.72 -u proxy -pproxy 



 # service mysql-proxy start 


 # mysql -h 172.16.254.70 -u proxy -pproxy


链接proxy以后,做创建数据库,创建表,插入值。


分别在master和slave上执行一下命令,监听读写情况



#tcpdump -i eth0 tcp port 3306






===================附加内容======================

在slave上修改/etc/my.cnf文件,添加
server-id=2 //从库ID号,和主库区别开 (注意这一行的注释去掉,不然mysql起不来,可看日志)
master-host=172.16.254.71 //指定主库IP地址
master-user=slave //指定授权的用户名
master-password=123456 //指定授权用户的密码
replicate-do-db=test //要同步的数据库
replicate-ignore-db=mysql //忽略mysql数据库的同步