mysql 集群 主从复制
1.binlog日志,如果是多個(gè)數(shù)據(jù)庫,binlog日志是不是也是分為多個(gè)日志?
2.binlog日志存儲的路徑在哪里?
3.常用的binlog模式,大家都是使用哪種?
1.statement level模式 2.rowlevel模式 3.mixed模式1.開啟binglog日志
1.1.修改my.cnf配置文件
在【mysqld】段添加:
#binlog刷盤策略 sync_binlog=1 #需要備份的數(shù)據(jù)庫 binlog-do-db=hello #不需要備份的數(shù)據(jù)庫 binlog-ignore-db=mysql #啟動(dòng)二進(jìn)制文件 log-bin=mysql-bin #服務(wù)器ID server-id=132 sync_binlog參數(shù): 0 :存儲引擎不進(jìn)行binlog的刷新到磁盤,而由操作系統(tǒng)的文件系統(tǒng)控制緩存刷新。 1:每提交一次事務(wù),存儲引擎調(diào)用文件系統(tǒng)的sync操作進(jìn)行一次緩存的刷新,這種方式最安全,但性能較低。 n:當(dāng)提交的日志組=n時(shí),存儲引擎調(diào)用文件系統(tǒng)的sync操作進(jìn)行一次緩存的刷新。 sync_binlog=0或sync_binlog大于1,事務(wù)被提交,而尚未同步到磁盤。因此,在電源故障或操作系統(tǒng)崩潰時(shí)有可能服務(wù)器已承諾尚未同步一些事務(wù)到二進(jìn)制日志。因此它是不可能執(zhí)行例行程序恢復(fù)這些事務(wù),他們將會(huì)丟失二進(jìn)制日志。1.2.調(diào)整binlog日志模式
查看binlog的日志模式: show variables like 'binlog_format'; 調(diào)整binlog的日志模式: binlog的三種格式: STATEMENT 、 ROW 、 MIXED 。 set binlog_format=STATEMENT;這時(shí),需要重啟一下數(shù)據(jù)庫,才能使用配置文件生效。
systemctl restart mysqld1.3.查看bin log和relay log日志
因?yàn)?/span>binlog日志文件:mysql-bin.000005是二進(jìn)制文件,沒法用vi等打開,這時(shí)就需要mysql的自帶的 mysqlbinlog工具進(jìn)行解碼,執(zhí)行: mysqlbinlog mysql-bin.000005 可以將二進(jìn)制文件轉(zhuǎn)為可閱讀的sql語句。 mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.000058 > binlog1.4.使用命令查看binlog
show master logs; 使用 show binlog events 命令可以以列表的形式顯示日志中的事件信息。 show binlog events命令的格式: show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]; 說明: (1)IN ‘log_name’:指定要查詢的binlog文件名(如果省略此參數(shù),則默認(rèn)指定第一個(gè)binlog文件); (2)FROM pos:指定從哪個(gè)pos起始點(diǎn)開始查起(如果省略此參數(shù),則從整個(gè)文件的第一個(gè)pos點(diǎn)開始算); (3)LIMIT【offset】:偏移量(默認(rèn)為0); (4)row_count:查詢總條數(shù)(如果省略,則顯示所有行)。 show binlog events in 'mysql-bin.000001'; 切換binlog文件:會(huì)生成一個(gè)新的日志文件。 flush logs;2、基于binlog主從復(fù)制
2.1.關(guān)閉主從機(jī)器的防火墻
systemctl stop iptables(需要安裝iptables服務(wù)) systemctl stop firewalld(默認(rèn)) systemctl disable firewalld.service(設(shè)置開啟不啟動(dòng))2.2.主服務(wù)器配置
查看binlog是否開啟可以使用命令: show variables like 'log_bin%'; log_bin如果是 OFF 代表是未開啟狀態(tài)。2.3.主機(jī)給從機(jī)授備份權(quán)限
注意:先要登錄到MySQL命令客戶端 GRANT REPLICATION SLAVE ON *.* TO '從機(jī)MySQL用戶名'@'從機(jī)IP' identified by '從機(jī)MySQL密碼';例子:
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by 'root'; ???????? 注意事項(xiàng): 一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替, 如192.168.145.226,加強(qiáng)安全。 mysql5.7對密碼的強(qiáng)度是有要求的,必須是字母+數(shù)字+符號組成的,可以使用如下方法調(diào)整密碼 強(qiáng)度。 設(shè)置密碼長度最低位數(shù) set global validate_password_length=4; 設(shè)置密碼強(qiáng)度級別 set global validate_password_policy=0; validate_password_policy有以下取值: 刷新權(quán)限 : FLUSH PRIVILEGES;2.4.查詢master的狀態(tài)
show master status;3.從服務(wù)器配置
3.1.修改my.conf文件
[mysqld] server-id=4013263.2.重啟并登錄到MySQL進(jìn)行配置從服務(wù)器
systemctl restart mysqld change master to master_host='10.0.200.17', master_port=3306, master_user='root', master_password='root', master_log_file='mysql-bin.000002', master_log_pos=589, MASTER_AUTO_POSITION=0; 注意: 語句中間不要斷開, master_port 為mysql服務(wù)器端口號(無引號), master_user 為執(zhí)行同步操作的數(shù) 據(jù)庫賬戶, “410” 無單引號(此處的 410 就是 show master status 中看到的 position 的值,這里的 mysql-bin.000001 就是 file 對應(yīng)的值)。3.3.啟動(dòng)從服務(wù)器復(fù)制功能
start slave;stop slave;reset slave;show slave status;3.4.檢查從服務(wù)器復(fù)制功能狀態(tài)
show slave status \G; ……………………(省略部分) Slave_IO_Running: Yes //此狀態(tài)必須YES Slave_SQL_Running: Yes //此狀態(tài)必須YES ……………………(省略部分) 注:Slave_IO及Slave_SQL進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯(cuò)誤的狀態(tài)(如:其中一個(gè)NO均屬錯(cuò)誤)。4.設(shè)置從庫寫權(quán)限
對于需要保證master-slave主從同步的salve庫,如果要設(shè)置為只讀狀態(tài),需要執(zhí)行的命令為:
set global read_only=1;read_only=1只讀模式,可以限定普通用戶進(jìn)行數(shù)據(jù)修改的操作,但不會(huì)限定具有super權(quán)限的用戶(如超級管理員root用戶)的數(shù)據(jù)修改操作。
在MySQL中設(shè)置read_only=1后,普通的應(yīng)用用戶進(jìn)行insert、update、delete等會(huì)產(chǎn)生數(shù)據(jù)變化的DML操作時(shí),都會(huì)報(bào)出數(shù)據(jù)庫處于只讀模式不能發(fā)生數(shù)據(jù)變化的錯(cuò)誤,但具有super權(quán)限的用戶,例如在本地或遠(yuǎn)程通過root用戶登錄到數(shù)據(jù)庫,還是可以進(jìn)行數(shù)據(jù)變化的DML操作;
為了確保所有用戶,包括具有super權(quán)限的用戶也不能進(jìn)行讀寫操作,就需要執(zhí)行給所有的表加讀鎖的命令 “flush tables with read lock;”。
這樣使用具有super權(quán)限的用戶登錄數(shù)據(jù)庫,想要發(fā)生數(shù)據(jù)變化的操作時(shí),也會(huì)提示表被鎖定不能修改的報(bào)錯(cuò)。
將slave數(shù)據(jù)庫read-only=1設(shè)置只讀后,在master執(zhí)行GRANT USAGE ON *.* TO 'user01'@'localhost' IDENTIFIED BY'123456' WITH GRANT OPTION;創(chuàng)建一個(gè)普通用戶,然后用普通用戶登錄從庫,執(zhí)行操作會(huì)報(bào)錯(cuò)。切換到root用戶后還是可以進(jìn)行增刪改查的。
5.基于GTID的主從復(fù)制
5.1.什么是GTID
GTID就是全局事務(wù)標(biāo)識符(Global Transaction Identifiers),基于事務(wù)的復(fù)制。使用 GTID 時(shí),可以識別和跟蹤每個(gè)事務(wù),因?yàn)樗谠挤?wù)器上提交并由任何從屬服務(wù)器應(yīng)用;這意味著在啟動(dòng)新從站或故障到新主服務(wù)器時(shí),使用 GTID 引用日志文件或這些文件中的位置時(shí),不需要引用日志文件或位置,這大大簡化了這些任務(wù)。由于基于 GTID 的復(fù)制完全基于事務(wù),因此只需確定主復(fù)制和從級復(fù)制是否一致; 只要在主主機(jī)上提交的所有事務(wù)也都提交到從站上,就保證兩者之間的一致性。5.2.修改master、slave服務(wù)器的my.cnf文件
注意了:是master和slave都要修改配置 #開啟GTID模式(必選) gtid_mode=ON #強(qiáng)制gtid一致性(必選) enforce-gtid-consistency=true5.3.重啟mysql
systemctl restart mysqld5.4.從服務(wù)器中執(zhí)行change master
change master to master_host='192.168.68.132', master_port=3306, master_user='root', master_password='root', master_auto_position = 1;5.5開啟同步
START SLAVE;微信掃一掃:關(guān)注我個(gè)人訂閱號“猿小飛”,更多精彩文章在這里及時(shí)發(fā)布:?
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的mysql 集群 主从复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysqldumpslow mysql慢
- 下一篇: prometheus接入mysqld_e