实验:mysql的主从复制-读写分离

一、案例环境

实验操作:
#########案例环境#############
IP地址        主机         操作系统
20.0.0.5     master     centos-7.6-x86_64 
20.0.0.3     Slave1     centos-7.6-x86_64 
20.0.0.6     Slave2     centos-7.6-x86_64 
20.0.0.4     Amoeba  centos-7.6-x86_64 


###maste、slave1、slave2、Amoeba ###
常规操作,需要先把防火墙、核心防护关闭掉,操作可以看我的基础操作博客
  • 建立时间同步环境
同步阿里云服务,所有服务器都要同步!!!
[root@localhost ~]# ntpdate ntp1.aliyun.com
[root@localhost ~]# date -R
[root@localhost ~]# yum -y install ntp  ###如果不是最小化安装,就不用yum安装ntp
####安装MySQL数据库#########
前面的博客写的非常详细!这里就不过多讲解......

myslq安装博客地址: 点击这里.

  • 登录master主服务器配置20.0.0.5
[root@localhost ~]# vi /etc/my.cnf   
server-id = 11                      ###修改成11,这里数字可以随便改,不要和从服务器一样就行。
log_bin = master-bin          ###开启二进制日志,= 后面的日志名称
log-slave-updates = true    ###允许从服务器找他更新二进制日志
[root@localhost ~]# systemctl restart mysqld       ###重启mysql服务
[root@slaver1 ~]# cd /usr/local/mysql/data/
[root@slaver1 data]# ls    ###查看一下二进制日志是否生产
 master-bin.000001  

#######master数据库给从服务器授权#####
[root@localhost ~]# mysql -uroot -p  ###登录数据库
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456';     ###我允许slave找我开启同步,允许对方所有数据库、所有表使用myslave用户,通过20.0.0网段的,使用123456密码
mysql> flush privileges;       ###想让策略生效,刷新一下
mysql> show master status;     ###这里很重要,待会从服务器转换进行同步依赖日志名和定位,记录下来!
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      599 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  • 登录salver1从服务器配置20.0.0.3
[root@localhost ~]# vi /etc/my.cnf  
server-id = 22     ###在原来server-id=1的地方修改成22 ,这里数字可以随便改,不要和别的服务器一样就行。
relay-log = relay-log-bin        ###开启中继日志,= 后面的日志名称
relay-log-index = slave-relay-bin.index    ###定义relay-log的位置和名称
[root@localhost ~]# systemctl restart mysqld    ###重启mysql服务

[root@localhost ~]# mysql -uroot -p   ###登录数据库
mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599;   ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。
mysql> start slave;                   ###开启功能
mysql> show slave status\G      ###看看主从是否开启,\G是竖着查看
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 20.0.0.5
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 599
               Relay_Log_File: relay-log-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: yes  ###IO线程要开启才可以
            Slave_SQL_Running: Yes  ###SQL线程也要开启才可以
............................................
  • 登录salver2从服务器配置20.0.0.6
[root@localhost ~]# vi /etc/my.cnf   
server-id = 33     ###在原来server-id=1的地方修改成33 ,这里数字可以随便改,不要和别的服务器一样就行。
relay-log = relay-log-bin        ###开启中继日志,= 后面的日志名称
relay-log-index = slave-relay-bin.index    ###定义relay-log的位置和名称
[root@localhost ~]# systemctl restart mysqld    ###重启mysql服务
[root@localhost ~]# mysql -uroot -p   ###登录数据库
mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599;   ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。
mysql> start slave;                   ###开启功能
mysql> show slave status\G      ###看看主从是否开启,\G是竖着查看
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 20.0.0.5
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 599
               Relay_Log_File: relay-log-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: yes  ###IO线程要开启才可以
            Slave_SQL_Running: Yes  ###SQL线程也要开启才可以
....................略........................
  • 验证主从复制效果
###主的建库,从服务器会同步###
登录20.0.0.5
[root@localhost ~]# mysql -uroot -p
mysql> create database cs;  ###创建个数据库

登录20.0.0.3和20.0.0.6   
[root@localhost ~]# mysql -uroot -p
mysql> show databases;   ###查看一下数据库是否同步,应该也都有cs数据
  • amoeba服务器配置
先把jdk-6u14-linux-x64二进制安装文件和amoeba-mysql-binary-2.2.0.tar压缩包上传上来

[root@amoba ~]# chmod +x jdk-6u14-linux-x64.bin   ###给jdk一个执行的权限
[root@amoba ~]# ./jdk-6u14-linux-x64.bin       ###然后直接执行,然后一直空格到了下面问是否建立项目,输入yes,然后等一下在回车,在等一下就执行完成

