zoukankan      html  css  js  c++  java
  • Centos7.4之搭建Mysql数据库主从同步、读写分离

    MySQL主从同步与读写分离

    目录
    第一部分 实验环境
    第二部分 配置主从同步
    第三部分 配置读写分离
    第四部分 测试验证

    第一部分 实验环境

    1. 实验拓扑图:
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    2. 服务器五台:
      1)客户端服务器一台:
      IP地址:192.168.80.10(client)
      需安装软件:mysql-boost-5.7.20.tar.gz
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      2)Amoeba调度服务器一台:
      IP地址:192.168.80.20(amoeba)
      需安装软件:jdk-8u144-linux-x64.tar.gz
      amoeba-mysql-3.0.5-RC-distribution.zip
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      3)Mysql主服务器一台:
      IP地址:192.168.80.30(master)
      需安装软件:mysql-boost-5.7.20.tar.gz
      4)Mysql从服务器两台:
      IP地址:192.168.80.40(slave01)
      192.168.80.50(slave02)
      需安装软件:mysql-boost-5.7.20.tar.gz
    3. 系统信息
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      注意:本实验mysql都是源码编译安装,本文档中涉及安装配置mysql数据库部分省略,请参考文档:https://blog.51cto.com/12227558/2074113

    第二部分 主从同步(需三台Mysql服务器)
    第一步 mysql主服务器搭建配置(192.168.80.30)
    一:在主mysql服务器上搭建NTP时间服务器
    [root@master ~]# yum install -y ntp
    [root@master ~]# vi /etc/ntp.conf
    restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap //修改,去掉#号
    server 127.127.1.0 //添加
    fudge 127.127.1.0 stratum 8 //添加,设置时间服务器的层级为8级,顶级是0 
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    保存退出
    [root@master ~]# service ntpd restart
    [root@master ~]# service firewalld stop
    [root@master ~]# setenforce 0

    二:源码编译安装mysql
    此处参考https://blog.51cto.com/12227558/2074113,源码安装并配置mysql

    三:配置master主服务器的mysql
    [root@master ~]# vi /etc/my.cnf
    //在[mysqld]下面配置
    server_id = 11
    log_bin=master_bin
    log_slave_updates=true
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    保存退出
    [root@master ~]# service mysqld restart
    [root@master ~]# mysql -uroot -pabc123 //登录数据库
    mysql> GRANT REPLICATION SLAVE ON . TO 'myslave'@'192.168.80.%' IDENTIFIED BY '123456';
    //为所有从服务器授权所有数据库
    mysql> FLUSH PRIVILEGES; //刷新权限
    mysql> show master status;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    第二步 配置从服务器slave01(192.168.80.40)
    [root@slave01 ~]# service firewalld stop
    [root@slave01 ~]# setenforce 0
    一:设置时间同步(同步到主服务器)
    [root@slave01 ~]# yum install -y ntpdate
    [root@slave01 ~]# ntpdate 192.168.80.30 //手动同步时间
    [root@slave01 ~]# echo '/30 * /usr/sbin/ntpdate 192.168.80.30' >> /var/spool/cron/root
    //写计划任务,每隔三十分钟,自动同步时间
    [root@slave01 ~]# crontab –l //查看计划任务

    二:源码编译安装mysql
    此处参考https://blog.51cto.com/12227558/2074113,源码安装并配置mysql

    三:配置slave01从服务器的mysql
    [root@slave01 ~]# vi /etc/my.cnf
    server_id = 22
    relay_log=relay-log-bin
    relay_log_index=slave-relay-bin.index
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    保存退出
    [root@slave01 ~]# service mysqld restart
    [root@slave01 ~]# mysql -uroot -pabc123 //登录数据库
    mysql> change master to master_host='192.168.80.30',master_user='myslave',master_password='123456',master_log_file='master_bin.000001',master_log_pos=603;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    mysql> start slave;
    mysql> show slave status G
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    第三步 配置从服务器slave02(192.168.80.50)
    一:设置时间同步(同步到主服务器)
    [root@slave02 ~]# service firewalld stop
    [root@slave02 ~]# setenforce 0
    [root@slave02 ~]# yum install -y ntpdate
    [root@slave02 ~]# ntpdate 192.168.80.30
    [root@slave02 ~]# echo '/30 * /usr/sbin/ntpdate 192.168.80.30' >> /var/spool/cron/root
    [root@slave02 ~]# crontab –l

    二:源码编译安装mysql
    此处参考https://blog.51cto.com/12227558/2074113,源码安装并配置mysql

    三:配置slave02从服务器的mysql
    [root@slave02 ~]# vi /etc/my.cnf
    server_id = 33
    relay_log=relay-log-bin
    relay_log_index=slave-relay-bin.index
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    保存退出
    [root@slave02 ~]# service mysqld restart
    [root@slave02 ~]# mysql -uroot -pabc123
    mysql> change master to master_host='192.168.80.30',master_user='myslave',master_password='123456',master_log_file='master_bin.000001',master_log_pos=603;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    mysql> start slave;
    mysql> show slave status G
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    第四步 验证
    //在主服务器上新建库并验证同步
    mysql> create database hello;
    mysql> show databases;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    //在从服务器上验证结果
    Slave01:
    mysql> show databases;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    Slave02:
    mysql> show databases;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    //验证成功

    第三部分 读写分离
    第一步 在amoeba服务器上配置(192.168.80.20)
    [root@amoeba ~]# service firewalld stop
    [root@amoeba ~]# setenforce 0

    一:设置同步时间
    [root@amoeba ~]# yum install -y ntpdate
    [root@amoeba ~]# ntpdate 192.168.80.181
    [root@amoeba ~]# echo '/30 * /usr/sbin/ntpdate 192.168.80.30' >> /var/spool/cron/root
    [root@amoeba ~]# crontab –l

    二:安装JDK
    [root@amoeba ~]# tar xf jdk-8u144-linux-x64.tar.gz
    [root@amoeba ~]# cp -rv jdk1.8.0_144/ /usr/local/java
    [root@amoeba ~]# vi /etc/profile
    最后添加以下内容:
    export JAVA_HOME=/usr/local/java
    export JRE_HOME=/usr/local/java/jre
    export PATH=$PATH:/usr/local/java/bin
    export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
    保存退出
    [root@amoeba ~]# source /etc/profile //立即生效
    [root@amoeba ~]# java –version
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    三:安装amoeba //下载地址:https://sourceforge.net/projects/amoeba/files/
    [root@amoeba ~]# yum install -y unzip
    [root@amoeba ~]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
    [root@amoeba ~]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
    [root@amoeba ~]# chmod -R 755 /usr/local/amoeba/
    [root@amoeba ~]# vi /usr/local/amoeba/jvm.properties
    修改以下内容:
    JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k" //32行
    保存退出

    四:制作amoeba管理脚本
    [root@amoeba ~]# vi /etc/init.d/amoeba
    #!/bin/bash
    #chkconfig: 35 62 62
    #
    export JAVA_HOME=/usr/local/java
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    NAME=Amoeba
    AMOEBA_BIN=/usr/local/amoeba/bin/launcher
    SHUTDOWN_BIN=/usr/local/amoeba/bin/shutdown
    PIDFILE=/usr/local/amoeba/Amoeba-MySQL.pid
    SCRIPTNAME=/etc/init.d/amoeba

    case "$1" in
    start)
    echo -n "Starting $NAME... "
    $AMOEBA_BIN
    echo " done"
    ;;
    stop)
    echo -n "Stoping $NAME... "
    $SHUTDOWN_BIN
    echo " done"
    ;;
    restart)
    $SHUTDOWN_BIN
    sleep 1
    $AMOEBA_BIN
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|restart}"
    exit 1
    ;;
    esac
    保存退出
    [root@amoeba ~]# chmod +x /etc/init.d/amoeba
    [root@amoeba ~]# chkconfig --add amoeba
    [root@amoeba ~]# service amoeba start
    //启动过程较慢,ctrl+z放后台暂停运行,
    [root@amoeba ~]# bg //后台继续运行
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    [root@amoeba ~]# netstat -anpt | grep 8066
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    第二步 配置读写分离
    一:主服务器创建test数据库
    mysql> create database test;
    mysql> show databases;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    二:在三台mysql数据库服务器中为amoeba授权
    mysql> GRANT ALL ON . TO test@'192.168.80.%' IDENTIFIED BY 'abc123';
    mysql> FLUSH PRIVILEGES;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    三:在amoeba服务器上编辑amoeba配置文件
    [root@amoeba ~]# cd /usr/local/amoeba
    [root@amoeba amoeba]# vi conf/amoeba.xml
    //编辑以下内容
    <property name="user">amoeba</property> //28行
    <property name="password">123456</property> //30行
    //以上设置客户端连接amoeba前端服务器时使用的用户名和密码
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    <property name="defaultPool">master</property>
    <property name="writePool">master</property>
    <property name="readPool">slaves</property>
    //83行开始修改,85行与88行是注释,删除
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    保存退出
    [root@amoeba amoeba]# vi conf/dbServers.xml
    修改以下内容:
    <property name="user">test</property>

    <property name="password">abc123</property>
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    //以下是主服务器配置:
    <dbServer name="master" parent="abstractServer">
    <property name="ipAddress">192.168.80.30</property>
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    //从服务器slave01配置:
    <dbServer name="slave1" parent="abstractServer">
    <property name="ipAddress">192.168.80.40</property>
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    //从服务器slave02配置:
    将slave01相关内容复制(共六行),直接往下粘贴,并作修改
    <dbServer name="slave2" parent="abstractServer">
    <property name="ipAddress">192.168.80.50</property>
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    //以下修改两行内容:
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
    保存退出
    [root@amoeba amoeba]# service amoeba restart
    按ctrl+z,bg,后面运行
    [root@amoeba amoeba]# netstat -anpt | grep 8066
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    第四部分 测试验证
    第一步 客户端上操作(192.168.80.10)
    [root@client ~]# service firewalld stop
    [root@client ~]# setenforce 0
    一:源码编译安装mysql
    此处参考https://blog.51cto.com/12227558/2074113,源码安装并配置mysql

    二:测试读写分离
    //在MASTER上新建的数据库或者里面的表,两台从服务器会同步--通过amoeba操作

    1. 客户端登录操作
      [root@@client ~]# mysql -u amoeba -p123456 -h 192.168.80.20 -P8066 
      mysql> show databases;
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      mysql> use test;
      mysql> create table zhang (id int(10),name varchar(10),address varchar(20));
      mysql> show tables;
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离
      //在三台数据库服务器上查看会是相同结果
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
      Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    2. 在两台从服务器上停止主从同步服务
      mysql> stop slave;

    测试一: 在主服务器上插入的内容不会同步-通过amoeba操作的
    //在客户端上操作
    mysql> insert into zhang values('1','hahahha','this_is_master');
    //在主服务器上查看
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    //在两台从服务器上查看
    mysql> show databases;
    mysql> use test;
    mysql> select * from zhang;
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    测试二:在从服务器上新建内容
    Slave01:
    mysql> use test;
    mysql> insert into zhang values('2','zhang','this_is_slave1');
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    Slave02:
    mysql> use test;
    mysql> insert into zhang values('3','zhang','this_is_slave2');
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    //在客户端上测试,第一次会向从服务器slave01上读取数据,第二次会向slave02读取
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

    测试三:在通过客户端连接数据库后写入的数据只有主会记录,然后同步给从-从服务器不
    会记录,从而实现了读写分离
    //客户端上操作
    mysql> insert into zhang values('4','zhang','write_test');
    这条记录只能在主服务器上看到记录 
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    在客户端上看不到新插入的数据,因为没有开启同步

    //在客户端开启同步后,主服务器上数据会同步到各从服务器中,但是从服务器上自己增加的数据不会同步,只有本地保存
    mysql> start slave; //在两台从服务器上开启
    在客户端查看会看到主上同步过来的数据,以及自己本地增加的数据,但是看不到其它从上自己增加的数据:
    Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离 
    //测试完成

  • 相关阅读:
    算法训练 区间k大数查询
    算法训练 最大最小公倍数
    身份证号码升级
    python包与模块导入
    python函数
    HDU 3595 博弈论,被支配的恐惧
    BZOJ 3195 [Jxoi2012]奇怪的道路
    大暑假集训
    [Poi2010]Monotonicity 2
    BZOJ 4868 HEOI 期末考试
  • 原文地址:https://www.cnblogs.com/yanghaitao/p/11528055.html
Copyright © 2011-2022 走看看