MySQL主從同步讀寫分離的叢集配置

業餘草發表於2015-08-05
大型網站為了解決大量的高併發訪問問題,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器支援,如此多的資料庫連線操作,伺服器效能再好資料庫必然會崩潰。資料丟失的話,後果更是不堪設想。這時候,我們會考慮如何減少資料庫的連線,一方面採用優秀的程式碼框架,進行程式碼的優化,採用優秀的資料快取技術如:memcached等。如果資金充足的話,必然會想到假設伺服器叢集,來分擔主資料庫的壓力。或者在硬體裝置上,投入大量資金,購買高效能的伺服器。出名的有f5,硬體負載,軟體負載等。
Ok切入今天的主題,利用MySQL主從配置,實現讀寫分離,減輕資料庫壓力。這種方式,在如今很多網站裡都有使用,也不是什麼新鮮事情,今天總結一下,方便大家學習參考一下。
讀寫分離:
1.多個伺服器肯定比一個伺服器好。
2.在資料庫寫入的時候,會加入大量的鎖(排它鎖,共享鎖等等),從而影響效能。
3.資料更安全,多資料庫存在備份資料。
搭建環境:
1.搭設一臺Master伺服器(win7系統64bit,Ip:10.10.2.33)
2.一臺臺Slave伺服器(winXp系統32bit,ip:10.10.2.157)
原理:主伺服器(Master)負責網站寫操作,從伺服器負責查詢操作。主從伺服器利用MySQL的二進位制日誌檔案,實現資料同步。二進位制日誌由主伺服器產生,從伺服器響應獲取同步資料庫。
-- 在主伺服器上建立為10.10.2.157一個dbadmin使用者,密碼為123456
-- CREATE USER 'dbadmin'@'10.10.2.157' IDENTIFIED BY '123456';
-- 為使用者dbadmin賦從複製許可權(如果不想建立使用者的話,可以使用root使用者)。
-- grant replication slave,replication client on *.* to 'slave'@'10.10.2.157' identified by 'dbadmin'; 
-- 鎖定所有表的寫操作
-- flush tables with read lock; 
-- 顯示主伺服器的狀態
-- show master status;
-- 更改從伺服器從主的二進位制檔案mysql-test-bin.000002中的8042位置開始同步
-- change master to  master_host='10.10.2.33', master_user='slave', master_password='root', master_log_file='mysql-test-bin.000002', master_log_pos=8042;
-- 開始同步
-- start slave;
-- 顯示同步狀態
-- show slave status;
-- 放開鎖定的所有表
-- unlock tables;
在主伺服器上找到my.ini檔案(版本不同可能檔名字不同,如:my.cnf)。
mysql中有好幾種日誌方式,我們只要啟動二進位制日誌log-bin就ok。在[mysqld]下面增加下面幾行程式碼
server-id=1   //給資料庫服務的唯一標識,一般為大家設定伺服器Ip的末尾號
log-bin=master-bin 
log-bin-index=master-bin.index
binlog-do-db=test 需要同步的資料庫 如果有不需要同步的資料庫可以用binlog_ignore_db,兩個都不設定,則全部同步     
auto_increment_offset=1 避免主鍵衝突重新設定自增主鍵的初始值
auto_increment_increment=2 自增主鍵的增量
expire_logs_days=1 設定log過期時間為兩天,只保留兩天的log日誌
log_bin_trust_function_creators=1 給函式賦值許可權
在從的伺服器上也找到my.ini檔案。在[mysqld]下面增加下面幾行程式碼
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin 
auto_increment_offset=2 自增主鍵的初始值
auto_increment_increment=2 自增主鍵的增量
歡迎大家關注我的部落格!如有疑問,請加QQ群:454796847共同學習!

相關文章