mysql慢sql增加读写分离_MySQL主从同步+读写分离
MySQL主從同步+讀寫分離
實(shí)驗(yàn)拓?fù)?#xff1a;
三臺mysql數(shù)據(jù)庫:
192.168.80.101 主服務(wù)器 mysql
192.168.80.102 從1服務(wù)器 mysql
192.168.80.103 從2服務(wù)器 mysql
192.168.80.104 調(diào)度器Amoeba服務(wù)器 jdk、amoeba
192.168.80.105 mysql客戶端 mysql
第一部分:三臺mysql服務(wù)器主從同步
一、mysql主服務(wù)器配置:192.168.80.101
1、安裝配置NTP時間服務(wù)器:
yum install -y ntp //建立時間同步環(huán)境,在主節(jié)點(diǎn)上搭建時間同步服務(wù)器
vi /etc/ntp.conf
restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap //去掉#,并修改其網(wǎng)段
server 127.127.1.0 //以下兩行新加
fudge 127.127.1.0 stratum 8 //設(shè)置時間服務(wù)器的層級為8級,頂級是0
:x
service ntpd restart //重啟ntp服務(wù)器
service firewalld stop
setenforce 0 //關(guān)閉防火墻和安全SELinux
2、源碼編譯安裝MYSQL:
省略
https://blog.51cto.com/13572519/2116742
3、配置master主服務(wù)器的MYSQL:
vi /etc/my.cnf //在 [mysqld]下面配置
server_id = 11 //修改
log_bin=master_bin //開啟二進(jìn)制日志
log_slave_updates=true //在mysqld區(qū)域修改添加這三行,server_id主從都不一致,允許從服務(wù)器來主服務(wù)器更新數(shù)據(jù)庫
:x
service mysqld restart
mysql -u root -p //登錄數(shù)據(jù)庫
GRANT REPLICATION SLAVE ON . TO 'myslave'@'192.168.80.%' IDENTIFIED BY '123456'; //為所有從服務(wù)器在80.0網(wǎng)段到主服務(wù)器讀取二進(jìn)制日志的權(quán)限
FLUSH PRIVILEGES; //刷新權(quán)限
show master status; //查看當(dāng)前庫的狀態(tài),要記下 Position 列的值
二、mysql從服務(wù)器配置:192.168.80.102和192.168.80.103
service firewalld stop
setenforce 0
1、安裝配置NTP時間服務(wù)器:
yum install -y ntpdate
ntpdate 192.168.80.101 //手動與主服務(wù)器時間節(jié)點(diǎn)進(jìn)行同步(我的操作此步,mysqld不能重啟)
echo '/30 * /usr/sbin/ntpdate 192.168.80.101' >> /var/spool/cron/root //寫計(jì)劃任務(wù),每隔三十分鐘,自動同步時間
crontab -l //查看計(jì)劃任務(wù)
2、源碼編譯安裝MYSQL:
省略
https://blog.51cto.com/13572519/2116742
3、配置兩臺master從服務(wù)器的MYSQL:
vi /etc/my.cnf //[mysqld]下面
server_id = 22 // 各服務(wù)器之間的server_id的值不能相同從2設(shè)置33
relay_log=relay-log-bin
relay_log_index=slave-relay-bin.index
:x
service mysqld restart
mysql -u root -p //登錄數(shù)據(jù)庫
--注意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 //以下兩個選項(xiàng)需要是Yes才正確
**二、驗(yàn)證MYSQL主從同步:
在主服務(wù)器上新建庫并在從服務(wù)器上驗(yàn)證是否同步
mysql -u root -p
create database master;
show databases; //主服務(wù)器創(chuàng)建好數(shù)據(jù)庫,在從服務(wù)器上查看,從服務(wù)器上也會時時同步*
主從同步實(shí)驗(yàn)成功!!!
第二部分:配置mysql服務(wù)器讀寫分離
一、在Amoeba服務(wù)器上配置:192.168.80.104**
service firewalld stop
setenforce 0
1、安裝配置NTP時間服務(wù)器:
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開發(fā)的,所以安裝之前要先安裝JDK
使用WinSCP將JDK和Amoeba安裝包傳到服務(wù)器上
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啟動比較慢,放到后臺暫停運(yùn)行
bg //后臺繼續(xù)運(yùn)行此進(jìn)程
netstat -anpt | grep 8066 //默認(rèn)監(jiān)聽在8066端口
二、配置讀寫分離
1、主服務(wù)器創(chuàng)建test數(shù)據(jù)庫
mysql -u root -p
create database test;
show databases;
2、在三臺mysql數(shù)據(jù)庫中為amoeba授權(quán)
GRANT ALL ON . TO test@'192.168.80.%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;
3、在調(diào)度服務(wù)器Amoeba上配置配置文件
vi /usr/local/amoeba/conf/amoeba.xml
---28行-----設(shè)置客戶端連接amoeba服務(wù)器時使用的用戶名和密碼----
amoeba
123456 //以上配置用于客戶端連接用戶名密碼
---83-88行--去掉注釋-同時把默認(rèn)的server1改成master,把默認(rèn)的servers改成 slaves
master
master
slaves
vi /usr/local/amoeba/conf/dbServers.xml
---26-28行--------
test
123
主服務(wù)器配置:
43
46 192.168.80.101
從服務(wù)器1配置:
--53-從服務(wù)器地址-
192.168.80.102
從服務(wù)器2配置:
//復(fù)制slave1相關(guān)代碼,設(shè)置從2服務(wù)器
192.168.80.103/property>
//以下兩行修改
--末尾--
slave1,slave2
-------------------------------------------------------------注意--------------------------------------------------------------------------------
test //數(shù)據(jù)庫中要有此處定義的數(shù)據(jù)庫,否則客戶端連接后會報(bào)如下錯誤:
ERROR 1044 (42000): Could not create a validated object, cause: ValidateObject failed
service amoeba restart
ctrl+z //停止并放到后臺
bg //重啟
netstat -anpt | grep java
第三部分:測試驗(yàn)證
一、測試客戶端:192.168.80.105
service firewalld stop
setenforce 0
1、 源碼編譯安裝Mysql:
省略
https://blog.51cto.com/13572519/2116742
2、 測試讀寫分離:
mysql -u amoeba -p123456 -h 192.168.80.104 -P8066 //amoeba地址
show databases;
//在MASTER上新建的數(shù)據(jù)庫或者里面的表,兩臺從服務(wù)器會同步--通過amoeba操作的
use test;
create table liu (id int(10),name varchar(10),address varchar(20));
show tables; //三臺數(shù)據(jù)庫服務(wù)器上查看會是相同結(jié)果
在兩臺從上停止從服務(wù)后:
stop slave;
測試一:在主服務(wù)器上插入的內(nèi)容不會同步-通過amoeba操作的
在客戶端上操作:
insert into liu values('1','hahahha','this_is_master');
在主服務(wù)器上查看:
use test;
select * from liu;
**結(jié)論:客戶端寫數(shù)據(jù)寫到主服務(wù)器上
測試二:在從服務(wù)器1上新建內(nèi)容*use test;
insert into liu values('2','liu','this_is_slave1');
----從服務(wù)器2上新建內(nèi)容----
use test;
insert into liu values('3','liu','this_is_slave2');
------在客戶端amoeba上測試----第一次會向從服務(wù)器1讀數(shù)據(jù)-第二次會向從2讀取
select from liu;
輪流讀取從1從2上的內(nèi)容
結(jié)論:客戶端讀取數(shù)據(jù)在從服務(wù)器讀取,主服務(wù)器寫的1數(shù)據(jù)讀取不到
測試三:通過客戶端連接數(shù)據(jù)庫后寫入的數(shù)據(jù)只有主會記錄,然后同步給從-從服務(wù)器不會記錄,從而實(shí)現(xiàn)了讀寫分離。
客戶端寫入:
insert into liu values('4','liu','write_test');
在客戶端amoeba上看不到新插入的數(shù)據(jù)--因?yàn)橥經(jīng)]有開啟-----只有主服務(wù)器上可以看到數(shù)據(jù)。
select from liu; //客戶端查看,沒有4記錄
select from liu; //主服務(wù)器查看,有4記錄
在客戶端開啟同步后,主服務(wù)器上數(shù)據(jù)會同步到各從服務(wù)器中,但是從服務(wù)器上自己增加的數(shù)據(jù)不會同步,只在從服務(wù)器本地保存
start slave;
select from liu; //兩臺從服務(wù)器上操作
select from liu; //在客戶端查看會看到主上同步過來的數(shù)據(jù),以及自己本地增加的數(shù)據(jù),但是看不到其它從上自己增加的數(shù)據(jù)
**結(jié)論:
1、主從同步
2、關(guān)閉主從同步的話,客戶端寫的數(shù)據(jù)寫在主服務(wù)器上面,在從服務(wù)器上輪流讀取。
3、從服務(wù)器只可以讀取本地?cái)?shù)據(jù),以及同步的主上面的數(shù)據(jù)。
實(shí)驗(yàn)成功!!!
**
總結(jié)
以上是生活随笔為你收集整理的mysql慢sql增加读写分离_MySQL主从同步+读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql先排序再分组筛选_mysql
- 下一篇: 重邮计算机导师评价,李章勇_重庆邮电大学