MySQL 主从复制与读写分离的搭建

一.主从复制概述、

1.1主从复制的用处

在企业网站中,如果对数据库的读和写都在同一个数据库服务器中操作时,会有以下问题:
1.单点故障,服务不可用
2.无法处理大量的并发数据请求
3.数据丢失-大灾难
因此,通过主从复制的方式来同步数据。

1.2主从复制的优点

横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。

作者:运维开发_西瓜甜
链接:https://www.jianshu.com/p/faf0127f1cb2

二.主从复制的搭建

主服务器:masterip:20.0.0.10
从服务器:slave1ip:20.0.0.13
从服务器:slave2ip:20.0.0.12

1.修改服务器配置文件,三台服务器的server-id不能一样
主服务器master

vim /etc/my.cnf
server-id = 1               //指定id号,服务器的唯一标识,不能相同
log-bin=master-bin           //主服务器日志文件
log-slave-updates=true       //从服务器更新二进制日志

在这里插入图片描述
重启服务

systemctl restart mysqld

登录数据库授权

mysql -uroot -pzzz123       # 登录mysql 
grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123';  # 授权
flush privileges;      # 刷新数据库的权限相关表

在这里插入图片描述
在这里插入图片描述

show master status;    # 查看主服务器的状态

红色方框里的内容待会 要在从服务器上用到
在这里插入图片描述

从服务器 slave1

vim /etc/my.cnf
server-id = 2       
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地  
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称

在这里插入图片描述

systemctl restart mysqld     # 重启服务

登录数据库

mysql -uroot -pzzz123
配置同步  change master to master_host='20.0.0.10',master_user='myslave',master_password='123',master_log_file='master-bin.000002',master_log_pos=796

这里的 master-bin.000002 和 master_log_pos=796 就是主服务器状态里的值

启动同步后,查看slave的状态,两个值为yes即可

start slave;  
show slave status\G;        # 查看从服务器状态

在这里插入图片描述
验证是否搭建成功,在主服务器上建立一个数据库,在从服务器上查看

create database zzz;                 #创建
show databases;                  #查看

在这里插入图片描述
在从服务器上查看
在这里插入图片描述

三:案例实施读写分离

在数据库中为amoeba中授权

grant all privileges on *.* to 'test'@'20.0.0.%' identified by '123123';
show grants for test@'20.0.0.%';
flush privileges;

3.2在amoeba服务器上安装JDK

tar zxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91/ /usr/local/java
vi /etc/profile
export JAVA_HOME=/usr/local/java     #末尾添加
export JRE_HOME=/usr/local/java/jre
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$JAVA_HOME/bin:$AMOEBA_HOME/bin

在这里插入图片描述

3.3在amoeba服务器上安装amoeba

unzip amoeba-mysql-3.0.5-RC-distribution.zip
mv amoeba-mysql-3.0.5-RC /usr/local/amoeba
chmod -R 755 /usr/local/amoeba/
vi /usr/local/amoeba/jvm.properties
#JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPerSize=96m"     #32行添加
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k"
cd /usr/local/amoeba/bin/
./launcher
netstat -anpt | grep 8066

在这里插入图片描述

3.4修改amoeba配置文件

vi /usr/local/amoeba/conf/amoeba.xml

<property name="user">test</property>   #28行修改
<property name="password">123456</property>          #30行修改
......
</property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<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>
</queryRouter>
vi /usr/local/amoeba/conf/dbServers.xml
......
<property name="user">test</property>     #26行修改
<property name="password">abc123</property>     #28行修改
 ......
         <dbServer name="master"  parent="abstractServer">    #修改部分参数
                 <factoryConfig>
                         <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.10</property>
                 </factoryConfig>
         </dbServer>

         <dbServer name="slave1"  parent="abstractServer">
                 <factoryConfig>
               <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.11</property>
                 </factoryConfig>
         </dbServer>

         <dbServer name="slave2"  parent="abstractServer">
                 <factoryConfig>
                         <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.12</property>
                 </factoryConfig>
         </dbServer>


        <dbServer name="slaves" virtual="true">
               <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                         <property name="loadbalance">1</property>

                        <!-- Separated by commas,such as: server1,server2,server1 -->
                         <property name="poolNames">slave1,slave2</property>
               </poolConfig>
        </dbServer>

amoeba.xml配置文件修改
在这里插入图片描述在这里插入图片描述dbServers.xml配置文件修改

在这里插入图片描述
在这里插入图片描述
检测查询端口是否开启

/usr/local/amoeba/bin/launcher
netstat -anpt | grep 8066

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值