主从复制与读写分离
一、数据库主从复制
主从复制就是MySQL主服务器和MySQL从服务器进行数据同步(从服务器同步主服务器的数据)
原理:1.Master在每个事务更新数据完成前,在二进制日志中记录这些变化,写入二进制文件完成后通知存储引擎提交事务
2.Slave从服务器将Master的Binary log复制到其中继日志,开启一个I/O线程,在Master主服务器上建立一个普通连接,从Master主服务器的二进制日志上读取事件,并记录到自己的中继日志上(会不断等待随着主服务器更新)
3.SQL slave thread(SQL从线程)从中继日志上读取事件,重放这些事件,实现与Master主服务器同步
主从复制配置
1.实现主从服务器时间同步,3台服务器上安装mysql(查看之前的mysql安装笔记)
2.主服务器配置
配置修改mysql配置文件(记得重启mysql服务):vim /etc/my.cnf
给从服务器授权
grant replication slave on *.* to 'myslave'@'192.168.0.%' identified by '123456';
3.配置Slave从服务器(两台从服务器一致)
配置修改mysql配置文件(记得重启mysql服务):vim /etc/my.cnf
登录数据库:mysql -uroot -p123456
同步Master主服务器(同步之后记得重启数据库):
mysql>change master to master_host='192.168.0.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=572;
master_log_file:Master主服务器二进制日志名
master_log_pos:二进制日志位置变量
查看master_log_file和master_log_pos的值(在主服务器上查看,下图所示)
mysql> show master status;
补充:master_log_pos设置为0会自动获取master_log_pos的值
查看数据同步Slave的状态(下图所示)
mysql> show slave status\G
确保红线圈起来的两个值都是Yes
4.测试
在Master主服务器上创建一个库创建一个表添加数据,在从服务器上查看是否同步
Master主服务器:
Slave从服务器:
测试数据同步成功
二、数据库读写分离
读写分离离不开主从复制,是要在主从复制的基础上进行
好处:可以减轻缓解主服务器的工作压力
实现读写分离的两款软件:Amoeba和MySQL-Proxy
配置环境如下图所示
Amoeba配置安装
Amoeba需要JDK的支持,是基于jdk1.5开发,建议最好使用jdk1.5或jdk1.6的版本
1.下载安装jdk
./jdk-6u14-linux-x64.bin
2.创建文件夹,把解压出来的文件移动到/usr/local/jdk1.6下
mkdir /usr/local/jdk1.6》mv jdk1.6.0_14 /usr/local/jdk1.6
3.在/etc/profile文件里配置添加环境变量,运行该文件
vim /etc/profile
然后source /etc/profile
4.安装amoeba
解压到新建的amoeba文件夹下给予权限
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
启动(显示下图结果为安装成功)
5.三台数据库服务器上给予授权
mysql>grant all on *.* to test@'192.168.0.%' identified by '123456';
6.配置amoeba.xml配置文件
vim /usr/local/amoeba/conf/amoeba.xml
7.配置dbServers.xml配置文件
vim /usr/local/amoeba/conf/dbServers.xml
8.启动服务测试
/usr/local/amoeba/bin/amoeba start
测试在测试机上登录数据库
测试读写分离功能
Master主服务器创建一个库关闭两个Slave从服务器的slave功能,然后对两个从服务器写入不同的数据,去查看这个数据看是否实现读从服务器的功能,再写入数据,测试机会查询不到这条消息,因为关闭了slave从服务器的slave功能,没有同步
从服务器192.168.0.103
从服务器192.168.0.104
Master主服务器192.168.0.101
测试机测试
发现只能查询两个从服务器上的数据,只有在主服务器本机才能查询本机上的数据则成功
MySQL-Proxy安装与配置(源码包安装)
1.下载解压安装包
tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
2.创建存放配置文件和日志的目录
cd /usr/local/mysql-proxy》mkdir logs》mkdir conf
3.创建修改配置文件和启动脚本
vim /usr/local/mysql-proxy/conf/mysql-proxy.conf
[mysql-proxy]
user=root
proxy-address=0.0.0.0:3306 \\所有IP的3306端口
proxy-backend-addresses=192.168.0.101:3306 \\设置master的ip,写数据
proxy-read-only-backend-addresses=192.168.0.103:3306 \\设置slave的ip,读数据
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \\脚本所在位置
log-file=/usr/local/mysql-proxy/logs/msyql-proxy.log \\日志存放位置
log-level=debug \\日志模式
daemon=true \\打入后台
keepalive=true
4.修改管理进程的脚本
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 1,
max_idle_connections = 2,
5.设置配置文件权限并启动服务
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
6.查看端口并测试
netstat -antlp | grep mysql-proxy
登录数据库读写操作测试