標籤:ha 高可用 keepalived 讀寫分離 mha
探索MySQL高可用架構之MHA(4)
-----構建mysql高可用系列(共9篇)
上一篇文章介紹了本次架構中的Mysql源碼安裝。本篇文章主要介紹本次架構中的ABBB複製。
首先我們先介紹什麼是MySql AB複製????
AB複製又稱主從複製,實現的是資料同步。如果要做MySQL AB複製,資料庫版本盡量保持一致。如果版本不一致,從伺服器版本高於主伺服器,但是版本不一致不能做雙向複製。
MySQL AB複製有什麼好處呢?
a.解決宕機帶來的資料不一致,因為MySQL AB複製可以即時備份資料。
b.減輕資料庫伺服器壓力,這點很容易想到,多台伺服器的效能一般比單台要好。
AB複製主要通過2個線程實現:
a.I/O線程:從主庫上把bin-log下載到從庫後,放到從庫的Relay-log中。(從庫中的)
b.SQL線程:把Relay-log中的動作,在從庫上做一次。(從庫中的)
AB複製的3個主要步驟
a.主伺服器把資料更改記錄到二進位日誌中,這個操作叫做二進位日誌事件。
b.從伺服器把主伺服器的二進位日誌事件拷貝到自己的中繼日誌(relay log)中。
c.從伺服器執行中繼日誌中的事件,把更改應用到自己的資料上。
修改主庫和從庫的參數檔案(/etc/my.cnf)
主庫:10.142.132.52 #[mysqld]標籤下追加
server_id =1 #表示是原生序號為1,一般來講就是master的意思wait_timeout=360000 #伺服器在關閉它之前在一個串連上等待行動的秒數。log-bin=binlog#開啟Binlog日誌log-bin-index=binlog.index #開啟Binlog日誌的索引檔案log_slave_updates=1 #表示slave將複製事件寫進自己的二進位日誌sync-binlog = 1 #當每進行1次事務提交之後,MySQL將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟auto_increment_offset = 2 #表示自增長欄位從那個數開始,他的取值範圍是1 .. 65535auto_increment_increment = 2 #表示自增長欄位每次遞增的量,其預設值是1,取值範圍是1 .. 65535
從庫1:10.142.132.51(備主) #[mysqld]標籤下追加
relay_log_purge=0 #是否自動清空不再需要中繼日誌時,0不啟動server_id =2wait_timeout=360000 #伺服器在關閉它之前在一個串連上等待行動的秒數。log-bin=binlog #開啟Binlog日誌log-bin-index=binlog.index #開啟Binlog日誌的索引檔案log_slave_updates=1 #表示slave將複製事件寫進自己的二進位日誌sync-binlog = 1 #當每進行1次事務提交之後,MySQL將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟auto_increment_offset = 1 #表示自增長欄位從那個數開始,他的取值範圍是1 .. 65535auto_increment_increment = 2 #表示自增長欄位每次遞增的量,其預設值是1,取值範圍是1 .. 65535
從庫2:10.142.132.48 #[mysqld]標籤下追加
read_only=1 #唯讀操作控制relay_log_purge=0 #是否自動清空不再需要中繼日誌時,0不啟動server_id = 3relay_log = /app/mysql/mysql-relay-bin #定義relay_log的位置和名稱relay_log_index=/app/mysql/mysql-relay-bin.index #定義relay_log的索引檔案位置和名稱wait_timeout=360000 #伺服器在關閉它之前在一個串連上等待行動的秒數。
從庫3:10.142.132.47 #[mysqld]標籤下追加
read_only=1 #唯讀操作控制relay_log_purge=0 #是否自動清空不再需要中繼日誌時,0不啟動server_id = 4relay_log = /app/mysql/mysql-relay-bin #定義relay_log的位置和名稱relay_log_index=/app/mysql/mysql-relay-bin.index #定義relay_log的索引檔案位置和名稱wait_timeout=360000 #伺服器在關閉它之前在一個串連上等待行動的秒數。
主庫 #建立用AB複製所需的使用者
mysql> GRANT replication slave ON *.* TO ‘lipengfei‘@‘%‘ identified by ‘lipengfei‘;mysql> flush privileges;
所有從庫 #如果從庫以前有資料,要幹掉原有資料,保持從庫是乾淨的
service mysql stop #停止Mysql服務cd /app/mysql/data #進入資料目錄rm -fr 資料庫目錄 #刪除資料庫目錄service mysql restart #啟動Mysql服務
主庫 #主庫的資料匯出,並匯入所有從庫,保持資料一致
mysqldump -u root -pmysql m >/tmp/full.sql #主庫匯出資料scp /tmp/full.sql [email protected]從庫IP:/tmp/ #主庫匯出的資料通過scp傳送到所有從庫
所有從庫 #匯入主庫傳過來的資料
mysql -u root -pmysql m < /tmp/full.sql #匯入主庫傳遞過來的資料
主庫 #為主庫加上唯讀鎖,查看當前Binlog日誌情況
mysql> flush tables with read lock; #給主庫加上讀鎖mysql> show master status; #查看Bin-log狀態+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000001 | 402 | | | |+---------------+----------+--------------+------------------+-------------------+mysql>unlock tables; #給主庫解鎖
所有從庫 #向主庫做同步操作,開啟AB複製
mysql> change master to master_host=‘主庫IP‘, master_port=主庫連接埠, master_user=‘同步處理的使用者‘, master_password=‘同步處理的使用者的密碼‘, master_log_file=‘主庫Binlog‘,master_log_pos=主庫Binlog位置; #向主庫做同步操作mysql> start slave; #啟動AB複製
所有從庫 #查看AB複製的狀態
mysql> show slave status \GSlave_IO_Running: Yes #I/O線程狀態OKSlave_SQL_Running: Yes #SQL線程狀態OKSeconds_Behind_Master: 0 #同步效率非常好,沒有延遲
主庫 #類比產生資料
mysql> create database slave; #建立資料庫mysql> use slave; #選擇資料庫mysql> create table a(a int); #建立表mysql> insert into a values(1); #插入資料mysql> insert into a values(2); #插入資料
所有從庫 #查看資料同步狀態
mysql> show databases; #查看當前有哪些資料庫(主庫建立的slave庫同步過來了)mysql> use slave; #選擇資料庫mysql> select * from a; #查看a表資料
如果從庫的同步進程停止了,主庫的操作還會往從庫中同步嗎?會丟資料嗎?
所有從庫 #類比服務出現問題
service mysql stop #停止mysql服務,類比從庫出現問題
主庫 #從庫出現問題,此期間主庫正常操作
use slave; #選擇資料庫insert into a values(3); #插入資料insert into a values(4); #插入資料
所有從庫 #問題解決,查看有沒有丟資料
service mysql start #啟動Mysql服務mysql >use slave; #選擇資料庫mysql >select * from a; #資料自動同步過來了,主庫的資料沒有丟失
上面的結果說明了,從庫中肯定儲存著主庫相關的配置:
/app/mysql/data/master.info
到此為止,咱們的AB複製操作就結束了!
只要朋友們仔細點按著我寫的文章一步一步操作,相信你也可以成功搭建AB複製的,加油吧!
本文出自 “走不完的路,看不完的書!” 部落格,請務必保留此出處http://51power.blog.51cto.com/3549599/1671641
探索MySQL高可用架構之MHA(4)