Mysql主從複製,讀寫分離之Mysql-proxy實現

 MySqL的主從複製和讀寫分離

前面寫過mysql數據庫的讀寫分離是用 Amoeba來實現的,下面來用Mysql-proxy來實現一下

一、 MySqL數據庫的主從複製 mysql

在主服務器上的操做 linux

修改配置文件/etc/my.cnf(也不用修改的主要看下面所提到的是否同樣) c++

# vim /etc/my.cnf sql

/修改:  數據庫

server-id = 1 (默認是1) 開啓二進制日誌定位到:log-bin  vim

log-bin=mysql-bin 這個也是默認開啓的 修改完成後從新啓動mysql服務  服務器

# service mysqld restart ide

鏈接到mysql數據庫建立用戶並賦於複製的權限 測試

mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'172.16.%.%' IDENTIFIED BY '123456'; lua

對從 服務器

vim /etc/my.cnf

修改:   

servier-id = 11   ## id號必定不能與主服務器的id號相同

關掉二進制日誌

#log-bin=mysql-bin

添加以下內容:   ##這些是開啓中繼日誌的

relay-log=relay-bin

relay-log-index=relay-bin.index

修改完成後重啓一下服務

# service mysqld restart

好了,配置文件修改完成了,重啓MySqL

由於主數據庫上有數據,爲了方便,能夠把主mysql上的數據備份,而後把數據庫清空只留下原始數據庫(也就是剛安裝好mysql後的數據庫,而後所有備份下來,再導入從數據庫中。這樣作能夠確保主從複製的準確性,也會防止數據在導入導出的時候不會出錯。),而後繼續下面的步驟。

在主從服務器上各自清空一下日誌,也是同時用命令:

在主服務器上:mysql>flush master;

在從服務器上:mysql> flush slave;

這樣作要使主從服務器的日誌位於同一個結點,不然這樣會易出錯。

清空日誌後就能夠在從服務器上鍊接到主服務器上了

mysql>    CHANGE MASTER TO MASTER_HOST='172.16.35.1',MASTER_USER='repl',MASTER_PASSWORD='123456';

 

用命令:mysql> show slave status\G 來查看一下是否已經鏈接上

若是出現如下結果代表鏈接成功

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

若是有一個結果爲No說明主從同步失敗

失敗的緣由有多種:

最多見的狀況分別是:

1、在主服務器上的用戶可能出錯

2、沒有從新滾動一下主從服務器的日誌,在鏈接前有必要從新滾動一下。

下面就能夠測試了。

在主服務器上建立或者刪除數據庫、表,就能夠同步到從服務器上了。

在從服務器上也能夠查看到從服務器要比主服務器慢多少時間用命令:

mysql> show slave status\G

定位到:Second_Behind_Master0 0,表示時間說明沒有延遲)

主從同步後就能夠把前面備份的數據從主MySqL服務器上導入,這樣從服務器會從主服務器上同步下來。數據導入以後就完成了。

 

 

 

 

 

 

下面來講一下MySqL的讀寫分離器MySql-Proxy

MySql Proxy是一個處於MySql Client端和MySql Server端之間的簡單程序,它能夠監測、分析或改變它們的通訊。它使用靈活,沒有限制,常見的用途包括:負載平衡、故障分析、查詢過渡和修改等。MySqL Proxy就是這麼一箇中間層代理,簡單地說,MySql Proxy就是一個鏈接池,負責將前臺應用的鏈接請求轉發給後臺的數據庫,而且經過使用Lua腳本,實現複雜的鏈接控制和過渡,從而實現讀寫分離和負載平衡。

對於應用來講,Mysql Proxy是徹底透明的,應用則只是須要鏈接到MySql Proxy的監聽端口便可。固然,這樣Proxy機器可能成爲單點失效,但徹底可使用多個Proxy機器做爲冗餘,在應用服務器的鏈接池配置中配置多個Proxy的鏈接參數便可。

MySql Proxy更強大的一項功能是實現「讀寫分離」,基本原理是讓主數據庫處理事務性查詢,讓從數據庫處理SELECT查詢,數據複製(Replication)用來把主庫的變動同步到集羣中的從庫上。在生成MySqlM-S結構後,實現讀寫分離,須要使用MySql Proxy。目前MySql Proxy版本爲0.8.2

MySql Proxy0.8.2安裝步驟

先從官方地址http://dev.mysql.com/downloads/mysql-proxy/下載源碼包。安裝以前的先決條件以下:

# libevent1.x或者更高

#glib2 2.6.0或者更高

#lua5.1.x或者更高

#pkg-config

#libtool 1.5或者更高

