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)
然後去伺服器上查表內容可以發現主服務上有寫入的內容 其他伺服器上沒 證明寫的操作是在主伺服器上的。
如果從伺服器開著主從複製那麼就會同步資料。
讀寫分離,完畢。