設置mysql服務允許外網訪問,修改mysql的配置文件,有的是my.ini,有的是my.cnf【linux】.
1:設置mysql的配置文件
/etc/mysql/my.cnf
找到 bind-address =127.0.0.1 將其注釋掉;//作用是使得不再只允許本地訪問;
重啟mysql:/etc/init.d/mysql restart;
2:登錄mysql資料庫:mysql -u root -p
mysql> use mysql;
查詢host值:
mysql> select user,host from user;
如果沒有"%"這個host值,就執行下面這兩句:
mysql> update user set host='%' where user='root';
mysql> flush privileges;
或者也可以執行:
mysql>grand all privileges on *.* to root@'%' identifies by ' xxxx';
其中 第一個*表示資料庫名;第二個*表示該資料庫的表名;如果像上面那樣 *.*的話表示所有到資料庫下到所有表都允許訪問;
『%':表示允許訪問到mysql的ip地址;當然你也可以配置為具體到ip名稱;%表示所有ip均可以訪問;
後面到『xxxx'為root 用戶的password;
舉例:
任意主機以用戶root和密碼mypwd連接到mysql伺服器
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql> flush privileges;
IP為192.168.1.102的主機以用戶myuser和密碼mypwd連接到mysql伺服器
mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.102' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql> flush privileges;
2. MYSQL資料庫,請問遠程的MYSQL如何訪問,知道資料庫IP,賬號,密碼,請問怎麼訪問呢
下載MySQL Server,安裝,然後點擊開始-MySQL-MySQL Query Browser,server host輸入主機IP,username輸入用戶名,password輸入密碼,port輸入埠,一般默認都為3306,進去後可以對表進行操作,如果要備份的話的點擊開始-MySQL-MySQL Administrator,進去看下就知道怎麼用了
http://discount-outletonline.com
http://jordonike.com
3. 如何設置mysql在區域網中訪問
第一:更改 「mysql」 資料庫里的 「user」 表裡的 「host」 項,從」localhost」改稱'%'。
或者新加條記錄,「host」 項為要訪問的ip地址,並授權。重啟mysql服務。
第二:在系統防火牆添加例外埠:3306,並允許例外。錯誤提示:
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server
的解決方法: 1。 改表法。可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 "mysql" 資料庫里的 "user" 表裡的 "host" 項,從"localhost"改稱"%"
mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>select host, user from user; 2. 授權法。例如,你想myuser使用mypassword從任何主機連接到mysql伺服器的話。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.3的主機連接到mysql伺服器,並使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
3.在window自帶的防火牆里的例外添加3306埠
總結:mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';
第一句是以許可權用戶root登錄
第二句:選擇mysql庫
第三句:查看mysql庫中的user表的host值(即可進行連接訪問的主機/IP名稱)
第四句:修改host值(以通配符%的內容增加主機/IP地址),當然也可以直接增加IP地址
第五句:刷新MySQL的系統許可權相關表
第六句:再重新查看user表時,有修改。。
重起mysql服務即可完成。
4. 哪位大神可以簡單說一下外網訪問內網MySQL資料庫的步驟嗎
1,明確MySQL資料庫內網訪問地址埠,確保MySQL資料庫服務正常,在內網可以正常訪問連接。如我本機MySQL資料庫訪問地址是localhost:3306。
2.內網使用花生殼動態域名解析,內網伺服器安裝花生殼,並使用它。
3.使用自己的帳號登錄。如沒有帳號,「注冊帳號」進入網站進行注冊帳號。正常登錄後,會顯示登錄帳號下的域名。
4.做映射。在默認域名的地方點擊花生殼管理添加映射。點擊當前主機。內網任何埠映射,獲取外網隨機埠,點擊確認。
5. MySql怎樣允許主機被遠程訪問
1、改表法。
可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 "mysql" 資料庫里的 "user" 表裡的 "host" 項,從"localhost"改稱"%"
mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
2、授權法。例如,你想myuser使用mypassword從任何主機連接到mysql伺服器的話。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.6的主機連接到mysql伺服器,並使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
我用的第一個方法,剛開始發現不行,在網上查了一下,少執行一個語句 mysql>FLUSH RIVILEGES
使修改生效,就可以了
另外一種方法:
在安裝mysql的機器上運行:
1、d:\mysql\bin\>mysql -h localhost -u root
//這樣應該可以進入MySQL伺服器
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
//賦予任何主機訪問數據的許可權
3、mysql>FLUSH PRIVILEGES
//修改生效
4、mysql>EXIT
//退出MySQL伺服器
這樣就可以在其它任何的主機上以root身份登錄啦。
6. 關於mysql主從伺服器的兩個問題 請大牛指教
1、這個首先要保證Slave的readonly沒有打開,這樣在主庫掛掉後,修改應用的資料庫連接為Slave即可。一般來說,我的備庫在正常狀態下是readonly=true的。一旦主庫掛掉,就將備庫的readonly設置為false。然後切換應用的DB配置,重啟應用。
2、如果數據比較少。建議手工將產生的數據同步到主庫。如果數據比較多,那麼應該在主庫掛掉的時候,將備庫的binlog執行位置記錄好。然後將主備直接調換身份。將主庫作為一個slave,從備庫記錄的binlog位置開始同步。
7. MySQL如何訪問
●客戶端訪問服務端
。利用Windows控制台訪問(MySQL客戶端)
。利用資料庫管理工具(Navicat)
●客戶端需要連接認證
。-h: 主機地址(本機localhost可以省略)
。-P: 埠號(默認3306可以省略)
。-u: 用戶名
。-p: 用戶密碼
8. MySQL實戰問題03 mysql如何保證主備一致
MySQL 主備的基本原理主備流程切換在狀態 1 中,客戶端的讀寫都直接訪問節點 A,而節點 B 是 A 的備庫,只是將 A 的更新都同步過來,到本地執行。這樣可以保持節點 B 和 A 的數據是相同的
當需要切換的時候,就切成狀態 2。這時候客戶端讀寫訪問的都是節點 B,而節點 A 是 B 的備庫。
M-S模式中, 為什麼建議把備庫設為readonly? 有時候一些運營類的查詢語句會被放到備庫上去查,設置為只讀可以防止誤操作; 防止切換邏輯有 bug,比如切換過程中出現雙寫,造成主備不一致 可以用 readonly 狀態,來判斷節點的角色。 把備庫設置成只讀了,還怎麼跟主庫保持同步更新呢?因為 readonly 設置對超級 (super) 許可權用戶是無效的,而用於同步更新的線程,就擁有超級許可權。
節點 A 到 B 這條線的內部流程是什麼樣的下圖畫出的就是一個 update 語句在節點 A 執行,然後同步到節點 B 的完整流程圖
備庫 B 跟主庫 A 之間維持了一個長連接。主庫 A 內部有一個線程,專門用於服務備庫 B 的這個長連接
一個事務日誌同步的完整過程是這樣的: 在備庫 B 上通過 change master 命令,設置主庫 A 的 IP、埠、用戶名、密碼,以及要從哪個位置開始請求 binlog,這個位置包含文件名和日誌偏移量。 在備庫 B 上執行 start slave 命令,這時候備庫會啟動兩個線程,就是圖中的 io_thread 和 sql_thread。其中 io_thread 負責與主庫建立連接。 主庫 A 校驗完用戶名、密碼後,開始按照備庫 B 傳過來的位置,從本地讀取 binlog,發給 B。 備庫 B 拿到 binlog 後,寫到本地文件,稱為中轉日誌(relay log)。 sql_thread 讀取中轉日誌,解析出日誌里的命令,並執行。 binlog 的三種格式對比三種格式分別是: statement row mixed
為了便於描述 binlog 的這三種格式間的區別, 創建並初始化一個表
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,-11-13'); insert into t values(2,2,-11-12'); insert into t values(3,3,-11-11'); insert into t values(4,4,-11-10'); insert into t values(5,5,-11-09');刪除一行, 分析binlog
mysql> delete from t /*comment*/ where a>=4 and t_modified<=-11-10' limit 1; 查詢binlog命令: mysql> show binlog events in 'master.000001' 當 binlog_format=statement 時binlog 裡面記錄的就是 SQL 語句的原文:
分析一下上圖輸出的結果: 第一行可以先忽略. 第二行是一個 BEGIN,跟第四行的 commit 對應,表示中間是一個事務; 第三行是真實的執行語句, 在delete命令前,還有一個use test命令, 是mysql自動添加的. 最後一行是一個 COMMIT, 包含一個xid. 如果使用statement格式, 記錄到binlog 的是語句原文. 會有什麼問題出現呢?如果delete 帶有 limit, 很可能出出現住主備資料庫不一致的情況
在主庫執行這條 SQL 語句的時候,用的是索引 a;而在備庫執行這條 SQL 語句的時候,卻使用了索引 t_modified
當 binlog_format= row 時:與statement相比, begin 與 commit 是一致的, 但是row格式沒有記錄原文, 而是替換成了兩個event, 粉筆是table_map 與 delete_rows
Table_map event,用於說明接下來要操作的表是 test 庫的表 t; Delete_rows event,用於定義刪除的行為。 使用mysqlbinlog工具分析解析binlog中內容 mysqlbinlog -vv data/master.000001 --start-position=8900;解析結果:
server id 1,表示這個事務是在 server_id=1 的這個庫上執行的。 每個 event 都有 CRC32 的值,這是因為參數 binlog_checksum 設置成了 CRC32。 Table_map event 顯示了接下來要打開的表,map 到數字 226。現在我們這條 SQL 語句只操作了一張表,如果要操作多張表呢?每個表都有一個對應的 Table_map event、都會 map 到一個單獨的數字,用於區分對不同表的操作。 在 mysqlbinlog 的命令中,使用了 -vv 參數是為了把內容都解析出來,所以從結果裡面可以看到各個欄位的值(比如,@1=4、 @2=4 這些值)。 binlog_row_image 的默認配置是 FULL,因此 Delete_event 裡面,包含了刪掉的行的所有欄位的值。如果把 binlog_row_image 設置為 MINIMAL,則只會記錄必要的信息,在這個例子里,就是只會記錄 id=4 這個信息。 最後的 Xid event,用於表示事務被正確地提交了。 為什麼會有 mixed 格式的 binlog?為什麼會有 mixed 這種 binlog 格式的存在場景? 因為有些 statement 格式的 binlog 可能會導致主備不一致,所以要使用 row 格式。 但 row 格式的缺點是,很占空間。比如你用一個 delete 語句刪掉 10 萬行數據,用 statement 的話就是一個 SQL 語句被記錄到 binlog 中,佔用幾十個位元組的空間。但如果用 row 格式的 binlog,就要把這 10 萬條記錄都寫到 binlog 中。這樣做,不僅會佔用更大的空間,同時寫 binlog 也要耗費 IO 資源,影響執行速度。 所以,MySQL 就取了個折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己會判斷這條 SQL 語句是否可能引起主備不一致,如果有可能,就用 row 格式,否則就用 statement 格式。 如何解決雙M結構的循環復制問題解決兩個節點間的循環復制的問題的邏輯 規定兩個庫的 server id 必須不同,如果相同,則它們之間不能設定為主備關系; 一個備庫接到 binlog 並在重放的過程中,生成與原 binlog 的 server id 相同的新的 binlog; 每個庫在收到從自己的主庫發過來的日誌後,先判斷 server id,如果跟自己的相同,表示這個日誌是自己生成的,就直接丟棄這個日誌。 按照這個邏輯,如果我們設置了雙 M 結構,日誌的執行流就會變成這樣: 從節點 A 更新的事務,binlog 裡面記的都是 A 的 server id; 傳到節點 B 執行一次以後,節點 B 生成的 binlog 的 server id 也是 A 的 server id; 再傳回給節點 A,A 判斷到這個 server id 與自己的相同,就不會再處理這個日誌。所以,死循環在這里就斷掉了。9. MySQL - 主備
在實際的生產中,為了解決Mysql的單點故障,一般都會採用「主備模式」。
MySQL幾乎所有的高可用架構,都直接依賴於 binlog。雖然這些高可用架構已經呈現出越來越復雜的趨勢,但都是從最基本的一主一備演化過來的。
下圖為主備切換流程
在狀態 1 中,客戶端的讀寫都直接訪問節點 A,而節點 B 是 A 的備庫,只是將 A 的更新都同步過來,到本地執行。這樣可以保持節點 B 和 A 的數據是相同的。
當需要切換的時候,就切成狀態 2。這時候客戶端讀寫訪問的都是節點 B,而節點 A 是 B 的備庫。
在狀態 1 中,雖然節點 B 沒有被直接訪問,但是依然建議把節點 B(也就是備庫)設置成只讀(readonly)模式。這樣做,有以下幾個考慮:
圖下圖 中畫出的就是一個 update 語句在節點 A 執行,然後同步到節點 B 的完整流程圖。
備庫 B 跟主庫 A 之間維持了一個長連接。主庫 A 內部有一個線程,專門用於服務備庫 B 的這個長連接。一個事務日誌同步的完整過程是這樣的:
在備庫 B 上通過 change master 命令,設置主庫 A 的 IP、埠、用戶名、密碼,以及要從哪個位置開始請求 binlog,這個位置包含文件名和日誌偏移量。
在備庫 B 上執行 start slave 命令,這時候備庫會啟動兩個線程,就是圖中的 io_thread 和 sql_thread。其中 io_thread 負責與主庫建立連接。
主庫 A 校驗完用戶名、密碼後,開始按照備庫 B 傳過來的位置,從本地讀取 binlog,發給 B。
備庫 B 拿到 binlog 後,寫到本地文件,稱為中轉日誌(relay log)。
sql_thread 讀取中轉日誌,解析出日誌里的命令,並執行。
主庫需要復制新增binlog到從庫才能完成同步,這個同步過程就是同步延遲。主從延遲最直接的表現是,備庫消費中轉日誌(relay log)的速度,比主庫生產 binlog 的速度要慢。
「同步策略」:Master會等待所有的Slave都回應後才會提交,這個主從的同步的性能會嚴重的影響。
「半同步策略」:Master至少會等待一個Slave回應後提交。
「非同步策略」:Master不用等待Slave回應就可以提交。
「延遲策略」:Slave要落後於Master指定的時間。
對於不同的業務需求,有不同的策略方案,但是一般都會採用最終一致性,不會要求強一致性,畢竟強一致性會嚴重影響性能。
10. 如何設置mysql在區域網中訪問
1、首先確保區域網中主機都可以訪問msyql資料庫主機的網路通暢。
2、建立一個資料庫用戶,並給該用戶賦上相應訪問許可權就可以了。賦權語句如下:
GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'password'WITHGRANTOPTION;
上述語句意思是將root用戶賦予可以訪問任何主機的任何資料庫許可權,注意password為你設置的root用戶密碼。