1. 程式人生 > >淺談MySQL主從配置

淺談MySQL主從配置

圖片 info 數據訪問層 watermark oot 負載 creat mar 並發

大型網站為了緩解大量的並發訪問,除了在網站實現分布式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,如果還是傳統的數據結構,或者只是單單靠一臺服務器扛,如此多的數據庫連接操作,數據庫必然會崩潰,數據丟失的話,後果更是不堪設想。這時候,我們會考慮如何減少數據庫的聯接,一方面采用優秀的代碼框架,進行代碼的優化,采用優秀的數據緩存技術如:memcached,如果資金豐厚的話,必然會想到假設服務器群,來分擔主數據庫的壓力。Ok切入今天的主題,利用MySQL主從配置,實現讀寫分離,減輕數據庫壓力。這種方式,在如今很多網站裏都有使用,也不是什麽新鮮事情,今天總結一下,方便大家學習參考一下。
概述:搭設一臺Master服務器(虛擬機一臺,centos系統,Ip:192.168.20.78),搭設一臺Slave服務器(虛擬機一臺,centos系統,Ip:192.168.20.161)
原理:主服務器(Master)負責網站NonQuery操作,從服務器負責Query操作,用戶可以根據網站功能模特性塊固定訪問Slave服務器,或者自己寫個池或隊列,自由為請求分配從服務器連接。主從服務器利用MySQL的二進制日誌文件,實現數據同步。二進制日誌由主服務器產生,從服務器響應獲取同步數據庫。
1、在主從服務器上都裝上MySQL數據庫,版本最好保持一致
2、配置主服務器
(1)在master MySQL上創建一個用戶‘repl‘,並允許其他Slave服務器可以通過遠程訪問Master,通過該用戶讀取二進制日誌,實現數據同步。
mysql -uroot -p
mysql>create user repl; #創建新用戶
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl‘@‘192.168.20.%‘ IDENTIFIED BY ‘mysql‘; #repl用戶必須具有REPLICATION SLAVE權限,除此之外沒有必要添加不必要的權限,密碼為mysql。說明一下192.168.20.%,這個配置是指明repl用戶所在服務器,這裏%是通配符,表示192.168.20.0-192.168.20.255的Server都可以以repl用戶登陸主服務器。當然你也可以指定固定Ip。
mysql> flush privileges; #刷新權限
(2)找到MySQL安裝文件夾修改my.cnf文件。mysql中有好幾種日誌方式,這不是今天的重點。我們只要啟動二進制日誌log-bin就ok。
vim /etc/my.cnf
在[mysqld]下面增加下面幾行代碼
server-id=1 #設置server-id
log-bin=master-bin #開啟二進制日誌
(3)查看master狀態,記錄二進制文件名(mysql-bin.000005)和位置(120)
技術分享圖片
3、配置從服務器
(1)修改MySQL配置
vim /etc/my.cnf
在[mysqld]下面增加
server-id=2 #設置server-id,必須唯一
(2)重啟mysql,打開mysql會話,執行同步SQL語句(需要主服務器主機名,登陸憑據,二進制文件的名稱和位置)
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.20.78‘,
-> MASTER_USER=‘rep1‘,
-> MASTER_PASSWORD=‘mysql‘,
-> MASTER_LOG_FILE=‘mysql-bin.000005‘,
-> MASTER_LOG_POS=120;
(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),就可以完成主從復制功能的驗證了。
還可以用到的其他相關參數:

master開啟二進制日誌後默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數據庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:
# 不同步哪些數據庫
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

# 只同步哪些數據庫,除此之外,其他不同步
binlog-do-db = game

淺談MySQL主從配置