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