主從複製目的:
主從服務器設置的穩健性得以提升,如果主服務器發生故障,可以把本來作爲備份的從服務器提升爲新的主服務器。在主從服務器上分開處理用戶的請求,讀的話,可以直接讀取備機數據,可獲得更短的響應時間。
主服務器:IP地址192.168.80.129,mysql已經安裝,無用戶數據。
從服務器:IP地址192.168.80.130,mysql已經安裝。
注:數據庫版本必須一致。1.主從複製配置
修改從服務器的配置文件/etc/my.cnf,在mysqld裏添加一下屬性
[mysqld]
log-bin=mysql-bin //[必須]啓用二進制日誌
server-id=129 //[必須]服務器唯一ID,默認是1,一般取IP最後一段,如IP:192.168.80.129
2.從服務器也做以上操作,添加完之後,重新啓動兩個數據庫。
主服務器上進行操作
(1)創建用戶並授權
1 mysql -u root -p
2 mysql>grant replication slave on *.* to [email protected] identified by 'mysql';
3 mysql>flush privileges;
(2)查詢主數據庫的狀態
1 mysql> show master status;
記下File以及Position的值,在後面進行從服務器操作的時候需要使用。
2.在從服務器上操作
(1)mysql登錄並執行同步的sql語句,最後並啓動slave
1 #mysql -uroot -p
2 mysql> change master to master_host='192.168.80.129',master_user='root',master_password='123456',master_log_file='mysql-bin.000025',master_log_pos=990;
3 mysql> start slave;
就啓動了slave同步功能(2)主從同步檢查
執行如下語句
1 mysql>show slave status\G
Slave_IO進程以及slave_SQL進程都必須正常運行,在狀態輸出中表現爲:“slave”;否則都是不正確的狀態(如一個值是Yes,另一個是No則不行)。
如果主數據庫服務器已經存在用戶數據,那麼在進行主從複製時,需要做以下處理。
(1)主數據庫鎖表操作,不讓數據再進行寫入動作。
1 mysql>flush tables withread lock;
(2)查看主數據庫的狀態
1 mysql>show master status;
記下File以及Position的值,以備從服務器使用。
(3)把主服務器的數據文件複製到從服務器,最好先用tar歸檔壓縮處理一下
(4)取消主數據庫鎖定
1 mysql>unlock tables;
從服務器的操作和前面的步驟一樣,略過。
測試是否實現主從複製在主數據庫服務器上創建庫和表,然後插入記錄,再登錄到從服務器,查看是否也建立相一致的庫和表以及記錄。
(1)主服務器上的操作
1 mysql>create database first_tb;①在主數據庫服務器創建庫first_tb;
2 mysql>create table first_db(idint(3)),name char (10));
②在主數據庫服務器創建表first_tb;
3 mysql>insert into first_tb values (001,'myself');
③在主數據服務器的表first_tb中插入記錄;
(2)從服務器上查看
1 mysql>show databases;
①數據庫first_db自動生成
②表first_tb也自動生成,數據記也錄存在。
測試二
導入數據庫,在主庫上查看現在的數據庫
創建數據庫buy並且導入數據
在從庫上查看,數據庫已經完全導入。
2.mysql宕機切換演練
(1)高可用雙主熱備宕機自動切換演練
通常說的「雙機熱備」是指兩臺機器都在運行,但並不是兩臺機器都同時在提供服務。當提供服務的一臺出現故障的時候,另外一臺會馬上自動接管並且提供服務,而且切換的時間非常短。
Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗餘協議。在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效後,備份路由中會重新選舉出一個主控路由,來繼續工作,來保障不間斷服務。
環境描述:
- OS:CentOS6.5_X64
- MASTER:192.168.80.129
- BACKUP:192.168.80.130
- VIP:192.168.80.135 (虛擬IP)
安裝mysql的步驟前面有講,我就不說了。不明白的可以看 http://blog.csdn.net/kjsayn/article/details/51320927
編輯my.cnf
# vi /etc/my.cnf #開啓二進制日誌,設置id
[mysqld]
server-id = 1 #backup這臺設置2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema #忽略寫入binlog日誌的庫
auto-increment-increment = 2 #字段變化增量值
auto-increment-offset = 1 #初始字段ID爲1
slave-skip-errors = all #忽略所有複製產生的錯誤
#先查看MASTER下的log bin日誌和pos值位置
master配置如下:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.130' IDENTIFIED BY 'root'; #130通過root遠程訪問到他自己
mysql> flush privileges;
mysql> change master to
-> master_host='192.168.80.130',
-> master_user='root',
-> master_password='123456',
-> master_log_file='mysql-bin.000009',
-> master_log_pos=1131; #對端狀態顯示的值
mysql> start slave; #啓動同步
mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.129' IDENTIFIED BY 'root';
mysql> flush privileges;
mysql> change master to
-> master_host='192.168.80.129',
-> master_user='root',
-> master_password='root',
-> master_log_file='mysql-bin.000029',
-> master_log_pos=107; #對端的狀態顯示值
mysql> start slave;
#主主同步配置完畢,查看同步狀態Slave_IO和Slave_SQL是YES說明主主同步成功。(兩邊都要是yes,如果一邊yes另一邊識別不到pos就無法同步)
在master插入數據測試下:
在backup查看是否同步成功:
可以看到已經成功同步過去,同樣在backup插入到user表數據,一樣同步過去,雙主就做成功了。
主主配置常見報錯:
注:如果其中一邊提示連接中,關閉防火牆即,或者對應IP不對,請注意查看salve的IP。其中一個顯示NO,查底下報錯,顯示por值匹配不到的,則說明你其中一邊的bin-log不一致,關閉salve,重新配置即可。
2、配置keepalived實現熱備
keepalived安裝過程 我就不說了,網上很多,我是直接安裝編譯完成的。(源碼不會編譯的網上搜索一下)
keepalived編譯配置文件
# vi /etc/keepalived/keepalived.conf
- 採用keepalived作爲高可用方案時,兩個節點最好都設置成BACKUP模式,避免因爲意外情況下(比如腦裂)相互搶佔導致往兩個節點寫入相同數據而引發衝突;
#backup服務器只修改priority爲90、nopreempt不設置、real_server設置本地IP。
1 啓動keepalived
#./keepalived start
3.測試高可用性
1、通過Mysql客戶端通過VIP連接,看是否連接成功。
2、停止master這臺mysql服務,是否能正常切換過去,可通過ip addr命令來查看VIP在哪臺服務器上。
當master數據庫宕的時候,VIP就會自動切換到另一臺上,實現主主自動切換。遠程連接數據庫的虛擬IP是可以連接的,實現應用切換的效率。部署應用的時候配置VIP即可共享數據庫資源。
3.注意:當宕庫恢復的時候,要啓動keepalived,否則VIP無法自動切換回來。