Mysql主從複製與讀寫分離

MySQL主從複製與讀寫分離

一、實驗環境

wKioL1mcecTiWCLBAAB6sLppdB0526.png

wKiom1mcedqwnIwpAAAKaIdLwlQ092.png

二、實驗步驟

先部署主從複製,只有主從複製完成了,才能在此基礎上進行讀寫分離。

MySQL支持的複製類型:

基於語句複製在主服務器上執行sql語句,在從服務器上執行同樣的語句,MySQL默認採用基於語句的複製,效率較高。

基於行復制把改變的複製過去而不是把命令在服務器上執行一遍

混合類型複製:默認採用基於語句複製,一旦發現基於語句無法精確複製時,就會採用基於行復制。、

MySQL讀寫分離分爲兩種:

基於程序代碼內部實現:在代碼中根據selectinsert進行路由分類,這類方法也是目前生產環境應用廣泛的。優點:性能好,不需要增加額外的設備作爲硬件開支。缺點:需要開發人員來實現,運維人員無從下手。

基於中間代理層實現:代理一般位於客戶端和服務器之間,代理服務器接收到客戶端請求後,通過判斷後轉發到後端數據庫,有兩個代理程序。

1)MySQL-ProxyMySQL-ProxyMySQL的開源項目。通過自帶的lua腳本進行SQL判斷,雖然是MySQL官方產品,但是MySQL並不建議應用到生產環境。

2)Amoeba。有陳思儒開發,該程序有java語言開發,阿里巴巴用於生產環境。不支持事務和存儲過程。

搭建MySQL主從複製

1、在Master上搭建時間同步服務器,建立時間同步環境

安裝NTP

#yum   -y   install  ntp

配置NTP

#vim  /etc/ntp.conf

server   127.127.1.0

fudge 127.127.1.0  stratum  8

#service  ntpd  restart

2、在從節點上進行時間同步

#yum   -y  install ntpdate

#/usr/sbin/ntpdate   192.168.1.8

3、在每臺服務器上關閉iptables或者指定端口進行開放。

#service     iptables  stop

#chkconfig   iptables  off

4、安裝MySQL數據庫,在MasterSlave 1Slave 2上安裝。

編譯安裝MySQL數據庫。

#yum   install  -y  ncurses-devel  gcc  gcc-c++

#cd  /usr/src

#tar   zxf  cmake-2.8.6.tar.gz

#cd  cmake-2.8.6

#./configure   &&  gmake   &&  gmake install

#cd  /usr/src

#tar   zxf  mysql-5.5.22.tar.gz

#cd  mysql-5.5.22

#cmake   -DCMAKE-INSTALL-PREFIX=/usr/local/mysql  -DDEFAULT_CHARSET=utf8  -DDFAULT_COLLATION=utf8_general_ci  -DWITH_EXTRA_CHARSETS=all   -DSYSCONFDIR=/etc

#make && make  install

優化調整

#cp    support-files/my-medium.cnf   /etc/my.cnf

#cp  support-files/mysql.server   /etc/rc.d/init.d/mysqld

#chmod   +x  /etc/rc.d/init.d/mysqld

#chkconfig  --add  mysqld

#echo PATH=$PATH:/usrlocal/mysql/bin  >> /etc/profile

#. /etc/profile

初始化數據庫

#groupadd   mysql

#useradd   -M   -s  /sbin/nologin  -g  mysql  mysql

#chown   -R   mysql:mysql   /usr/local/mysql

#/usr/local/mysql/scripts/mysql_install_db  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql   

啓動MySQL服務

#service   mysqld   start

#chkconfig    mysqld  on

#mysqladmin    -u   root  password  pwd123

5、配置MySQL  Master 主服務器  

在/etc/my.cnf中修改或者添加下面內容

#vim  /etc/my.cnf        

server-id    =  11                 修改

log-bin=master-bin                   修改

log-slave-updates=true                 增加

重啓MySQL服務

#service   mysqld   restart

登錄mysql程序,給從服務器授權。

wKioL1mcefaTlCkoAABKee8MzoY913.png-wh_50

File列:顯示日誌名。

Postion:顯示偏移量。

6、配置各從服務器。

在/etc/my.cnf中修改或者增加下面內容

#vim   /etc/my.cnf

server-id   = 22                  修改

relay-log=relay-log-bin                  增加

relay-log-index=slave-relay-bin.index         增加

注意:server-id不能與主服務器相同

重啓MySQL服務

#service   mysqld  restart

登錄MySQL,配置同步

按主服務器結果更改下面命令中master_log_file和master_log_pos參數。

#mysql  -u  root  -p

wKioL1mceh2wmYKcAABVOLkZadY111.pngwKiom1mcembwdtQ9AAC4QZbPl2k858.png

