●客戶端訪問(wèn)服務(wù)端

成都創(chuàng)新互聯(lián)公司歡迎咨詢:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁(yè)制作領(lǐng)域十載,包括成都房屋鑒定等多個(gè)行業(yè)擁有豐富建站經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花!
。利用Windows控制臺(tái)訪問(wèn)(MySQL客戶端)
。利用數(shù)據(jù)庫(kù)管理工具(Navicat)
●客戶端需要連接認(rèn)證
。-h: 主機(jī)地址(本機(jī)localhost可以省略)
。-P: 端口號(hào)(默認(rèn)3306可以省略)
。-u: 用戶名
。-p: 用戶密碼
1,明確MySQL數(shù)據(jù)庫(kù)內(nèi)網(wǎng)訪問(wèn)地址端口,確保MySQL數(shù)據(jù)庫(kù)服務(wù)正常,在內(nèi)網(wǎng)可以正常訪問(wèn)連接。如我本機(jī)MySQL數(shù)據(jù)庫(kù)訪問(wèn)地址是localhost:3306。
2.內(nèi)網(wǎng)使用花生殼動(dòng)態(tài)域名解析,內(nèi)網(wǎng)服務(wù)器安裝花生殼,并使用它。
3.使用自己的帳號(hào)登錄。如沒(méi)有帳號(hào),“注冊(cè)帳號(hào)”進(jìn)入網(wǎng)站進(jìn)行注冊(cè)帳號(hào)。正常登錄后,會(huì)顯示登錄帳號(hào)下的域名。
4.做映射。在默認(rèn)域名的地方點(diǎn)擊花生殼管理添加映射。點(diǎn)擊當(dāng)前主機(jī)。內(nèi)網(wǎng)任何端口映射,獲取外網(wǎng)隨機(jī)端口,點(diǎn)擊確認(rèn)。
第一:更改 “mysql” 數(shù)據(jù)庫(kù)里的 “user” 表里的 “host” 項(xiàng),從”localhost”改稱'%'。
或者新加條記錄,“host” 項(xiàng)為要訪問(wèn)的ip地址,并授權(quán)。重啟mysql服務(wù)。
第二:在系統(tǒng)防火墻添加例外端口:3306,并允許例外。錯(cuò)誤提示:
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server
的解決方法: 1。 改表法。可能是你的帳號(hào)不允許從遠(yuǎn)程登陸,只能在localhost。這個(gè)時(shí)候只要在localhost的那臺(tái)電腦,登入mysql后,更改 "mysql" 數(shù)據(jù)庫(kù)里的 "user" 表里的 "host" 項(xiàng),從"localhost"改稱"%"
mysql -u root -pvmwaremysqluse mysql;mysqlupdate user set host = '%' where user = 'root';mysqlselect host, user from user; 2. 授權(quán)法。例如,你想myuser使用mypassword從任何主機(jī)連接到mysql服務(wù)器的話。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.3的主機(jī)連接到mysql服務(wù)器,并使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
3.在window自帶的防火墻里的例外添加3306端口
總結(jié):mysql -u root -p
mysqluse mysql;
mysqlselect 'host' from user where user='root';
mysqlupdate user set host = '%' where user ='root';
mysqlflush privileges;
mysqlselect 'host' from user where user='root';
第一句是以權(quán)限用戶root登錄
第二句:選擇mysql庫(kù)
第三句:查看mysql庫(kù)中的user表的host值(即可進(jìn)行連接訪問(wèn)的主機(jī)/IP名稱)
第四句:修改host值(以通配符%的內(nèi)容增加主機(jī)/IP地址),當(dāng)然也可以直接增加IP地址
第五句:刷新MySQL的系統(tǒng)權(quán)限相關(guān)表
第六句:再重新查看user表時(shí),有修改。。
重起mysql服務(wù)即可完成。
1、改表法。
可能是你的帳號(hào)不允許從遠(yuǎn)程登陸,只能在localhost。這個(gè)時(shí)候只要在localhost的那臺(tái)電腦,登入mysql后,更改 "mysql" 數(shù)據(jù)庫(kù)里的 "user" 表里的 "host" 項(xiàng),從"localhost"改稱"%"
mysql -u root -pvmwaremysqluse mysql;
mysqlupdate user set host = '%' where user = 'root';
mysqlselect host, user from user;
2、授權(quán)法。例如,你想myuser使用mypassword從任何主機(jī)連接到mysql服務(wù)器的話。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.6的主機(jī)連接到mysql服務(wù)器,并使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
我用的第一個(gè)方法,剛開(kāi)始發(fā)現(xiàn)不行,在網(wǎng)上查了一下,少執(zhí)行一個(gè)語(yǔ)句 mysqlFLUSH RIVILEGES
使修改生效,就可以了
另外一種方法:
在安裝mysql的機(jī)器上運(yùn)行:
1、d:\mysql\bin\mysql -h localhost -u root
//這樣應(yīng)該可以進(jìn)入MySQL服務(wù)器
2、mysqlGRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
//賦予任何主機(jī)訪問(wèn)數(shù)據(jù)的權(quán)限
3、mysqlFLUSH PRIVILEGES
//修改生效
4、mysqlEXIT
//退出MySQL服務(wù)器
這樣就可以在其它任何的主機(jī)上以root身份登錄啦。
MYSQL主從同步原理:
1) MYSQL主從同步是異步復(fù)制的過(guò)程,整個(gè)同步需要開(kāi)啟3線程,master上開(kāi)啟bin-log日志(記錄數(shù)據(jù)庫(kù)增、刪除、修改、更新操作);
2) Slave開(kāi)啟I/O線程來(lái)請(qǐng)求master服務(wù)器,請(qǐng)求指定bin-log中position點(diǎn)之后的內(nèi)容;
3) Master端收到請(qǐng)求,Master端I/O線程響應(yīng)請(qǐng)求,bin-log、position之后內(nèi)容返給salve;
4) Slave將收到的內(nèi)容存入relay-log中繼日志中,生成master.info(記錄master ip、bin-log、position、用戶名密碼);
5) Slave端SQL實(shí)時(shí)監(jiān)測(cè)relay-log日志有更新,解析更新的sql內(nèi)容,解析成sql語(yǔ)句,再salve庫(kù)中執(zhí)行;
6) 執(zhí)行完畢之后,Slave端跟master端數(shù)據(jù)保持一致!
**MYSQL bin-log用途**
1) bin-log日志最大的功能記錄數(shù)據(jù)庫(kù)增、刪、改、插入等操作,記錄用戶操作的SQL語(yǔ)句;
2) bin-log日志可以用數(shù)據(jù)增量備份、完整備份;
3) bin-log還可以主要主從復(fù)制+讀寫(xiě)分離;
MySQL 主備的基本原理主備流程切換
在狀態(tài) 1 中,客戶端的讀寫(xiě)都直接訪問(wèn)節(jié)點(diǎn) A,而節(jié)點(diǎn) B 是 A 的備庫(kù),只是將 A 的更新都同步過(guò)來(lái),到本地執(zhí)行。這樣可以保持節(jié)點(diǎn) B 和 A 的數(shù)據(jù)是相同的
當(dāng)需要切換的時(shí)候,就切成狀態(tài) 2。這時(shí)候客戶端讀寫(xiě)訪問(wèn)的都是節(jié)點(diǎn) B,而節(jié)點(diǎn) A 是 B 的備庫(kù)。
M-S模式中, 為什么建議把備庫(kù)設(shè)為readonly? 有時(shí)候一些運(yùn)營(yíng)類的查詢語(yǔ)句會(huì)被放到備庫(kù)上去查,設(shè)置為只讀可以防止誤操作; 防止切換邏輯有 bug,比如切換過(guò)程中出現(xiàn)雙寫(xiě),造成主備不一致 可以用 readonly 狀態(tài),來(lái)判斷節(jié)點(diǎn)的角色。 把備庫(kù)設(shè)置成只讀了,還怎么跟主庫(kù)保持同步更新呢?
因?yàn)?readonly 設(shè)置對(duì)超級(jí) (super) 權(quán)限用戶是無(wú)效的,而用于同步更新的線程,就擁有超級(jí)權(quán)限。
節(jié)點(diǎn) A 到 B 這條線的內(nèi)部流程是什么樣的
下圖畫(huà)出的就是一個(gè) update 語(yǔ)句在節(jié)點(diǎn) A 執(zhí)行,然后同步到節(jié)點(diǎn) B 的完整流程圖
備庫(kù) B 跟主庫(kù) A 之間維持了一個(gè)長(zhǎng)連接。主庫(kù) A 內(nèi)部有一個(gè)線程,專門(mén)用于服務(wù)備庫(kù) B 的這個(gè)長(zhǎng)連接
一個(gè)事務(wù)日志同步的完整過(guò)程是這樣的: 在備庫(kù) B 上通過(guò) change master 命令,設(shè)置主庫(kù) A 的 IP、端口、用戶名、密碼,以及要從哪個(gè)位置開(kāi)始請(qǐng)求 binlog,這個(gè)位置包含文件名和日志偏移量。 在備庫(kù) B 上執(zhí)行 start slave 命令,這時(shí)候備庫(kù)會(huì)啟動(dòng)兩個(gè)線程,就是圖中的 io_thread 和 sql_thread。其中 io_thread 負(fù)責(zé)與主庫(kù)建立連接。 主庫(kù) A 校驗(yàn)完用戶名、密碼后,開(kāi)始按照備庫(kù) B 傳過(guò)來(lái)的位置,從本地讀取 binlog,發(fā)給 B。 備庫(kù) B 拿到 binlog 后,寫(xiě)到本地文件,稱為中轉(zhuǎn)日志(relay log)。 sql_thread 讀取中轉(zhuǎn)日志,解析出日志里的命令,并執(zhí)行。 binlog 的三種格式對(duì)比
三種格式分別是: statement row mixed
為了便于描述 binlog 的這三種格式間的區(qū)別, 創(chuàng)建并初始化一個(gè)表
mysql CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `a` (`a`), KEY `t_modified`(`t_modified`) ) ENGINE=InnoDB; insert into t values(1,1,'2018-11-13'); insert into t values(2,2,'2018-11-12'); insert into t values(3,3,'2018-11-11'); insert into t values(4,4,'2018-11-10'); insert into t values(5,5,'2018-11-09');
刪除一行, 分析binlog
mysql delete from t /*comment*/ where a=4 and t_modified='2018-11-10' limit 1; 查詢binlog命令: mysql show binlog events in 'master.000001'; 當(dāng) binlog_format=statement 時(shí)
binlog 里面記錄的就是 SQL 語(yǔ)句的原文:
分析一下上圖輸出的結(jié)果: 第一行可以先忽略. 第二行是一個(gè) BEGIN,跟第四行的 commit 對(duì)應(yīng),表示中間是一個(gè)事務(wù); 第三行是真實(shí)的執(zhí)行語(yǔ)句, 在delete命令前,還有一個(gè)use test命令, 是mysql自動(dòng)添加的. 最后一行是一個(gè) COMMIT, 包含一個(gè)xid. 如果使用statement格式, 記錄到binlog 的是語(yǔ)句原文. 會(huì)有什么問(wèn)題出現(xiàn)呢?
如果delete 帶有 limit, 很可能出出現(xiàn)住主備數(shù)據(jù)庫(kù)不一致的情況
在主庫(kù)執(zhí)行這條 SQL 語(yǔ)句的時(shí)候,用的是索引 a;而在備庫(kù)執(zhí)行這條 SQL 語(yǔ)句的時(shí)候,卻使用了索引 t_modified
當(dāng) binlog_format= row 時(shí):
與statement相比, begin 與 commit 是一致的, 但是row格式?jīng)]有記錄原文, 而是替換成了兩個(gè)event, 粉筆是table_map 與 delete_rows
Table_map event,用于說(shuō)明接下來(lái)要操作的表是 test 庫(kù)的表 t; Delete_rows event,用于定義刪除的行為。 使用mysqlbinlog工具分析解析binlog中內(nèi)容 mysqlbinlog -vv data/master.000001 --start-position=8900;
解析結(jié)果:
server id 1,表示這個(gè)事務(wù)是在 server_id=1 的這個(gè)庫(kù)上執(zhí)行的。 每個(gè) event 都有 CRC32 的值,這是因?yàn)閰?shù) binlog_checksum 設(shè)置成了 CRC32。 Table_map event 顯示了接下來(lái)要打開(kāi)的表,map 到數(shù)字 226。現(xiàn)在我們這條 SQL 語(yǔ)句只操作了一張表,如果要操作多張表呢?每個(gè)表都有一個(gè)對(duì)應(yīng)的 Table_map event、都會(huì) map 到一個(gè)單獨(dú)的數(shù)字,用于區(qū)分對(duì)不同表的操作。 在 mysqlbinlog 的命令中,使用了 -vv 參數(shù)是為了把內(nèi)容都解析出來(lái),所以從結(jié)果里面可以看到各個(gè)字段的值(比如,@1=4、 @2=4 這些值)。 binlog_row_image 的默認(rèn)配置是 FULL,因此 Delete_event 里面,包含了刪掉的行的所有字段的值。如果把 binlog_row_image 設(shè)置為 MINIMAL,則只會(huì)記錄必要的信息,在這個(gè)例子里,就是只會(huì)記錄 id=4 這個(gè)信息。 最后的 Xid event,用于表示事務(wù)被正確地提交了。 為什么會(huì)有 mixed 格式的 binlog?為什么會(huì)有 mixed 這種 binlog 格式的存在場(chǎng)景? 因?yàn)橛行?statement 格式的 binlog 可能會(huì)導(dǎo)致主備不一致,所以要使用 row 格式。 但 row 格式的缺點(diǎn)是,很占空間。比如你用一個(gè) delete 語(yǔ)句刪掉 10 萬(wàn)行數(shù)據(jù),用 statement 的話就是一個(gè) SQL 語(yǔ)句被記錄到 binlog 中,占用幾十個(gè)字節(jié)的空間。但如果用 row 格式的 binlog,就要把這 10 萬(wàn)條記錄都寫(xiě)到 binlog 中。這樣做,不僅會(huì)占用更大的空間,同時(shí)寫(xiě) binlog 也要耗費(fèi) IO 資源,影響執(zhí)行速度。 所以,MySQL 就取了個(gè)折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己會(huì)判斷這條 SQL 語(yǔ)句是否可能引起主備不一致,如果有可能,就用 row 格式,否則就用 statement 格式。 如何解決雙M結(jié)構(gòu)的循環(huán)復(fù)制問(wèn)題解決兩個(gè)節(jié)點(diǎn)間的循環(huán)復(fù)制的問(wèn)題的邏輯 規(guī)定兩個(gè)庫(kù)的 server id 必須不同,如果相同,則它們之間不能設(shè)定為主備關(guān)系; 一個(gè)備庫(kù)接到 binlog 并在重放的過(guò)程中,生成與原 binlog 的 server id 相同的新的 binlog; 每個(gè)庫(kù)在收到從自己的主庫(kù)發(fā)過(guò)來(lái)的日志后,先判斷 server id,如果跟自己的相同,表示這個(gè)日志是自己生成的,就直接丟棄這個(gè)日志。 按照這個(gè)邏輯,如果我們?cè)O(shè)置了雙 M 結(jié)構(gòu),日志的執(zhí)行流就會(huì)變成這樣: 從節(jié)點(diǎn) A 更新的事務(wù),binlog 里面記的都是 A 的 server id; 傳到節(jié)點(diǎn) B 執(zhí)行一次以后,節(jié)點(diǎn) B 生成的 binlog 的 server id 也是 A 的 server id; 再傳回給節(jié)點(diǎn) A,A 判斷到這個(gè) server id 與自己的相同,就不會(huì)再處理這個(gè)日志。所以,死循環(huán)在這里就斷掉了。
分享標(biāo)題:mysql主備怎么訪問(wèn),mysql主備方案
鏈接地址:http://chinadenli.net/article28/hcpocp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、定制開(kāi)發(fā)、域名注冊(cè)、微信公眾號(hào)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)