Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

MySQL主从同步与读写分离

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

第一部分 实验环境

  1. 实验拓扑图:
  2. 服务器五台:
    1)客户端服务器一台:
    IP地址:192.168.80.10(client)
    需安装软件:mysql-boost-5.7.20.tar.gz

    2)Amoeba调度服务器一台:
    IP地址:192.168.80.20(amoeba)
    需安装软件:jdk-8u144-linux-x64.tar.gz
    amoeba-mysql-3.0.5-RC-distribution.zip

    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. 系统信息

    注意:本实验mysql都是源码编译安装,本文档中涉及安装配置mysql数据库部分省略,请参考文档:http://blog.51cto.com/12227558/2074113

第二部分 主从同步(需三台Mysql服务器)
第一步 mysql主服务器搭建配置(192.168.80.30)
一:在主mysql服务器上搭建NTP时间服务器
[[email protected] ~]# yum install -y ntp
[[email protected] ~]# 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

保存退出
[[email protected] ~]# service ntpd restart
[[email protected] ~]# service firewalld stop
[[email protected] ~]# setenforce 0

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

三:配置master主服务器的mysql
[[email protected] ~]# vi /etc/my.cnf
//在[mysqld]下面配置
server_id = 11
log_bin=master_bin
log_slave_updates=true

保存退出
[[email protected] ~]# service mysqld restart
[[email protected] ~]# mysql -uroot -pabc123 //登录数据库
mysql> GRANT REPLICATION SLAVE ON . TO ‘myslave‘@‘192.168.80.%‘ IDENTIFIED BY ‘123456‘;
//为所有从服务器授权所有数据库
mysql> FLUSH PRIVILEGES; //刷新权限
mysql> show master status;

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

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

三:配置slave01从服务器的mysql
[[email protected] ~]# vi /etc/my.cnf
server_id = 22
relay_log=relay-log-bin
relay_log_index=slave-relay-bin.index

保存退出
[[email protected] ~]# service mysqld restart
[[email protected] ~]# 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;

mysql> start slave;
mysql> show slave status \G

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

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

三:配置slave02从服务器的mysql
[[email protected] ~]# vi /etc/my.cnf
server_id = 33
relay_log=relay-log-bin
relay_log_index=slave-relay-bin.index

保存退出
[[email protected] ~]# service mysqld restart
[[email protected] ~]# 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;

mysql> start slave;
mysql> show slave status \G

第四步 验证
//在主服务器上新建库并验证同步
mysql> create database hello;
mysql> show databases;

//在从服务器上验证结果
Slave01:
mysql> show databases;

Slave02:
mysql> show databases;

//验证成功

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

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

二:安装JDK
[[email protected] ~]# tar xf jdk-8u144-linux-x64.tar.gz
[[email protected] ~]# cp -rv jdk1.8.0_144/ /usr/local/java
[[email protected] ~]# 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
保存退出
[[email protected] ~]# source /etc/profile //立即生效
[[email protected] ~]# java –version

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

四:制作amoeba管理脚本
[[email protected] ~]# 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
保存退出
[[email protected] ~]# chmod +x /etc/init.d/amoeba
[[email protected] ~]# chkconfig --add amoeba
[[email protected] ~]# service amoeba start
//启动过程较慢,ctrl+z放后台暂停运行,
[[email protected] ~]# bg //后台继续运行

[[email protected] ~]# netstat -anpt | grep 8066

第二步 配置读写分离
一:主服务器创建test数据库
mysql> create database test;
mysql> show databases;

二:在三台mysql数据库服务器中为amoeba授权
mysql> GRANT ALL ON . TO [email protected]‘192.168.80.%‘ IDENTIFIED BY ‘abc123‘;
mysql> FLUSH PRIVILEGES;

三:在amoeba服务器上编辑amoeba配置文件
[[email protected] ~]# cd /usr/local/amoeba
[[email protected] amoeba]# vi conf/amoeba.xml
//编辑以下内容
<property name="user">amoeba</property> //28行
<property name="password">123456</property> //30行
//以上设置客户端连接amoeba前端服务器时使用的用户名和密码

<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>
//83行开始修改,85行与88行是注释,删除

保存退出
[[email protected] amoeba]# vi conf/dbServers.xml
修改以下内容:
<property name="user">test</property>

<property name="password">abc123</property>

//以下是主服务器配置:
<dbServer name="master" parent="abstractServer">
<property name="ipAddress">192.168.80.30</property>

//从服务器slave01配置:
<dbServer name="slave1" parent="abstractServer">
<property name="ipAddress">192.168.80.40</property>

//从服务器slave02配置:
将slave01相关内容复制(共六行),直接往下粘贴,并作修改
<dbServer name="slave2" parent="abstractServer">
<property name="ipAddress">192.168.80.50</property>

//以下修改两行内容:

保存退出
[[email protected] amoeba]# service amoeba restart
按ctrl+z,bg,后面运行
[[email protected] amoeba]# netstat -anpt | grep 8066

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

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

  1. 客户端登录操作
    [[email protected]@client ~]# mysql -u amoeba -p123456 -h 192.168.80.20 -P8066
    mysql> show databases;

    mysql> use test;
    mysql> create table zhang (id int(10),name varchar(10),address varchar(20));
    mysql> show tables;

    //在三台数据库服务器上查看会是相同结果


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

测试一: 在主服务器上插入的内容不会同步-通过amoeba操作的
//在客户端上操作
mysql> insert into zhang values(‘1‘,‘hahahha‘,‘this_is_master‘);
//在主服务器上查看

//在两台从服务器上查看
mysql> show databases;
mysql> use test;
mysql> select * from zhang;

测试二:在从服务器上新建内容
Slave01:
mysql> use test;
mysql> insert into zhang values(‘2‘,‘zhang‘,‘this_is_slave1‘);

Slave02:
mysql> use test;
mysql> insert into zhang values(‘3‘,‘zhang‘,‘this_is_slave2‘);

//在客户端上测试,第一次会向从服务器slave01上读取数据,第二次会向slave02读取

测试三:在通过客户端连接数据库后写入的数据只有主会记录,然后同步给从-从服务器不
会记录,从而实现了读写分离
//客户端上操作
mysql> insert into zhang values(‘4‘,‘zhang‘,‘write_test‘);
这条记录只能在主服务器上看到记录

在客户端上看不到新插入的数据,因为没有开启同步

//在客户端开启同步后,主服务器上数据会同步到各从服务器中,但是从服务器上自己增加的数据不会同步,只有本地保存
mysql> start slave; //在两台从服务器上开启
在客户端查看会看到主上同步过来的数据,以及自己本地增加的数据,但是看不到其它从上自己增加的数据:

//测试完成

原文地址:http://blog.51cto.com/12227558/2104641

时间: 2024-10-09 21:19:38

Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离的相关文章

搭建Mysql-proxy实现主从同步读写分离

代理服务器 Wg61 192.168.0.180 (Mysql-proxy)主服务器 Wg62 192.168.0.142 (负责写入数据)从服务器 Wg63 192.168.0.156 (负责只读数据) 实验思路: 下载Mysql-proxy,在代理服务器Wg61上安装lua语言 Wg61安装proxy,添加/etc/profile的环境变量参数 修改proxy配置文件参数,测试读写分离 搭建主从服务器,创建测试数据库表并授权用户访问权限 启动Mysql-proxy测试读写分离 测试从服务器挂

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

mysql数据库主从同步

环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168.108.140 1.导出主服务数据,将主备初始数据同步 master: //从master上导出需要同步的数据库信息 mysqldump -u*** -p*** --database test > test.sql //将master上的备份信息传输到slave上 scp /root/test.sq

mysql数据库主从同步配置教程--数据库同步

背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的方法来实现.下面把步骤记录一下. 环境和拓扑 操作系统:Centos6.6 X64 mysql版本:5.1.73 Master: 10.6.1.210 Slave:  10.6.1.211 需求: 实现Master上test库同步到Slave上,但是禁止同步该库下的AA表 1.配置Master上的my.cnf #vim  /etc/my.cnf 添加内容到[mysqld]下,设定只同步test 数据库: [mysqld] l

谈谈Mysql数据库主从同步延迟分析及解决方案

一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 log dump 线程,用来给从库I/O线程读取binlog: 3. 从库的I/O Thread去请求主库的binlog,并将得到的binlog日志写到relay log文件中: 4. 从库的SQL Thread会读取relay log文件中的日志解析成具体操作,将主库的DDL和DML操作事件重放. 关

mysql数据库主从同步(交互式)

mysql数据库主从同步交互式配置步骤,本文以一台mysql数据库多实例3306和3307为例进行配置,3306为主库,3307为从库(多台单实例与一台多实例配置是一样的) 一.my.cnf文件配置 1.修改my.cnf配置文件,主数据库3306要打开log-bin,server-id不能一样 [[email protected] ~]# egrep"log-bin|server-id" /data/{3306,3307}/my.cnf /data/3306/my.cnf:log-bi

MySQL数据库主从同步部署

MySQL数据库主从同步部署: 环境 Mater:   CentOS6.4  mysql5.5.38  192.168.107.133 Slave:   CentOS6.4  mysql5.5.38  192.168.107.135 1.导出主服务数据,将主备初始数据同步 master: //从master上导出需要同步的数据库信息 mysqldump -u*** -p*** --database test > test.sql //将master上的备份信息传输到slave上 scp /roo

搭建mysql的主从复制和读写分离

搭建mysql的主从复制和读写分离   +--------+                          (write)        +--------+                    | client |                 +---------------------+| master |     +--------+|                   |                        +--------+|           |      

【转】MySQL数据库主从同步管理

MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙述mysql主从的管理. MYSQL主从同步的作用 (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high availability)和容错 MYSQL主从同步的原理 关于MYSQL的主从同步,最主要的是要了解MYSQL的主从同步是如何工作的也即