失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql慢sql增加读写分离_MySQL主从同步+读写分离

mysql慢sql增加读写分离_MySQL主从同步+读写分离

时间:2022-11-22 10:11:01

相关推荐

mysql慢sql增加读写分离_MySQL主从同步+读写分离

MySQL主从同步+读写分离

实验拓扑:

三台mysql数据库:

192.168.80.101 主服务器 mysql

192.168.80.102 从1服务器 mysql

192.168.80.103 从2服务器 mysql

192.168.80.104 调度器Amoeba服务器 jdk、amoeba

192.168.80.105 mysql客户端 mysql

第一部分:三台mysql服务器主从同步

一、mysql主服务器配置:192.168.80.101

1、安装配置NTP时间服务器:

yum install -y ntp //建立时间同步环境,在主节点上搭建时间同步服务器

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

:x

service ntpd restart //重启ntp服务器

service firewalld stop

setenforce 0 //关闭防火墙和安全SELinux

2、源码编译安装MYSQL:

省略

/13572519/2116742

3、配置master主服务器的MYSQL:

vi /etc/f //在 [mysqld]下面配置

server_id = 11 //修改

log_bin=master_bin //开启二进制日志

log_slave_updates=true //在mysqld区域修改添加这三行,server_id主从都不一致,允许从服务器来主服务器更新数据库

:x

service mysqld restart

mysql -u root -p //登录数据库

GRANT REPLICATION SLAVE ON . TO 'myslave'@'192.168.80.%' IDENTIFIED BY '123456'; //为所有从服务器在80.0网段到主服务器读取二进制日志的权限

FLUSH PRIVILEGES; //刷新权限

show master status; //查看当前库的状态,要记下 Position 列的值

二、mysql从服务器配置:192.168.80.102和192.168.80.103

service firewalld stop

setenforce 0

1、安装配置NTP时间服务器:

yum install -y ntpdate

ntpdate 192.168.80.101 //手动与主服务器时间节点进行同步(我的操作此步,mysqld不能重启)

echo '/30 * /usr/sbin/ntpdate 192.168.80.101' >> /var/spool/cron/root //写计划任务,每隔三十分钟,自动同步时间

crontab -l //查看计划任务

2、源码编译安装MYSQL:

省略

/13572519/2116742

3、配置两台master从服务器的MYSQL:

vi /etc/f //[mysqld]下面

server_id = 22 // 各服务器之间的server_id的值不能相同从2设置33

relay_log=relay-log-bin

relay_log_index=slave-relay-bin.index

:x

service mysqld restart

mysql -u root -p //登录数据库

--注意master_logpos=的值会变化,要在主上使用show master status;查看一下,注意 -和

change master to master_host='192.168.80.101',master_user='myslave',master_password='123456',master_log_file='master_bin.000002',master_log_pos=154;

start slave;

show slave status \G //以下两个选项需要是Yes才正确

**二、验证MYSQL主从同步:

在主服务器上新建库并在从服务器上验证是否同步

mysql -u root -p

create database master;

show databases; //主服务器创建好数据库,在从服务器上查看,从服务器上也会时时同步*

主从同步实验成功!!!

第二部分:配置mysql服务器读写分离

一、在Amoeba服务器上配置:192.168.80.104**

service firewalld stop

setenforce 0

1、安装配置NTP时间服务器:

yum install -y ntpdate

ntpdate 192.168.80.101

echo '/30 * /usr/sbin/ntpdate 192.168.80.181' >> /var/spool/cron/root

crontab -l

2、安装JDK:

Amoeba(变形虫)是基于JDK开发的,所以安装之前要先安装JDK

使用WinSCP将JDK和Amoeba安装包传到服务器上

tar xf jdk-8u144-linux-x64.tar.gz -C /opt

cp -rv /opt/jdk1.8.0_144/ /usr/local/java

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

:x

source /etc/profile //立即生效

yum install -y unzip

unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/

mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba

chmod -R 755 /usr/local/amoeba/

