MySQL AB复制&mysql-proxy读写分离

来源:互联网 发布:linux尝试其他镜像 编辑:程序博客网 时间:2024/05/18 13:07

一、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数据库的同步


0 0