日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 集群 主从复制

發(fā)布時(shí)間:2025/1/21 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 集群 主从复制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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=0sync_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 mysqld

1.3.查看bin logrelay 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 > binlog

1.4.使用命令查看binlog

show master logs;

使用 show binlog events 命令可以以列表的形式顯示日志中的事件信息。 show binlog events命令的格式: show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]; 說明: 1IN ‘log_name’:指定要查詢的binlog文件名(如果省略此參數(shù),則默認(rèn)指定第一個(gè)binlog文件); 2FROM pos:指定從哪個(gè)pos起始點(diǎn)開始查起(如果省略此參數(shù),則從整個(gè)文件的第一個(gè)pos點(diǎn)開始算); 3LIMIToffset】:偏移量(默認(rèn)為0); 4row_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=401326

3.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_IOSlave_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.修改masterslave服務(wù)器的my.cnf文件

注意了:是master和slave都要修改配置 #開啟GTID模式(必選) gtid_mode=ON #強(qiáng)制gtid一致性(必選) enforce-gtid-consistency=true

5.3.重啟mysql

systemctl restart mysqld

5.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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。