vi /usr/local/amoeba/jvm.properties

32行: JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"

JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k" //增加此行

:x

4、制作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

chmod +x /etc/init.d/amoeba

chkconfig --add amoeba

service amoeba start

ctrl+z // amoeba启动比较慢,放到后台暂停运行

bg //后台继续运行此进程

netstat -anpt | grep 8066 //默认监听在8066端口

二、配置读写分离

1、主服务器创建test数据库

mysql -u root -p

create database test;

show databases;

2、在三台mysql数据库中为amoeba授权

GRANT ALL ON . TO test@'192.168.80.%' IDENTIFIED BY '123';

FLUSH PRIVILEGES;

3、在调度服务器Amoeba上配置配置文件

vi /usr/local/amoeba/conf/amoeba.xml

---28行-----设置客户端连接amoeba服务器时使用的用户名和密码----

amoeba

123456 //以上配置用于客户端连接用户名密码

---83-88行--去掉注释-同时把默认的server1改成master,把默认的servers改成 slaves

master

master

slaves

vi /usr/local/amoeba/conf/dbServers.xml

---26-28行--------

test

123

主服务器配置:

43

46 192.168.80.101

从服务器1配置:

--53-从服务器地址-

192.168.80.102

从服务器2配置:

//复制slave1相关代码,设置从2服务器

192.168.80.103/property>

//以下两行修改

--末尾--

slave1,slave2

-------------------------------------------------------------注意--------------------------------------------------------------------------------

test //数据库中要有此处定义的数据库,否则客户端连接后会报如下错误:

ERROR 1044 (42000): Could not create a validated object, cause: ValidateObject failed

service amoeba restart

ctrl+z //停止并放到后台

bg //重启

netstat -anpt | grep java

第三部分:测试验证

一、测试客户端:192.168.80.105

service firewalld stop

setenforce 0

1、 源码编译安装Mysql:

省略

/13572519/2116742

2、 测试读写分离:

mysql -u amoeba -p123456 -h 192.168.80.104 -P8066 //amoeba地址

show databases;

//在MASTER上新建的数据库或者里面的表,两台从服务器会同步--通过amoeba操作的

use test;

create table liu (id int(10),name varchar(10),address varchar(20));

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

在两台从上停止从服务后:

stop slave;

测试一:在主服务器上插入的内容不会同步-通过amoeba操作的

在客户端上操作:

insert into liu values('1','hahahha','this_is_master');

在主服务器上查看:

use test;

select * from liu;

**结论:客户端写数据写到主服务器上

测试二:在从服务器1上新建内容*use test;

insert into liu values('2','liu','this_is_slave1');

----从服务器2上新建内容----

use test;

insert into liu values('3','liu','this_is_slave2');

------在客户端amoeba上测试----第一次会向从服务器1读数据-第二次会向从2读取

select from liu;

轮流读取从1从2上的内容

结论:客户端读取数据在从服务器读取,主服务器写的1数据读取不到

测试三:通过客户端连接数据库后写入的数据只有主会记录,然后同步给从-从服务器不会记录,从而实现了读写分离。

客户端写入:

insert into liu values('4','liu','write_test');

在客户端amoeba上看不到新插入的数据--因为同步没有开启-----只有主服务器上可以看到数据。

select from liu; //客户端查看,没有4记录

select from liu; //主服务器查看,有4记录

在客户端开启同步后,主服务器上数据会同步到各从服务器中,但是从服务器上自己增加的数据不会同步,只在从服务器本地保存

start slave;

select from liu; //两台从服务器上操作

select from liu; //在客户端查看会看到主上同步过来的数据,以及自己本地增加的数据,但是看不到其它从上自己增加的数据

**结论:

1、主从同步

2、关闭主从同步的话,客户端写的数据写在主服务器上面,在从服务器上轮流读取。

3、从服务器只可以读取本地数据,以及同步的主上面的数据。

实验成功!!!

**

如果觉得《mysql慢sql增加读写分离_MySQL主从同步+读写分离》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。