mysql的读写分离

一、mysql主从复制读写分离
1、mysql主从复制的作用和特点
1】mysql主从复制的作用
保证mysql数据的可靠性和稳定性
避免单点故障
2】mysql主从复制特点
可靠性强 稳定性强 避免数据丢失
3】mysql主从复制的原理
主数据库开启二进制日志 允许日志复制
备份mysql监听主mysql日志变化 复制主日志到本地读取并应用日志中的操作
保证和猪mysql数据实现同步

2、读写分离
1】读写分离的作用
支持高并发
加快用户读取和写入速度
2】读写分离的原理
客户端访问代理程序 代理程序判断用户是读取还是写入数据
用户写入数据代理服务器将任务转发向主mysql服务器
用户读取数据代理服务器将任务转发向从mysql服务器
实现读取和写入分离

3、mysql代理程序
1】mysql-proxy
mysql官方提供的读写分离工具
mysql-proxy工作在客户端和服务器端之间
mysql-proxy判断用户是写入还是读取数据
需要二次开发
使用比较复杂
2】amoba
简称变形虫
amoeba使用java语言编写
修改配置文件监控主mysql个识别用户读取和写入并做转发
不需要二次开发
使用简单 灵活

今天用到五台虚拟机三台MySQL一台amoeba和一台客户端 其中mysql为一主二从

二、配置mysql主从复制

1、安装ntp服务器
1】安装ntp服务器
[root@centos01 ~]# yum -y install ntp

2】配置ntp服务器
[root@centos01 ~]# vim /etc/ntp.conf 
17 restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
 18 server 127.127.1.0
 19 fudge 127.127.1.0 stratum 8

3】启动服务
[root@centos01 ~]# systemctl start ntpd
[root@centos01 ~]# systemctl enable ntpd

由于是用二进制日志实现的所以时间必须一直

4】客户端同步时间
[root@centos ~]# ntpdate 192.168.100.10

2、配置主mysql服务器和从mysql服务

1】配置主mysql服务器
[root@centos01 ~]# vim /etc/my.cnf
 49 log-bin=mysql-bin	//开启二进制日志
 50 server-id       = 10	//指定服务器id
 51 log-slave-update= true	//开启日志复制功能
3】修改从mysql
[root@centos01 ~]# vim /etc/my.cnf
server-id       = 20		//指定id
relay-log = relay-log-bin	//读取主日主
relay-log-index=slave-relay-bin.index	//读取日志内容

3、配置主从复制

1】配置主mysql服务器授权指定账户复制数据 复制账户时slave密码pwd@123
mysql> grant replication slave on *.* to 'slave'@'192.168.100.%' identified by 'pwd@123';

2】查看主mysql日志id
mysql> show master status;
3】配置从mysql复制主mysql数据库数据
mysql> change master to master_host='192.168.100.10',master_user='slave',master_password='pwd@123',master_log_file='mysql-bin.000005',master_log_pos=263;
这个日志编号和名称一定不要错
4】启动从mysql
mysql> start slave;
5】查看slave状态
mysql> show slave status\G;

二、配置读写分离
1、修改计算机的host文件

[root@centos01 ~]# vim /etc/hosts
192.168.100.10 master
192.168.100.20 slave01
192.168.100.30 slave02
192.168.100.40 amoeba

2、配置安装amoeba

1】指定amoeba按装目录
[root@centos04 ~]# tar zxvf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
2】安装jdk
[root@centos04 src]# ./jdk-6u14-linux-x64.bin 
[root@centos04 src]# mv jdk1.6.0_14/ /usr/local/jdk
3】配置环境变量
[root@centos04 src]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:/$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin/
export AMOEBA=/usr/local/amoeba
export PATH=$PATH:$AMOEBA/bin
~                                
4】更新变量
[root@centos04 src]# chmod +x /etc/profile.d/java.sh 
[root@centos04 src]# source /etc/profile.d/java.sh 

3、配置授权读写分离账户这个在主mysql进行

mysql> grant all on *.* to 'test'@'192.168.100.%' identified by 'pwd@123';

4、修改amoeba配置文件
1】配置访问amoeba账户和密码

[root@centos04 src]# vim /usr/local/amoeba/conf/amoeba.xml 
11              <property name="port">8066</property>		//端口号
 30            <property name="user">root</property>		//访问amoeba账户
 32           <property name="password"></property>		//密码
	(此账户不需要mysql授权他用户访问此账户 会自动转换为授权的账户)
              
<property name="LRUMapSize">1500</property>
                <property name="defaultPool">master</property>

                <property name="writePool">master</property>
                <property name="readPool">slaves</property>
                <property name="needParse">true</property>

2】配置amoeba配置文件访问mysql数据

25         <!-- mysql user -->
 26         <property name="user">test</property>	//mysql授权的账户
 27          <property name="password">pwd@123</property>	//密码
42         <dbServer name="master"  parent="abstractServer"> 主mysql计算机名
 43                 <factoryConfig>
 44                         <!-- mysql ip -->
 45                         <property name="ipAddress">192.168.100.10</property>  //地址
 46                 </factoryConfig>	
 47         </dbServer>
 48 
 49         <dbServer name="slave01"  parent="abstractServer">	//第一个从mysql
 50                 <factoryConfig>
 51                         <!-- mysql ip -->
 52                         <property name="ipAddress">192.168.100.20</property> //ip
 53                 </factoryConfig>
 54         </dbServer>
 55         <dbServer name="slave02"  parent="abstractServer">
 56                 <factoryConfig>
 57                         <!-- mysql ip -->
 58                         <property name="ipAddress">192.168.100.30</property>
 59                 </factoryConfig> 60         </dbServer>     
 61 
 62         <dbServer name="slaves" virtual="true">    		//改名
 63                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
 64                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--
    > 65                         <property name="loadbalance">1</property>
 66 
 67                         <!-- Separated by commas,such as: server1,server2,server1 -->
 68                         <property name="poolNames">slave01,slave02</property>
 69                 </poolConfig>		      //添加两台从服务器名
 70         </dbServer>

最后启动服务

启动amoeba
[root@centos04 src]# /usr/local/amoeba/bin/amoeba start&

然后就可以验证啦

测试机验证:
[root@centos05 ~]# yum -y install mariadb.x86_64 
[root@centos05 ~]# mysql -uamoeba -ppwd@123 -h 192.168.100.40 -P8066

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值