探索MySQL高可用架構之MHA(4)

來源:互聯網
上載者:User

標籤: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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.