#mysql5.0.x或者更高的開發庫

 

root用戶

yum install gcc gcc-c++ autoconf libtool pkgconfig ncurses ncurses-devel

\\\這些都要提早安裝好。

安裝libevent-2.0.13-stable.tar.gz

# tar zxvf libevent-2.0.13-stable.tar.gz

# cd libevent-2.0.13-stable

# ./configure

# make

# make install

安裝glib-2.18.4.tar.gz

# tar zxvf glib-2.18.4.tar.gz

# cd glib-2.18.4

# make

# make install

安裝:redline-6.1.tar.gz

# tar zxvf redline-6.1.tar.gz

# cd redline-6.1

# ./configure

# make

# make install

完成後,爲了讓動態連接庫爲系統所共享,運行ldconfig命令。

# ldconfig

# ldconfig -v

\\\這個是顯示正在掃描的目錄及搜索到的動態連接庫,還有它所建立的鏈接的名字。

安裝lua-5.1.4.tar.gz

tar zxvf lua-5.1.4.tar.gz

cd lua-5.1.4

make linux

make install

cp etc/lua.pc /usr/local/lib/pkgconfig/

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

安裝mysql-proxy-0.8.2.tar.gz

tar zxvf mysql-proxy-0.8.2.tar.gz

cd mysql-proxy-0.8.2

./configure --prefix=/usr/local/mysql-proxy

make && make install

cp lib/rw-splitting.lua /usr/local/lib/

cp lib/admin.lua /usr/local/lib/

建立mysql-proxy的啓動配置文件

vim /etc/mysql-proxy.cnf

文件內容以下:

[mysql-proxy]

admin-username = admin

admin-password = oreilly

admin-lua-script = /usr/local/lib/admin.lua

proxy-read-only-backend-addresses = 172.16.35.2  \\\只讀數據庫

proxy-backend-addresses = 172.16.35.1   \\\\讀寫數據庫

proxy-lua-script = /usr/local/lib/rw-splitting.lua  \\\讀寫分離腳本

log-file = /var/log/mysql-proxy.log  \\\日誌文件

log-level = debug

daemon = true

keepalive = true

修改這個文件的權限爲660不然沒法啓動。

# chmod 660 /etc/mysql-proxy.cnf

修改讀寫分離腳本,讓測試更容易。

Lua腳本默認最小4個最大8個以上的客戶鏈接纔會實現讀寫分離(這是由於Mysql Proxy會檢測客戶端鏈接,當鏈接沒有超過min_idle_connections預設的值時,不會進行讀寫分離,即查詢操做會發生到Master上),現改成最小1個,最大2

vim /usr/local/lib/rw-splitting.lua

修改:

min_idle_connections = 1,

max_idle_connections = 2,

啓動:

/usr/local/mysql-proxy/bin/mysql-proxy -P 172.16.35.2:8066 --proxy-fix-bug-25371 --defaults-file=/etc/mysql-proxy.cnf

 

#mysql-proxy選項說明

能夠用 mysql-proxy –help-all來查看

管理功能選項:

--admin-address=host:port指定一個mysql-proxy的管理端口,默認是4041

--admin-username=<string> username to allow to log in

--admin-password=<string>password to allow to log in

--admin-lua-script=<filename>script to execute by the admin plugin

代理功能選項:

-P ,--proxy-address=<host:port>mysql-proxy服務器的監聽端口,默認是4040

-r--proxy-read-only-backend-addresses=<host:port>只讀Slave的地址和端口,默認爲不設置。

-b--proxy-backend-addresses=<host:port>遠程Master地址和端口,可設置多個failoverload balance

--proxy-skip-profiling關閉查詢分析功能,默認是打開的

--proxy-fix-bug-25371修正mysqllibmysql版本大於5.1.12的一個#25371Bug

-s--proxy-lua-script=<file>指定一個Lua腳本控制mysql-proxy的運行和設置,這個腳本在每次新建鏈接和腳本發生修改時將從新調用。

其餘選項:

--defaults-file=<file>配置文件,能夠把mysql-proxy的參數信息置入配置文件裏,這樣作比較方便。

--daemon mysql-proxy 以守護進程的方式運行。

--pid-flie=file設置mysql-proxy的存儲PID文件的路徑。

--keepalive try to restart the proxy if it crashed,保持鏈接啓動進程會有2 個,一號進程用來監視二號進程,若是二號進程死掉自動重啓Proxy,這是新版MySql Proxy 增長的Keepalived功能,它修正了之前的Mysql Proxy容易死掉的bug 開啓此功能。

 

 

 

以上就是MysqL Proxy的所有過程。

相關文章
相關標籤/搜索