mysql讀寫分離策略

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   ar   使用   sp   

為mysql做讀寫分離有兩個步驟:第一步為mysql配置主從複製;第二步用mysql-proxy為mysql做讀寫分離。

 

mysql主從複製

為了保證mysql主從複製搭建成功,最好保證兩台機器上mysql的版本一致。 在mysql中輸入如下命令查看版本資訊。

select version();

我使用的兩台mysql地址分別為192.168.10.42和192.168.10.49。42上的mysql作為master使用,49上的mysql作為slave使用。

主要資料庫配置

登入192.168.10.42,找到mysql的設定檔my.cnf。開啟my.cnf在[mysqld]下面加入如下內容

log-slow-queries=mysql-slow.loglog-error=mysql.errlog-bin=mysql-binserver-id=1

上面的配置主要是為了開啟主要資料庫的二進位日誌功能,在添加時最好先瀏覽一下my.cnf這個檔案,因為有的屬性可能已經存在了。添加完成後儲存退出,然後重啟mysql。

 

service mysqld restart

 

mysql重啟完成後,以root登入進去,給從資料庫分配主要資料庫的複製許可權,命令如下

 

grant replication slave on *.* to ‘user‘@‘192.168.10.49‘ identified by `password`;

 

其中“*.*”表示從資料庫能夠複製主要資料庫上的哪些庫和哪些表,“user”和“password”是主要資料庫分配給從資料庫的使用者名稱和密碼,根據需求自己設定,這裡僅作樣本使用。設定從資料庫時要用到這個使用者名稱和密碼。

 

許可權分配後輸入如下命令可以查看到剛才設定的使用者名稱,密碼和ip地址資訊。

 

select host,user,password from mysql.user;

 

然後查看一下主要資料庫的狀態資訊,輸入如下命令

show master status;

記住其中的File和Position欄位的值,配置從資料庫時會使用到。

 

從資料庫配置

 

登入到191.168.10.49,找到mysql的設定檔my.cnf,在[mysqld]下面加入如下內容

log-slow-queries=mysql-slow.loglog-error=mysql.errlog-bin=mysql-binserver-id=10

添加前最好瀏覽下這個檔案的原有配置,如果已經配置夠就不用再配置了。儲存退出後,重啟mysql服務

 

service mysqld restart

 

測試從資料庫是否能用主要資料指派的使用者名和密碼登入到主要資料庫。

mysql -uuser -ppassword -h192.168.10.42

如果不能登入,先檢查一下能否ping通。如果能夠ping桶,再檢查一下192.168.10.42上的防火牆是否配置了3306連接埠。沒有,則在iptables中添加3306連接埠的允許存取策略,然後重啟iptables。

 

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

 

重啟iptables

 

service iptables restart

 

這樣,應該就可以登陸到主要資料庫了。

以root登入從資料庫,配置slave資訊

 

change master to master_host=‘192.168.10.42‘, master_user=‘user‘ , master_password=‘password‘, master_log_file=‘mysql-bin.000005‘, master_log_pos=3065;

 

然後開啟從資料庫的slave狀態。

 

slave start;

 

查看slave資訊。

 

show slave status\G;

 

如果Slave_IO_Running與Slave_SQL_Running為YES,則slave狀態開啟成功。否則,根據mysqld.log日誌查看具體原因。

到此,mysql的主從複製就設定好了。在主要資料庫上添加刪除幾條資料,可以在從資料庫上同樣的操作。停掉從資料庫的slave狀態

 

slave stop;

 

再往主要資料庫中添加刪除資料,這些操作就不會影響到從資料庫了。

為mysql做讀寫分離功能

 

mysql的讀寫分離,使用mysql-proxy來實現。而mysql-proxy而依託lua指令碼,所以機器上密碼安裝lua。

 

安裝mysql-proxy的機器為192.168.29.132。

 

作業系統為ubuntu14.1。

 

mysql-proxy的版本為mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz。

 

因為我們使用的是ubuntu所以安裝lua的方式就很簡單了。

 

apt-get install lua

 

可以根據自己的系統選擇相應的方式安裝lua,保證lua命令能夠執行就可以了。mysql-proxy的版本也要根據自己的作業系統進行相應的選擇。

 

把mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz上傳到/home/mysql_proxy目錄下,解壓

 

tar zxvf mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gzcd mysql-proxy-0.8.2-linux-glibc2.3-x86-64bitcp share/doc/mysql-proxy/rw-splitting.lua ./vi rw-splitting.lua

 

找到如下片段

if not proxy.global.config.rwsplit then        proxy.global.config.rwsplit = {                min_idle_connections = 4,                max_idle_connections = 8,                is_debug = false        }end

為測試使用把4和8改為1。在生產環境中根據需求可做相應的修改。修改後如

 

現在就可以啟動mysql-proxy了,命令如下

 

./bin/mysql-proxy --proxy-read-only-backend-addresses=192.168.10.49:3306 --proxy-backend-addresses=192.168.10.42:3306 --proxy-lua-script=rw-splitting.lua

 

控制台沒有錯誤輸出則啟動正常。

mysql-proxy的偵聽連接埠為4040,所以在192.168.29.132這台機器上要開放4040連接埠。在iptables檔案中添加如下內容

 

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4040 -j ACCEPT

 

重啟iptables

 

service iptables restart

 

輸入如下命令,可以查看連接埠偵聽狀況。

netstat -anp | grep 4040

由於mysql-proxy架設在192.168.29.132這台機器上,還需要在主要資料庫中配置這台機器的許可權,命令如下。

 

grant all on *.* to ‘user‘@‘192.168.29.132‘ identified by ‘password‘;

 

現在mysql讀寫分離就完成了,結構圖如下

 

應用程式串連到mysql-proxy上,所有的寫請求通過紅線發送到master mysql上,所有的讀請求通過藍線發送到slave mysql上,master和slave之間通過紫線同步資料。

現在就可以測試讀寫分離機制是否起作用了。通過如下命令串連到mysql-proxy上。然後停掉192.168.10.49上的slave狀態。

 

mysql -uuser -ppassword -h192.168.29.132 -P4040

 

在mysql-proxy上,通過sql插入幾條資料。可以看到42上的mysql中有新增的資料,49上的mysql沒有新增資料。然後在mysql-proxy上select一下,可以看到選出來的結構沒有剛才插入的幾條資料。

至此,mysql的讀寫分離就完成了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mysql讀寫分離策略

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.