[root@amoba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6      ###然后把刚刚的文件移动到指定目录里
[root@amoba ~]# vim /etc/profile                  ###配置环境变量,在最后添加下面四句代码
export JAVA_HOME=/usr/local/jdk1.6             ###指定java的工作目录
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib  ###jre就是java的虚拟机,里面会有默认的类(比如class),lib就是类库
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin 
export AMOEBA_HOME=/usr/local/amoeba          ###amoeba工作目录
export PATH=$PATH:$AMOEBA_HOME/bin


[root@amoba ~]# source /etc/profile           ###执行一下
[root@amoba ~]# echo $PATH                      ###输出一下,输出下面内容证明已经生效了
/usr/local/jdk1.6/lib:/usr/local/jdk1.6/jre/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/amoeba/bin

[root@amoba ~]# mkdir /usr/local/amoeba    ###建一个amoeba目录
[root@amoba ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/    ###把amoeba解压到刚刚创建的目录下
[root@amoba ~]# chmod -R 755 /usr/local/amoeba/    ###变更一下属组,给755权限
[root@amoba ~]# /usr/local/amoeba/bin/amoeba   ###直接执行这条命令,显示amoeba start|stop说明安装成功

mysql> GRANT ALL  ON *.* TO test@'20.0.0.%' IDENTIFIED BY '123.com'; ###除amoeba外三台都要执行
mysql> flush privileges;  ###执行上面后,三台都要刷新一下

##########这个时候amoeba就可以通过test账户123.com密码登录每台进行响应的操作#############
[root@amoba ~]# cd /usr/local/amoeba/conf/   
[root@amoba conf]# vim amoeba.xml 
                     <property name="user">amoeba</property>   ###然后把三十行、三十二行的账号密码改一下
                     <property name="password">123456</property>


               <property name="defaultPool">master</property>  ###然后把115行往下两行都这样更改,去掉注释,这里只是改个名字,并是不后面就读取这个配置
                <property name="writePool">master</property>
               <property name="readPool">slaves</property>


[root@amoba conf]# vim dbServers.xml 
          <property name="schema">mysql</property>  ###23行这里数据库5.7版本默认是test,应该改成你里面有的数据库名字,5.5、5.6版本的不用改,默认有test数据库
  <property name="user">test</property>               ###26行改成test用户
  <property name="password">123.com</property>   ###29行就是刚刚的用户密码123.com

         <dbServer name="master"  parent="abstractServer">        ####45行往下就是master、slave1、slave2的配置
                 <factoryConfig>
                         <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.5</property>
                  </factoryConfig>
         </dbServer>
 
         <dbServer name="slave1"  parent="abstractServer">
                  <factoryConfig>
                         <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.3</property>
                </factoryConfig>
         </dbServer>
 
        <dbServer name="slave2"  parent="abstractServer">
                 <factoryConfig>
                        <!-- mysql ip -->
                         <property name="ipAddress">20.0.0.6</property>
              </factoryConfig>
         </dbServer>

        <dbServer name="slaves" virtual="true">  ###然后把66行改成这样,这样就和刚刚的amoeba.xml连接起来了              
       <property name="poolNames">slave1,slave2</property>  ###72行改成这样,也是为了和刚刚的amoeba.xml连接起来


[root@amoba conf]# /usr/local/amoeba/bin/amoeba start&   ###把一个进程放到了后台,并且开启了一个监控日志
  • 配置mysql客户端
[root@amoba conf]# yum -y install mariadb*        ###装一个mysql客户端
[root@amoba conf]# systemctl start mariadb        ###启动一下mariadb服务 
[root@amoba conf]# mysql_secure_installation     ###简单自定义部署一下
这个时候让你输入密码,但没有密码就回车  输入y   在输入新密码abc123,再次确定abc123
在输入 n、n、n、y 就设置好了
  • 测试
[root@amoba conf]# mysql -uamoeba -p -h 127.0.0.1 -P8066   ###因为我没有用客户端登录,直接在amoeba上面测试登录的,ip地址就用127.0.0.1,8066是端口
然后输入密码123456,就成功进去了

在这里插入图片描述

1、在amoeba里创建一个zang表
MySQL [(none)]> use cs;       ###进入cs库
MySQL [cs]> create table zang(id int(10),name varchar(10),address varchar(20));  ###创建zang表
在主、从里面查看一下是否同步都有!

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

2、在两台从服务器上关闭功能,这样就不能读写分离了
mysql> stop slave;


在amoeba里插入一个zhang信息进去
MySQL [cs]> insert into zang values ('1','zhang','this_is_master');
然后主从服务器查看一下

在这里插入图片描述

两台从的服务器就会不能查看

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

3、然后在slave1插入下面这条
MySQL [cs]> insert into zang values ('2','zhang','this_is_master1');
在slave2插入下面这条
MySQL [cs]> insert into zang values ('3','zhang','this_is_master2');

用amoeba看一下就会发现是id 3,在看一遍就是id2的,因为这里是轮询原则

在这里插入图片描述

而master不能看见id2和id3的zhang,实现了读写分离

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44733021/article/details/109188299
今日推荐