centos7.2下mysql的主从复制与读写分离

centos7.2下mysql的主从复制与读写分离:

 1.为什么要配置数据库集群和主从复制

    一些大型的项目,由于访问并发量的增多会导致数据库的压力倍增,利用redis缓存减少数据库的压力,从而提升数据库的效率单个数据库同时负责读写任务,底层可能会出现锁的现象:同步锁,事务锁,乐观锁,悲观锁,单个数据库同时负责读写,效率还是不高;配置主从可以分担数据库的压力,进行读写分离,所有的数据库插入,修改等写入操作从主库进行所有的数据查询等读取操作走从库,这样就分担了单一数据库的运行压力。

  2.实现原理:

配置主从结构先在主上打开一个二进制日志的文件(Binary.log),master操作时,就会把写的命令存入到这个二进制文件中(insert,update,delete),slave开启一个IO线程,线程定时读取主节点的二进制文件,将新的命令抓取过来

存放到本地一个中继日志中(relay.log);slave上还有一个定时启动的线程叫sql,监控本地的中继日志,一旦有新的命令发现,将会把中继日志中的命令执行一遍。这样一来,主从结构就完成了数据的备份;

 

     3.安装linuxmysql(percona

  1.安装cmake(如果使用虚拟机镜像无需本步操作)

   #yum -y install cmake

      2.更新yum

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rp

      3.安装
    yum install Percona-Server-client-56 Percona-Server-server-56
    安装如果有冲突,之前已经安装过mysql,则需要卸载
    rpm -qa | grep mysql    

        如果有mysql软件的话,将其删除,执行

        yum remove .....将软件包全部都删除掉。

  4.安装完成后检查两点,一个是/etc/my.cnf存在不存在,一个是/var/lib/mysql目录中有没有mysql数据文件,如果有,那么基本上安装成功了。

    

 5.启动mysql服务

    运行命令:systemctl start mysql.service

    成功后,查看mysql运行状态,systemctl status mysql.service后如下图:

      

 6.修改mysql的密码

    此时mysql并没有设置初始密码,所以先设置密码,进入mysql中(终端直接输入mysql即可):

      mysql> use mysql;  

      mysql> update user set password=password('123') where user='root' and host='localhost';  

      mysql> flush privileges; 

    然后重启mysql服务,重新登录

      mysql -uroot -p123   即可。

 7.开启远程连接mysql服务器

    a.开启之前一定要确定自己开放了3306端口,或者完全关闭掉防火墙,否则远程无法连接。(关闭防火墙或者开放端口,请百度)

    b.创建数据库文件,例如,这里直接导入一个sql文件(之后主从复制会用到,导入sql文件,在mysql下直接输入命令,source 路径/xx.sql) 

    c.默认安装的msql没有开启远程访问,所以要设置一个权限。

      mysql>grant all on *.* to 'root'@'%' identified by 'root';

        执行成功后,就可以在远程客户端连接试试看了,这里我使用的是mysqlworkbeach,如下:

      

    以上操作,分别在两台虚拟机中进行,操作一模一样。

  8.配置数据库的主从关系

   配置主服务器

   编辑主master服务器配置文件/etc/my.cnf

      在[mysqld]节点下加入两句话

      server-id=1

      log-bin=mysql-bin        #启用二进制日志;

    

      

 

    

      然后重启服务:systemctl restart mysql.service

           

      登录mysqlmysql –uroot -proot

      mysql>flush tables with read lock;   #数据库锁表,不让写数据;这步骤可不做

      对于当前环境的mysql无需使用lock命令,因为没有人操作,但是生产环境中必须这样做

      mysql>show master status;    #查看MASTER状态(这两个值FilePosition)其中的file就是二进制文件,position记录当前操作sql的步骤数(注意一条sql包含多步,所以不是sql语句的条数)

      

      

      因为我对数据库主从已经操作过了,所以会记录一些步骤数,一般情况下,第一次显示position的数量是120

      

    配置从服务器

    修改/etc/my.cnf增加一行

    server-id=2

      

    然后重启服务器

      systemctl restart mysql.service

 

    通过mysql命令配置同步日志的指向:

      mysql>change master to master_host=‘192.168.41.41’, master_port=3306,

      master_user='root',master_password='root',

      master_log_file='mysql-bin.000001', 

      master_log_pos=120;

      master_host        主服务器的IP地址(内网地址)

      master_port        主服务器的PORT端口

      master_log_file    和主服务器show master status中的File字段值相同

      master_log_pos        和主服务器show master status中的Position字段值相同

      mysql>start slave;                #stop slave;停止服务,出错时先停止,再重新配置

      mysql>show slave status\G;        #查看SLAVE状态,\G结果纵向显示。必须大写,这个命令无法再sqlyog中使用

      systemctl restart mysql.service        #重启服务

      

      

    

9.此时主从复制就配好了,现在来测试一下吧!!

    

    第一步:在主表中创建一个数据表(表名什么都可以,测试用嘛),然后插入数据,如下:

      

 

           此时观察从表,刷新,哎,卧槽,有数据了,说明从库已经从主库读取并写入了。

        

    

    第二步:在主表和从表中插入一样的数据,例如在主,从表分别中插入:id =3 name=clearlove,然后查看,嗯,全部都插入成功了,此时再看从表slave状态,卧槽??挂了?

        

        

          此时,slave_io_running成no了,挂了。为什么?

          因为从表要从主表读取数据,主从都有了,我还读你xxx啊?

          此时,再改主表数据也没用了,主从都挂了,能有用吗?怎么办?重新挂接呗!!

          错误数据必须清除否则继续主从失效,查看主节点中的二进制文件名称 pos,但是停止从节点的从状态stop slave

           1.查看主节点中二进制文件pos,怎么查看呢?这样show master status;

              

             2.在从节点中把查询出来的最新数据放到命令里挂接主节点

 

               

             

              启动从节点的slave

                start slave

 

              此时再看下:ok!!!

 

                

 

 

              但是这个时候发现id3的对应b1字段的值没有改。所以mysql虽然支持主从关系但是并没有维护读写分离的状态。

    

  10.安装配置amoeba

      

      步骤1: 安装jdk

          amoeba基于jdk环境所以需要安装jdk(网上百度吧!!)

      步骤2:   安装amoeba

          wget https://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.0.1-BETA.tar.gz

          然后解压: tar -xf amoe......

      步骤3: 配置读写分离

          1.配置conf/dbService.xml

 

            修改用户名和密码

    

              

 

             配置主从的名称和ip地址

 

              

 

            配置负载均衡的策略

              

                这个xml文件配置基本结束了,接下来配置amoeba.xml,核心的配置文件,将要加载dbServer.xml才能使用其中的配置,才能使负载均衡有效果
          2.配置
amoeba.xml

              配置ip地址;(192.168.41.41为你主机的ip地址,amoeba主从主需要配置一台即可)

                

              写上root密码

                

 

              

 

            继续配置写池使用master,读池使用multiPool

                        

             注意:此时基本上配置完了,但是amoeba基于java做的,java有个小要求,最少的stack size太少 栈的size太小java默认128K,所以还要修改下栈的size,修改启动文件/bin/amoeba,修改为256.如下:

                

              这样就配置完成了。启动下吧!!

                  输入     ./amoeba start

                    

            最后,本地连接下吧!!

                

           ok,全部配置成功了!!注意,要开启8066端口或者要关闭防火墙,否则外面访问不到啊!!

                 

 

              

 

转载于:https://www.cnblogs.com/AprilMonth/p/8343045.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值