1. 程式人生 > >mysql讀寫分離原理及步驟

mysql讀寫分離原理及步驟

資料庫每天都要承擔的網站的資料更新,所以大量的讀寫任務都在一個機器上壓力非常大。使用讀寫分離可以有效的緩解資料庫壓力。

讀寫分離要建立在主從複製的基礎上,關於主從複製的搭建方法這裡不再敘述,大家可以看博主其他文章。微笑

這裡使用amoeba來實現mysql讀寫分離。

大概的一個原理圖如下。都是centos6.5的系統 5臺伺服器。



這裡使用兩個從伺服器承擔讀的任務,主伺服器承擔寫的任務。主伺服器寫入資料,兩個從伺服器複製,然後客戶端讀的時候在從伺服器上進行。兩個從伺服器還能起一個負載均衡的作用。

這裡是準備好的了主從關係。

下面開始。

amoeba上的配置:

amoeba是給予jdk1.5開發的,建議使用1.5或者1.6的環境,不要太高。

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html 

這個是java環境包下載的網站。

系統自帶的有點高,要把java的環境重新部署一下。


下面是安裝jdk環境的步驟


 mv jdk-6u45-linux-x64.bin /usr/local/

 cd /usr/local/

chmod +x jdk-6u45-linux-x64.bin 

./jdk-6u45-linux-x64.bin 

mv jdk1.6.0_45 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

java -version

可以看到版本號已經成了1.6的了。


---------------------------------------------------------------------------

在主mysql上面建一個授權使用者稍後給amoeba使用。

grant all on *.* to [email protected]'192.168.43.%' identified by '123456';

-

----------------------------------------------------------------------

配置amoeba

amoeba的包大家可以去網上下載。

 mkdir /usr/local/amoeba

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

cd /usr/local/amoeba/

----------------------------------------------------------------------------------

vim conf/dbServers.xml 

26行左右


----------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------

43行


-------------------------------------------------------------------------------------------------

63行


儲存。

-------------------------------------------------------------------------------------------

vim conf/amoeba.xml 


-----------------------------------------------------------------------------------------------------------

在115行左右



             這裡呼叫了上一個檔案裡的定義的伺服器名

 /usr/local/amoeba/bin/amoeba start  # 開啟 amoeba

如果遇到這個報錯

The stack size specified is too small, Specify at least 160k

Could not create the Java virtual machine.

解決方法:

vim/usr/local/amoeba/bin/amoeba

58行最後一個數字改大 這改成了160


儲存然後啟動。

------------------------------------------------------------------------------------

好了測試效果。

開啟一個伺服器作客戶端

 yum install -y mysql  

mysql -uamoeba -p123456 -h 192.168.43.60 -P 8066  

使用的使用者是剛才在配置檔案指定的使用者和密碼  amoeba埠是8066

主mysql上建立個數據庫和表

 create database aa;

 use aa;

create table aa (id int(10),name varchar(10));

關掉個從mysql的IO執行緒不然會複製資料看不出來效果

第一個從伺服器上:

mysql> stop slave;

mysql> insert into aa values ('1','zhang');   
Query OK, 1 row affected (0.01 sec)


--------------------------------

第二個從伺服器上:

mysql> stop slave;

mysql> insert into aa values ('2','wang');   
Query OK, 1 row affected (0.01 sec)

客戶端上檢視效果

use aa;  #切換資料庫然後查看錶內容發現裡面一次是slave1的內容一次是slave2的內容。負載均衡的作用


--------------------------------------------

在客戶端寫入一下

mysql> insert into aa values ('3','master');
Query OK, 1 row affected (0.02 sec)

然後去伺服器上查表內容可以發現主服務上有寫入的內容 其他伺服器上沒 證明寫的操作是在主伺服器上的。

如果從伺服器開著主從複製那麼就會同步資料。

讀寫分離,完畢。