mysql主主配置

來源:互聯網
上載者:User

標籤:選項   scp   str   tab   info   直接   壓力   file   mst   

mysql主主配置

mysql雙主(主主)架構方案思路

1.兩台mysql都可讀寫,互為主備,預設只使用一台(msterA)負責資料寫入,另一台(masterB)備用

2.masterA是masterB的主庫,masterB又是masterA的主庫,他們互為主從

3.兩台主庫之間做高可用,可以採用keepalived等方案(使用VIP對外提供服務)

4.所有提供服務的從伺服器與masterB進行主從同步(雙主多從)

5.建議採用高可用策略,masterA或masterB均不因宕機恢複後而搶佔VIP(非搶佔模式)

這樣做可以在一定程度上保證主庫的高可用,在一台主庫down掉之後,可以在極短的時間內切換到另一台主庫上(儘可能減少主庫宕機對業務造成的影響),減少了主從同步給線上主庫帶來的壓力;

但是也有幾個不足的地方:

1.masterB可能會一直處於空閑狀態(可以用它當從庫,負責部分查詢);2.主庫後面提供服務的從庫要等masterB先同步完了資料後才能去masterB上去同步資料,這樣可能會造成一定程度的同步延時;

 

部署環境:

主(masterA_mysql):192.168.87.100    centos 7

從(masterB_mysql):192.168.87.101     centos 7

vip:192.168.87.102

1、master伺服器修改mysql設定檔,設定檔位置:/etc/my.cnf ,在檔案中的 [mysql] 新增內容

[[email protected] etc]# vi /etc/my.cnf
#主主備份配置
server-id=1        #任意自然數n,只要保證兩台MySQL主機不重複。
log-bin=mysql-bin       #開啟二進位日誌
relay-log=mysql-relay-bin

auto_increment_increment=2   #步進值auto_imcrement。一般有n台主MySQL就填n
replicate-wild-ignore-table=mysql.%    #replicate-wild-ignore-table 代表不參與備份
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

 

2、slave伺服器修改mysql設定檔,設定檔位置:/etc/my.cnf ,在檔案中的 [mysql] 新增內容

[[email protected] etc]# vi /etc/my.cnf
#主主備份配置
server-id=2        #任意自然數n,只要保證兩台MySQL主機不重複。
log-bin=mysql-bin       #開啟二進位日誌
relay-log=mysql-relay-bin

auto_increment_increment=2   #步進值auto_imcrement。一般有n台主MySQL就填n
replicate-wild-ignore-table=mysql.%        #replicate-wild-ignore-table 代表不參與備份
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

配置完後重啟mysq服務

注意:不要在主庫上使用binlog-db 或binlog-ignore-db 也不要從庫上使用replicte-do-db或者replicate-ignore-db,因為這樣可能產生跨庫更新失敗,推薦從庫上使用replicate_wild_do_table 和replicate-wild-ignore-table兩個選項來解決負責過程過濾。

3、手動同步資料庫

在執行主主互備前,需要將masterA 和masterB的資料庫同步,首先在masterA上備份資料庫

mysql>FLUSH TABLES WITH READ LOCK;

不退出終端,否則鎖失效,重新開啟以前終端,直接打包壓縮資料庫檔案或使用mysqldump工具匯出資料

[[email protected] etc]#cd /var/lib/

[[email protected] etc]# tar zcvf mysql.tar.gz mysql

[[email protected] etc]#scp mysql.tar.gz [email protected]:/var/lib/          #選擇yes  並輸入密碼

4、 建立複製使用者並授權

在192.168.87.100中建立一個 可以從192.168.87.101登陸上來的使用者並賦予許可權

MariaDB [sampdb]> unlock tables;   #解除鎖表
Query OK, 0 rows affected (0.00 sec)

MariaDB [sampdb]>GRANT REPLICATION SLAVE ON *.* TO ‘repl_nuser’@‘192.168.1.101‘ IDENTIFIED BY ‘repl_passwd’;   #建立使用者並設定許可權

MariaDB [sampdb]l>FLUSH PRIVILEGES;  #重新整理許可權

5、在192.168.87.100上查看資料庫二進位日誌名和位置

mysql>show master status;

6、在192.168.87.101中執行

mysql>CHANGE MASTER TO

->MASTER_HOST=‘192.168.87.100‘,

->MASTER_USER=‘repl_user‘,

->MASTER_PASSWORD=‘repl_passwd‘,

->MASTER_LOG_FILE=‘mysql-bin.000002‘,

->MASTER_LOG_POS=418;

接著可以在masterB上啟動從伺服器了,

執行:mysql>start slave;

查看從伺服器的運行狀態:

show slave status \G;

 

完成192.168.87.101 對192.168.87.100備份

實現192.168.87.100對192.168.87.101的備份則

1、在192.168.87.101(masterB_mysql)建立192.168.87.100(masterA_mysql)能夠訪問的賬戶

MariaDB [sampdb]> grant replication slave on *.* to ‘repl_user‘@‘192.168.87.100‘ identified by ‘repl_password‘;

MariaDB [sampdb]> FLUSH PRIVILEGES;  #重新整理許可權
Query OK, 0 rows affected (0.00 sec)

2、查看master狀態

3、在masterA_mysql的mysql庫中將masterB_mysql 設定為主伺服器

MariaDB [(none)]> change master to

master_host=‘192.168.87.101‘,

master_user=‘repl_zhengwei‘,

master_password=‘sky!zheng‘,

master_log_file=‘mysql-bin.000003‘,

master_log_pos=1331;
Query OK, 0 rows affected (0.06 sec)

4、接著執行

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

5查看狀態

 

mysql主主配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.