數據庫性能優化普遍採用集羣方式,oracle集羣軟硬件投入昂貴,今天花了一天時間搭建基於mysql的集羣環境。
主要思路
簡單說,實現mysql主備複製-->利用mycat實現負載均衡。
比較了常用的讀寫分離方式,推薦mycat,社區活躍,性能穩定。
主要思路:A主mysql開啓日誌,B備mysql讀取操作日誌,同步執行。
一般爲主備同步,主主同步不推薦使用。
一、主數據庫master修改:
1.修改mysql配置
找到主數據庫的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下兩行
[mysqld]
server-id=1 #主機標示,整數
port=3306
log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #確保此文件可寫
read-only=0 #主機,讀寫都可以
binlog-do-db=db1 #需要備份數據庫,多個寫多行
binlog-ignore-db=mysql #不需要備份的數據庫,多個寫多行
修改完重啓mysql
2.查看master狀態,記錄二進制文件名(mysql-bin.000024)和位置(522):
二、從服務器slave修改:
1.修改mysql配置
同樣找到my.cnf配置文件,添加server-id:
[mysqld]
# add for db1
server-id=2 #從機標識
log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #確保此文件可寫
#master-host="192.168.110.1" #主機Ip
#master-user=root #數據庫訪問用戶名
#master-pass=root #數據庫訪問密碼
#master-port=3306 #主機端口
#master-connect-retry=60 #如果從服務器發現主服務器斷掉,重新連接的時間差(秒)
replicate-do-db=db1 #只複製某個庫
replicate-ignore-db=mysql #不復制某個庫
2.重啓mysql,打開mysql會話,執行同步SQL語句(需要主服務器主機名,登陸憑據,二進制文件的名稱和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000024',
-> MASTER_LOG_POS=522;
3.啓動slave同步進程:
mysql>start slave;
4.查看slave狀態:
當Slave_IO_Running和Slave_SQL_Running都爲YES的時候就表示主從同步設置成功了。接下來就可以進行一些驗證了,比如在主master數據庫的test數據庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據即可驗證主從複製功能是否有效,還可以關閉slave(mysql>stop slave;),然後再修改master,看slave是否也相應修改(停止slave後,master的修改不會同步到slave),就可以完成主從複製功能的驗證了。
至此,mysql主從複製配置完畢。現在開始測試結果。
在主mysql 中的表添加一條記錄,從數據庫也會有一條記錄。
mycat讀寫分離
配置mycat:
server.xml:(主要是關聯scheme與用戶名,密碼)
schema.xml:主要配置db1-schema 的讀寫信息
啓動沒有cat:
./startup_nowrap.sh
注意:
因爲mycat默認需要內存比較大,這裏可以稍作修改:(startup_nowrap.sh)
測試讀寫分離:
可以採用開啓(start/stop slave;)從數據庫讀取 和不開啓從數據庫讀取,發現讀取是從數據庫,寫入走的是master.
參考文檔: