一、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