zoukankan      html  css  js  c++  java
  • MySQL主从异步复制备份案例及Amoeba是实现读写分离

    实验环境 一主两从

    MySQL-master   192.168.200.111

    MySQL-slave1   192.168.200.112

    MySQL-slave2   192.168.200.113

    所有服务器关闭防火墙

    所有服务器安装 yum -y install mariadb  mariadb-server

    systemctl start mariadb

    建立时间同步环境,在主服务器上安装配置NTP时间同步服务器

    主:yum -y install ntp

    cp  /etc/ntp.conf  /etc/ntp.conf.bak

    vim  /etc/ntp.conf

     //手动添加

    22  server 127.127.1.0
    23  fudge 127.127.1.0 startum 8

    systemctl  start ntpd

    修改配置文件:vim /etc/my.cnf

    [mysqld]
    server_id=1
    log-bin=mysql-binlog
    log-slave-updates=true

    systemctl restart mariadb

    mysql  登录数据库

    给从服务器授权

    MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.200.%' identified by '123123'; 

    MariaDB [(none)]> flush privileges;

    mysql> show master status;
    +---------------------+----------+--------------+------------------+------------------------------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------------+----------+--------------+------------------+------------------------------------------+
    | mysql-binlog.000004 | 642 | | | fd47807d-efdc-11e9-abaa-000c29d5bd44:1-2 |
    +---------------------+----------+--------------+------------------+------------------------------------------+

     配置从服务器

    yum  -y install  ntpdate

    ntpdate 192.168.200.111

    [mysqld]
    server-id=2            #主从服务器的server-id不能相同!,两个从的server-id也不能一样
    relay-log=relay-log-bin        ##开启中继日志
    relay-log-index=slave-relay-bin.index

    systemctl restart mariadb

    mysql  #登录MySQL

    MariaDB [(none)]> change master to master_host='192.168.200.111',master_user='slave',master_password='123123',master_log_file='mysql-binlog.000001',master_log_pos=245;

    MariaDB [(none)]> start slave;    #开启主从复制功能

    MariaDB [(none)]> show slave statusG;

     测试,在111上创建数据库,看看从服务器是否写入

    二。Amoeba实现MySQL读写分离

    实验环境:

    192.168.200.111      MySQL-master

    192.168.200.112     MySQL-slave1

    192.168.200.113     MySQL-slave2

    192.168.200.114     Amoeba

    192.168.200.115    客户机

    先实现MySQL数据库的主从复制,方法见上面所写

    1.安装Amoeba上安装Java环境 (推荐安装jdk1.5,或1.6,不建议安装1.7版本)

    需要的软件包有

    amoeba-mysql-binary-2.2.0.tar.gz

    jdk-6u14-linux-x64.bin

    chmod +x jdk-6u14-linux-x64.bin

    ./jdk-6u14-linux-x64.bin

    一路空格,输入yes,回车完成

    mv jdk1.6.0_14/ /usr/local/jdk1.6

    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/bin:$JAVA_HOME/jre/bin

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

    source /etc/profile

    java -version

    查看版本是不是1.6

    如果不是rm  -rf /usr/bin/java

    安装配置Amoeba

    mkdir /usr/local/amoeba

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

    chmod -R 755 /usr/local/amoeba/

    3.配置amoeba实现mysql-slave1,mysql-slave2读负载均衡

    在三台MySQL服务器上对amoeba授权

    MariaDB [(none)]> grant all on *.* to 'admin'@'192.168.200.%' identified by '123123';

    cd /usr/local/amoeba/conf/

    MariaDB [(none)]> flush privileges;

    编辑配置amoeba.xml配置文件,设置读写分离

    cp amoeba.xml amoeba.xml.bak

    vim amoeba.xml

    11  <property name="port">8066</property>   //默认端口8066,无需修改

    30   <property name="user">amoeba</property>   //设置一个用户,后面客户端访问时使用

    32    <property name="password">123123</property>     //设置登录密码

    115    <property name="defaultPool">master</property>      //默认的服务器池

    117     <property name="writePool">master</property>           //写服务器池

    118     <property name="readPool">slaves</property>          //读服务器池

    有些上面有注释<!--   -->   ,把他删掉

    编辑dbServer.xml配置文件,设置登录MySQL服务器的用户及密码,MySQL服务器节点的IP地址,负载均衡算法

     cp dbServers.xml dbServers.xml.bak

    vim dbServers.xml

    20  <property name="port">3306</property>    //设置MySQL连接端口,默认为3306

    26  <property name="user">admin</property>       //设置访问MySQL服务器所用的用户名

    29  <property name="password">123123</property>      //设置访问MySQL服务器所用的密码

    45  <dbServer name="master"  parent="abstractServer">    //设置MySQL服务器及IP地址

    48   <property name="ipAddress">192.168.200.111</property>      //主MySQL服务器IP地址

    52   <dbServer name="slave1"  parent="abstractServer">       

    55    <property name="ipAddress">192.168.200.112</property>    //从服务器slave1 IP地址

    58    <dbServer name="slave2"  parent="abstractServer">

    61     <property name="ipAddress">192.168.200.113</property>    //从服务器slave 2 IP地址

    因为没有slave2的配置,所以复制 slave1  的配置  ,添加并修改

    65      <dbServer name="slaves" virtual="true">      // 服务器池

    71    <property name="poolNames">slave1,slave2</property>     //前面定义的服务器节点名

    4.  启动amoeba

    nohup  /usr/local/amoeba/bin/amoeba start &

    netstat -lnpt | grep 8066

    5.测试

    此时的三台MySQL服务器是主从备份

    在mysql-master 创建db_test 库及该库下的test表

    MariaDB [(none)]> create database db_test;

    MariaDB [db_test]> create table test(id int(10),name varchar(20));

    可以在112和113上查看该库

    show  databases;

    在112和113 服务器上停止主从备份

    MariaDB [(none)]> stop slave;

    在111上添加表内容

    MariaDB [db_test]> insert into test values('1','master');

    此前在服务器上同步了表,所以在从服务器上可以直接手动插入其他内容

    在slave1 上:

    MariaDB [(none)]> insert into db_test.test values('2','slave1');

    在slave2上:

    MariaDB [(none)]> insert into db_test.test values('3','slave2');

    在客户机115上进行读测试:

    yum -y install mariadb

    mysql -uamoeba -p123123 -h 192.168.200.114 -P8066

    (1) 读测试

     (2)写测试:

    MySQL [(none)]> insert into db_test.test values('4','clieent');

    在master服务器上查看是否写入:

     实验完成

  • 相关阅读:
    IOS 消息分发
    使用do{ } while(0)的好处
    BdAsyncTask学习
    用户体验学习笔记(工程中发现的PM常犯错误)
    Xcode 7 调试野指针利器 Address sanitizer
    Xcode磁盘空间大清理
    xcode:关于Other Linker Flags
    mac 下打开多个Eclipse
    shape 代码生成器
    查看APK方法数的工具dex-method-counts
  • 原文地址:https://www.cnblogs.com/maoyanqing/p/11677830.html
Copyright © 2011-2022 走看看