標籤:選項 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主主配置