注意:如果Slave_IO_Running:NO並且報錯

wKiom1mcenTjiKd_AAAm4D4diP8489.png解決辦法從服務器先停止slave

mysql> slave stop;

master服務器登錄mysql

記錄master的bin的位置,

例如:mysql> show  master  status;

wKioL1mceoPwGSPVAABKpFHyMZk779.png

日誌爲master-bin.000001

刷新日誌:mysql> flush logs;

因爲刷新日誌file的位置會+1,即file成爲:master-bin.000002

到從服務器執行

wKiom1mceqbQhFOrAABVNq2oqwI342.pngwKioL1mceqzD3XgIAACkWUONYW4992.png

解決完畢!!!

7、驗證主從複製效果。

主、從服務器登錄MySQL。

#mysql  -u  root  -p

Mysql>  show  databases;

兩臺數據庫執行結果應該相同。

在主服務器上新建數據庫zc。

mysql> create  database  zc;

主,從服務器上分別查看數據庫,顯示數據庫相同,則主從複製成功。

wKiom1mcesXxhM7vAAA2eKWgmzE419.png

搭建MySQL讀寫分離

Amoeba(變形蟲):爲應用層訪問MySQL充當SQL的路由功能,並具有負載均衡,高可用,SQL過濾,讀寫分離,數據切片的功能,可併發請求多臺數據庫。

在主機Amoeba上安裝java環境。

#chmod  +x  jdk-6u14-linux-x64.bin

#./jdk-6u14-linux-x64.bin     根據提示按Enter鍵完成即可或按yes

#mv  jdk1.6.0_14/  /usr/local/jdk1.6

#vim  /etc/profile

wKioL1mcetvCZyQKAABo6Tdnvxk658.png

#source  /etc/profile

#java  -version

java version "1.6.0_14"

Java(TM) SE Runtime Environment (build 1.6.0_14-b08)

Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

Java環境配置成功。

安裝並配置Amoeba軟件

#mkdir  /usr/local/amoeba

#tar  zxf  amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba/

#chmod  755  /usr/local/amoeba/

#/usr/local/amoeba/bin/amoeba

amoeba  start|stop              顯示此內容說明Amoeba安裝成功。

配置Amoeba讀寫分離,兩個Slave讀負載均衡。

Master、Slave 1Slave 2中開放權限給Amoeba訪問。

mysql > grant  all  on *.*  to  test@192.168.1.%  identified  by   123.com;

編輯amoeba.xml配置文件

#vim  /usr/local/amoeba/conf/amoeba.xml

修改後的內容爲黑體字的部分

wKioL1mceu7jqeNkAABoBZ-LUyk166.png修改後的內容爲黑體字的部分,注意刪除註釋。

wKiom1mcexrx3kryAABSoxSaoDI089.png

編輯dbServer.xml配置文件

#vim  /usr/local/amoeba/conf/dbServer.xml

修改後的爲黑體字的部分

wKioL1mcex_hqsymAAA-H5_gIS0789.png

修改後如圖所示配置主、從服務器

wKiom1mce13gkLcQAAEWLbe-oio724.png

wKioL1mce3XBd2w0AAA-FurEpOA266.png

配置無誤後,可啓動Amoeba軟件,其默認端口爲tcp 8066.

#/usr/local/amoeba/bin/amoeba  start&

wKiom1mce4yAmXJ9AAAY0zLpJ7o576.png在client主機上測試:

#yum  install  -y mysql

然後可以通過代理訪問MySQL

#mysql  -u amoeba  -p  123456  -h  192.168.1.12  -P 8066

mysql> 

master上創建一個表,同步到各服務器上,然後關掉各從服務器的Slave功能,再插入其他語句。

wKioL1mce5izsB6aAABadLmtopU164.png分別在兩臺服務器上;

mysql > stop slave;

然後在主服務器上插入一行

wKiom1mce7XA0gveAAAjD74Vd3g115.png

從服務器上同步了表,手動插入其他內容。

Slave 1

wKioL1mce73goJYKAAA0WE-W5vY950.png

Slave 2

wKiom1mce9WwuvkKAAA0KsNYFFM136.png

測試讀操作

在client主機上三次查詢的結果如圖所示:

wKioL1mce9egGGLHAAB9J2BwBrw304.png測試寫操作:

在client主機上插入一條語句:

wKiom1mcfArS3ubJAAAiybYrIa4072.png

但在client上查詢不到,最終在Master上才能看到下面這條語句內容,說明寫操作在maste服務器上

wKiom1mcfB2SDATIAAAt4o0wBy8979.png

MySQL數據庫主從複製與讀寫分離介紹到此結束。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章