MySQL 主從同步與分離
在實際生產環境中,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,無論是在安全性、高可用性,還是高並發等各個方面都是完全不能滿足實際需求的,因此,一般來說都是通過主從復制的方式來同步數據,再通過讀寫分離來提升數據庫的並發負載 能力這樣的方案來進行部署與實施。
MySQL的主從復制和MySQL的讀寫分離兩者有著緊密聯系,首先要部署主從復制,只有主從復制完成了,才能在此基礎上進行數據的讀寫分離。
.
.
模擬搭建使用的服務器拓撲圖如下
.
.
實驗環境如下:
服務器安裝MySQL5.5版本
.
.
實驗包下載地址:
鏈接: https://pan.baidu.com/s/16n0zJBGeB3iGyRvXzxL5xA 密碼: tcsn
.
實驗步驟如下:
.
.
1 . 在主服務器上
先關閉防火墻,並檢查是否安裝了ntp,這裏是默認安裝好的
systemctl stop firewalld.service
setenforce 0 #關閉防火墻
rpm -q ntp #檢查是否安裝ntp
.
.
2 . 進入配置文件進行配置
vim /etc/ntp.conf
server 127.127.200.0 #本地是時鐘源
fudge 127.127.200.0 stratum 8 #設置時間層級為8
systemctl start ntpd #開啟時鐘源
.
.
3 .接下來在從服務器1和從服務2做相同的操作
systemctl stop firewalld.service
systemctl start ntpd #開啟時鐘源
/usr/sbin/ntpdate 192.168.200.133 #向master同步時間
.
.
4 .回到主服務器
vim /etc/my.cnf #進行配置文件
server-id = 11 #服務器編號
......
log-bin=master-bin #更改日誌名稱,方便區別
log-slave-updates=true #允許從服務器日誌文件同步主服務器日誌文件
.
.
5 .進入數據庫
GRANT REPLICATION SLAVE ON . TO ‘myslave‘@‘192.168.200.%‘ IDENTIFIED BY ‘123123‘; #給予權限
show master status; #查看日誌文件名
.
.
6 .回到從服務器,兩臺從服務器做相同操作
vim /etc/my.cnf #進行配置文件
server-id = 22 #更改端口號。註意,從服務器2的端口號不能與主、從服務器1相同
relay-log=relay-log-bin #指定從服務器日誌文件
relay-log-index=slave-relay-bin.index #指定文件名與位置,
systemctl restart mysqld.service #重啟數據庫
.
.
7 . 進入數據庫
change master to master_host=‘192.168.200.133‘,master_user=‘myslave‘,master_password=‘123123‘,master_log_file=‘master-bin.000001‘,master_log_pos=339; #給憑證
start slave; #開啟從服務器身份
show slave status \G; #查看同步狀況
Slave_IO_Running: Yes
Slave_SQL_Running: Yes #顯示yes 說明已經開始同步
.
.
8 .這時候就可以在主服務器數據庫中,新建一個數據庫,驗證是否同步
同步成功
.
.
主從同步做好後,下面進行讀寫分離操作
.
.
1 .進入代理服務器——amoeba,首先還是老一步操作
systemctl stop firewalld.service
setenforce 0 #關閉防火墻
mkdir /ooo #創建一個目錄,掛載用
mount.cifs //192.168.200.1/gx /ooo/ #將文件掛載到目錄內
cd /ooo/ #進入目錄
cp jdk-6u14-linux-x64.bin /usr/local/ #拷貝到系統文件下,讓系統能識別
cd /usr/local/
./jdk-6u14-linux-x64.bin #安裝java環境包
.
.
2 . 將文件移動或復制到/usr/目錄下
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=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile #刷新生效
.
.
3 . 解壓文件到指定目錄下
mkdir /usr/local/amoeba #創建一個文件夾
cd /ooo/
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ #將壓縮文件解壓到此目錄文件下
.
.
4 . 給予文件相對的權限
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
amoeba start|stop #代表安裝成功
.
.
5 . 在三臺MySQL上添加權限開放給amoeba訪問
grant all on . to ‘test‘@‘192.168.201.%‘ identified by ‘123123‘;#amoeba使用test帳戶訪問三臺數據庫
.
.
6 . 然後回到代理服務器,進行配置文件的操作
cd /usr/local/amoeba
vim conf/amoeba.xml
30行---
<property name="amoeba">root</property> #更改用戶名
32行---
<property name="password">123123</property> #密碼
115行--117-
<property name="defaultPool">master</property> #最大權限 給master
<property name="writePool">master</property> #寫入權限 給master
<property name="readPool">slaves</property> #讀取權限
.
.
7 . 進入下一個配置文件,進行配置
vim conf/dbServers.xml
--26--29---去掉註釋
<property name="user">test</property> #登錄身份
<property name="password">123.com</property> #登錄密碼
--42-47---主服務器
< dbServer name="master" parent="abstractServer"> #主服務為master
< property name="ipAddress">192.168.201.131</property> #主服務器ip地址
--50-54--從服務器1
< dbServer name="slave1" parent="abstractServer"> #從服務器1
<property name="ipAddress">192.168.201.129</property> #ip地址
復制6行做從服務2
--63---
< dbServer name="slaves" virtual="true"> #從服務器池
--70---
<property name="poolNames">slave1,slave2</property> #定義兩臺從服務
.
.
8 . 到此,就可以開啟服務了
/usr/local/amoeba/bin/amoeba start& #開啟amoeba服務
.
.
9 .進入客戶端
systemctl stop firewalld.service
setenforce 0 #關閉防火墻
yum install mysql -y #安裝MySQL命令
.
.
10 .mysql -u amoeba -p123123 -h 192.168.200.131 -P8066 #登錄到群集數據庫
.
.
此時,從服務器只能讀取主服務器,客戶端能讀取從服務器,寫入到主服務器
MySQL 主從同步與分離