MySQL 读写分离

准备环境

先准备三台虚拟机做主从复制

关闭防火墙

主从复制

要求一主两从

(主) 192.168.1.110

(从1) 192.168.1.122

(从2) 192.168.1.125

三台虚拟机都要安装mariadb

命令:yum -y install mariadb mariadb-server

 

编辑主配置文件

vim /etc/my.cnf

写入一下内容

server-id=1  编号
log-bin=mysql-binlog   启动日志
log-slave-updates=true  开启主从复制

随后重启:systemctl restart mariadb
    

(主)

 

(从1)

 

(从2)

 

登录MySQL

命令:MySQL -uroot -p 

创建用户

grant replication slave on *.* to 'cjf'@'192.168.1.%' identified by '123456';

用户名:cjf  密码:123456

  

授予用户权限

命令:grant replication slave on *.* to 'cjf'@'192.168.1.%';

刷新

命令:flush privileges;

 

使用从服务器验证

(从1)

命令:mysql -ucjf -p123456 -h 192.168.1.110

(从2)

 

在主库上获取当前正在写入的二进制日志文件名和位置信息:

命令:show master status

 

从1  从2 服务器都写入

CHANGE MASTER TO

  MASTER_HOST='192.168.1.110',(ip地址)

  MASTER_USER='cjf',(用户名)

  MASTER_PASSWORD='123456',(密码)

  MASTER_LOG_FILE='mysql-binlog.000003',(名字)

  MASTER_LOG_POS=674;(位置)

 

从1 、从2

输入命令:start slave;启动从服务器复制.

此时,从库将开始连接主库,并复制主库上的数据。当主从同步顺利进行时,执行以下命令可查看主从复制状态:

命令:show slave status\G; 

两个yes表示成功

 

验证:

主库

使用 show databases 查看 主服务器数据库此刻的数据表

 

使用 show databases 查看 从服务器数据库此刻的数据表

 

在主服务器上使用命令:create database a; 创建a数据表

 

从库就会自动复制主库内容

 

amoeba服务

概念:

基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库

只在主服务器上写,只在从服务器上读
登录amoeba服务,他本身连接主和从数据库,根据操作不同调用相应数据库,和负载均衡相似


至少五台主机

一台主数据库           192.168.1.110

两台以上从数据库    192.168.1.122    192.168.1.125

一台maoeba服务器  192.168.1.135

一个客户端               192.168.1.140


负载均衡,高可用性,SQL过滤,读写分离


端口8066

安装java环境

做以下步骤之前需要把原本的java删掉

命令: rm -rf /usr/bin/java

安装jdk 需要降jdk版本

把准备好的jdk包安装到虚拟机

 

做到这一步敲回车

 

ls 查看jdk已经出来了

 

把jdk移动到 /usr/local/下起名为 jdk1.6(1.6代表版本)

命令: mv jdk1.6.0_31/ /usr/local/jdk1.6

打开jdk 变量

vim /etc/profile

并添加以下内容(意思大概就是告诉系统你这个软件在哪)

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

输入命令:source /etc/profile

source 此命令是让文件生效

 

输入:Java -version

查看Java版本是否为1.6了

 

然后给其执行权限

命令:chmod +x jdk1.6

 

下一步安装amoeba

首先创建amoeba路径目录

mkdir /usr/local/amoeba

 输入rz打开窗口找到amoeba的包点击打开

然后解压

解压到刚才创建的目录当中去

 tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

然后给其755的权限

递归把它目录的权限改成755

 chmod -R 755 /usr/local/amoeba/

给完权限之后主从服务器都要给amoeba访问权限

命令:grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';

tast用户是amoeba的默认用户


flush privileges;

(主)

 

(两从) 

然后在amoeba服务器vim打开 /usr/local/amoeba/conf/amoeba.xml

vim /usr/local/amoeba/conf/amoeba.xml

在相应的行数修改一下内容


    用户连接amoeba的设置


30       <property name="user">amoeba</property>
    用户名


32       <property name="password">123456</property>
    连接amaeba的密码


115     <property name="defaultPool">master</property>
    默认池


118    <property name="writePool">master</property>
    写的池


119    <property name="readPool">slaves</property>
    读的池

 

 

配置完以上内容还是在amoeba

vim /usr/local/amoeba/conf/dbServers.xml

22    端口号
    <property name="port">3306</property>


23   连接mysql的用户,MySQl授权的用户
    <property name="schema">test</property>
    这个用户可以不改,如果数据库设置的其他用户的话,只要下面的用户名是设置的用户即可
    否则可以登录但是查不到数据显示断开数据连接


26    登录用户和授权用户一致
    <property name="user">test</property>


29    MySQL授权的密码
    <property name="password">123.com</property>

(以下【】里内容要复制进去)

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


45    定义master   48   master的IP地址
    <dbServer name="master"  parent="abstractServer">
     <property name="ipAddress">192.168.200.111</property>


52-56 定义从和从IP,几个从数据库几段
    <dbServer name="slave1"  parent="abstractServer">
    <property name="ipAddress">192.168.200.112</property>


65  定义读的池slave
    <dbServer name="slaves" virtual="true">


68   轮询
    71    从数据库slave1  slave2
    property name="loadbalance">1</property>
     <property name="poolNames">slave1,slave2</property>

 

 

启动放入后台
    命令: /usr/local/amoeba/bin/amoeba start &
    等8066端口号出来

 

测试
    客户端安装
        yum -y install mariadb*
    登录amoeba
         mysql -uamoeba -p123456 -h 192.168.1.135 -P 8066
    写入是主,读是从
    关闭从的从数据功能不在同步数据,开启立马同步

 

用客户机进入读写分离amoeda服务器

mysql -uamoeba -p123456 -h 192.168.1.135 -P 8066

并USE mydb进入创建表

 

创建名为stst的数据表

CREATE TABLE stst (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        );

 

随后在stst数据表中插入内容

INSERT INTO stst (name, email) VALUES ('John Doe', 'john.doe@example.com'),('Jane Smith','jane.smith@example.com');

查询 `stst` 表中的所有数据

SELECT * FROM stst;

 

验证过程

主插入数据

INSERT INTO stst (name, email) VALUES ('John Doe', 'john.doe@example.com'),('Jane Smith','jane.smith@example.com');

关掉两个从

然后从插入数据

从1

INSERT INTO stst (name, email) VALUES ('John Doe', '111@example.com'),('Jane Smith','jane.smith@111');

从2

INSERT INTO stst (name, email) VALUES ('John Doe', '222@example.com'),('Jane Smith','jane.smith@222');

再用客户端查看表就会看到轮巡

SELECT * FROM stst;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值