十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
mysql的默認端口是3306端口,對外開放3306 一般來說有兩大塊。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了沁源免費建站歡迎大家使用!
一大塊是:系統(tǒng)防火墻級別:iptables:
iptables -I input -p tcp --dport 3306 -j ACCEPT
另一大塊:mysql層:
授權(quán)用戶對外訪問:
grant 權(quán)限 on 數(shù)據(jù)庫.表 to “用戶”@“主機名” identified by “密碼”; 其實可以這樣理解,grant 權(quán)限 on 權(quán)限負責范圍 to 權(quán)限對象 【認證密碼】
這個兩層都做了才可以遠程連接。linux 學習不只只是這些 掌握點基礎(chǔ)知識才能上手,建議看看,學好Linux,做好運維。加油?。?!
開啟 MySQL 的遠程登陸帳號有兩大步:
1、確定服務器上的防火墻沒有阻止 3306 端口。
MySQL 默認的端口是 3306 ,需要確定防火墻沒有阻止 3306 端口,否則遠程是無法通過 3306 端口連接到 MySQL 的。
如果您在安裝 MySQL 時指定了其他端口,請在防火墻中開啟您指定的 MySQL 使用的端口號。
如果不知道怎樣設置您的服務器上的防火墻,請向您的服務器管理員咨詢。
2、增加允許遠程連接 MySQL 用戶并授權(quán)。
1)首先以 root 帳戶登陸 MySQL
在 Windows 主機中點擊開始菜單,運行,輸入“cmd”,進入控制臺,MySQL 的 bin 目錄下,然后輸入下面的命令。
在 Linux 主機中在命令提示行下輸入下面的命令。
CODE: [COPY]
MySQL -uroot -p123456
123456 為 root 用戶的密碼。
2)創(chuàng)建遠程登陸用戶并授權(quán)
CODE: [COPY]
grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';
上面的語句表示將 discuz 數(shù)據(jù)庫的所有權(quán)限授權(quán)給 ted 這個用戶,允許 ted 用戶在 123.123.123.123 這個 IP 進行遠程登陸,并設置 ted 用戶的密碼為 123456 。
下面逐一分析所有的參數(shù):
all PRIVILEGES 表示賦予所有的權(quán)限給指定用戶,這里也可以替換為賦予某一具體的權(quán)限,例如:select,insert,update,delete,create,drop 等,具體權(quán)限間用“,”半角逗號分隔。
discuz.* 表示上面的權(quán)限是針對于哪個表的,discuz 指的是數(shù)據(jù)庫,后面的 * 表示對于所有的表,由此可以推理出:對于全部數(shù)據(jù)庫的全部表授權(quán)為“*.*”,對于某一數(shù)據(jù)庫的全部表授權(quán)為“數(shù)據(jù)庫名.*”,對于某一數(shù)據(jù)庫的某一表授 權(quán)為“數(shù)據(jù)庫名.表名”。
ted 表示你要給哪個用戶授權(quán),這個用戶可以是存在的用戶,也可以是不存在的用戶。
123.123.123.123 表示允許遠程連接的 IP 地址,如果想不限制鏈接的 IP 則設置為“%”即可。
123456 為用戶的密碼。
執(zhí)行了上面的語句后,再執(zhí)行下面的語句,方可立即生效。
CODE: [COPY]
flush privileges;
-----------------------------------------------------------------------------------------------------------------
解決方法:
1、改表法:
可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql后,更改 “mysql” 數(shù)據(jù)庫里的 “user” 表里的 “host” 項,從“l(fā)ocalhost”改稱“%”
x:\mysql -u root -pvmware
mysql use mysql;
mysql update user set host = ‘%’ where user = ‘root’;
mysql select host, user from user;
mysql flush privileges;
注:mysql flush privileges; 使修改生效。
2、授權(quán)法:
例如,你想myuser使用mypassword從任何主機連接到mysql服務器的話。
mysql GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.3的主機連接到mysql服務器,并使用mypassword作為密碼
mysql GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword’ WITH GRANT OPTION;
轉(zhuǎn)自:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、問如何開啟MySQL的遠程連接
Q:
最近學習PHP,裝了個phpwind論壇和FTP流量插件,需要遠程連接MySQL數(shù)據(jù)庫.不知道如何打開本地服務器的遠程連接.現(xiàn)在本地服務器上的論壇和FTP流量插件都運行正常,在另一臺服務器上安裝插件,連不上數(shù)據(jù)庫.到PW官方求助沒人回貼.因此來這尋求幫助.
服務器信息
PHP程式版本: 4.3.11
MySQL 版本: 4.1.10-nt
服務器端信息: Microsoft-IIS/5.0
裝有phpMyAdmin
A1:
遠程連接到MySQL需要做的
1. 進入MySQL,創(chuàng)建一個新用戶xuys:
格式: grant 權(quán)限 on 數(shù)據(jù)庫名.表名 用戶@登錄主機 identified by "用戶密碼";
grant select,update,insert,delete on *.* to xuys@192.168.88.234 identified by "xuys1234";
查看結(jié)果,執(zhí)行:
use mysql;
select host,user,password from user;
可以看到在user表中已有剛才創(chuàng)建的xuys用戶,host字段表示登錄的主機,其值可以用IP,也可用主機名,將host字段的值改為%就表示在任何客戶端機器上能以xuys用戶登錄到MySQL服務器,建議在開發(fā)時設為%.
update user set host = '%' where user = 'xuys';
2.
./mysqladmin -u root -p pwd reload
./mysqladmin -u root -p pwd shutdown
3.
./mysqld_safe --user=root
記住: 對授權(quán)表的任何修改都需要重新reload,即執(zhí)行第3步.
如果經(jīng)過以上3個步驟還是無法從客戶端連接,請執(zhí)行以下操作,在MySQL數(shù)據(jù)庫的db表中插入一條記錄:
use mysql;
insert into db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
update db set host = '%' where user = 'xuys';
重復執(zhí)行上面的第2,3步.
A2:
Web與MySQL數(shù)據(jù)庫分離開來是一個不錯的選擇,避免因為大量的數(shù)據(jù)庫查詢占用CPU而使Web資源不足,同時可以使Web服務器的資源盡最大的提供瀏覽服務,而數(shù)據(jù)庫服務器單獨的只處理數(shù)據(jù)庫事務.
我對這方面的原理不甚太十分了解,我的做法其實就是下面要說的,很簡單.大家有更好的經(jīng)驗和技巧不妨提出來分享一下.
適用范圍: 擁有獨立主機權(quán)限
硬件配置: 兩臺服務器,至于具體服務器硬件配置就不在本文范圍內(nèi)了
其中: A為Web服務器(假設IP為: 192.192.192.192),B為MySQL數(shù)據(jù)服務器(假設IP為: 168.168.168.168)
著手動作:
1. 在Web服務器A配置好Web服務.關(guān)于這方面文章很多了.假設Web服務器的IP為: 192.192.192.192
2. 在數(shù)據(jù)庫服務器B安裝好MySQL服務
3. 現(xiàn)在新版的MySQL一般默認都不允許遠程連接的,需要建立遠程連接賬號才可以
以命令行方式使用root賬號進入MySQL
mysql -u root -p pass
選擇進入MySQL數(shù)據(jù)庫
use mysql;
查看所有存在的賬號和地址
SELECT `Host`,`User` FROM `user`;
比如我的就是:
+------------+-------+
| Host | User |
+------------+-------+
| localhost | |
| localhost | pma |
| localhost | root |
+------------+-------+
3 rows in set (0.00 sec)
也就是說,存在三個只允許本地連接的(localhost)賬號,分別為root,pma,空用戶.
現(xiàn)在決定讓root具有上面那個Web服務器A的遠程鏈接的權(quán)限,那么就這樣:
UPDATE `user` SET `Host` = '192.192.192.192' WHERE `User` = 'root' LIMIT 1;
這樣192.192.192.192這臺Web服務器就可以遠程連接到這個數(shù)據(jù)庫服務器了,假如你想讓任何遠程機器都可以連接這個數(shù)據(jù)庫,就將192.192.192.192換為%,不過不建議這樣做,原因你知道啦!
假如你想新建一個用戶new_user具備遠程鏈接的權(quán)限的話,就這樣:
INSERT INTO `user` ( `Host` , `User` , `Password` , `Select_priv` , `Insert_priv` , `Update_priv` , `Delete_priv` , `Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` , `Process_priv` , `File_priv` , `Grant_priv` , `References_priv` , `Index_priv` , `Alter_priv` , `Show_db_priv` , `Super_priv` , `Create_tmp_table_priv` , `Lock_tables_priv` , `Execute_priv` , `Repl_slave_priv` , `Repl_client_priv` , `ssl_type` , `ssl_cipher` , `x509_issuer` , `x509_subject` , `max_questions` , `max_updates` , `max_connections` ) VALUES ('192.192.192.192', 'new_user', PASSWORD( 'new_user_password' ) , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', '0', '0', '0');
將new_user改為你想要的名字就可以了,密碼是: new_user_password,當然你可以隨意設置.
當你的數(shù)據(jù)庫可以遠程連接后,你就可以在你的Web服務器的論壇config.inc.php中設置$dbhost變量為你的MySQL數(shù)據(jù)庫服務器B的IP了:
$dbhost = '168.168.168.168';
實際操作中,最好兩臺機器在同一個機房的同一網(wǎng)段/防火墻內(nèi).當然如果有可能的話,將數(shù)據(jù)庫服務器放置于Web服務器網(wǎng)絡內(nèi)的局域網(wǎng)中就更好了.
Q3:
還是這樣簡潔些:
grant all on yourdb.* to yourUsername@yourHost identified by "yourPassword";
flush privileges; //使權(quán)限立刻生效
在同一個mysqld上運行多個端口服務器的3306端口上已經(jīng)運行了一個mysql服務,配置文件位于默認的 etc my
cnf下,現(xiàn)在需要再開一個端口運行mysql服務,希望能重用當前mysql的配置(修改某項共用配置時只需要修改一
在同一個mysqld上運行多個端口
服務器的3306端口上已經(jīng)運行了一個mysql服務,配置文件位于默認的/etc/my.cnf下,現(xiàn)在需要再開一個端口運行mysql服務,希望能重用當前mysql的配置(修改某項共用配置時只需要修改一處即可)。
網(wǎng)上有一篇通過mysqld_multi在同一個mysql下運行多個示例的文章,它是在配置文件的[mysqld_multi]里指定程序路徑,[mysqld1]、[mysql2]里分別指定相應的配置。但我還是想直接通過mysqld_safe方式啟動,不想在公共配置里指定每一個datadir目錄。經(jīng)過一番摸索,可以這樣做:
0.
當前默認端口3306的配置和啟動方式:
/etc/my.ini中的配置:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
通過如下方式啟動
cd /usr/local/stow/mysql-5.0.51a-linux-i686-icc-glibc23
./bin/mysqld_safe
1.
配置3307端口mysql
1.1
創(chuàng)建數(shù)據(jù)庫
cd /usr/local/stow/mysql-5.0.51a-linux-i686-icc-glibc23
./scripts/mysql_install_db --datadir=/home/zhouguoqiang/tmp/mysql_3307/data
不必理會其中的warning、ERROR信息。此外,如果沒有特殊說明,下文均是在當前目錄下操作。
1.2
指定3307專有的配置
編輯文件/home/zhouguoqiang/tmp/mysql_3307/my.cnf,添加如下內(nèi)容:
[mysqld]
port = 3307
socket = /tmp/mysql_3307.sock
datadir = /home/zhouguoqiang/tmp/mysql_3307/data
innodb_data_home_dir = /home/zhouguoqiang/tmp/mysql_3307/data
innodb_log_group_home_dir = /home/zhouguoqiang/tmp/mysql_3307/data
注意,如果使用了innodb類型的數(shù)據(jù)庫或者/etc/my.cnf里指定了innodb目錄相關(guān)的參數(shù),這里一定要重新指定成適當位置,否則將會共用3306中的innodb_data_home_dir和innodb_log_group_home_dir,進而導致3307端口的mysql啟動失敗(沒有權(quán)限或者文件被鎖)。
1.3
啟動3307端口的數(shù)據(jù)庫
./bin/mysqld_safe --defaults-extra-file=/home/zhouguoqiang/tmp/mysql_3307/my.cnf
需要注意的是,還有一個參數(shù)--defaults-file,二者是有區(qū)別的:
--defaults-file
加載指定的配置文件,將會完全覆蓋/etc/my.cnf中的配置
--default-extra-file
加載配置文件中指定的項,不會完全覆蓋/etc/my.cnf中的配置。如果同時在/etc/my.cnf中配置過,將會優(yōu)先使用指定配置文件里的。
1.4
訪問3307端口的數(shù)據(jù)庫
由于默認是3306端口,因此需要指定端口號
mysql -uroot -P 3307 -h 127.0.0.1
必須指定-h,而且不能使用localhost
1.5
停止3307端口的數(shù)據(jù)庫
mysqladmin -uroot -S /tmp/mysql_3307.sock shutdown
1、首先檢查mysql所在服務器的防火墻,如果限制了外網(wǎng)對3306端口的連接,那么放開限制
Linux服務器中執(zhí)行
iptables -L 可以查看當前的防火墻規(guī)則
iptables -F 可以清空所有防火墻規(guī)則
2、確保mysql的監(jiān)聽地址是0.0.0.0
監(jiān)聽地址是0.0.0.0 ,表示該mysql允許所有IP地址進行連接,這是允許遠程連接的基礎(chǔ)
監(jiān)聽地址是127.0.0.1,則代表該mysql只允許所在服務器本機連接,外網(wǎng)是無法連接的
怎么知道m(xù)ysql的監(jiān)聽地址是多少
Linux服務器中執(zhí)行如下命令可以查看: netstat -nutlp|grep mysql
3、添加遠程連接mysql的賬號
此步驟是必須要操作的,mysql本身的用戶只能在本機上連接數(shù)據(jù)庫,外網(wǎng)連接的話,需要先添加遠程用戶并授權(quán)。
在mysql命令行模式下,或者phpmyadmin中執(zhí)行sql語句添加遠程連接用戶
grant all on *.* to root@'%' identified by '123456';
flush privileges;
命令解釋:
*.* 第一個*表示庫,第二個*表示表; *.*對全部數(shù)據(jù)庫的全部表授權(quán),so.ok 表示只對so這個庫中的ok表授權(quán)
root 表示要給哪個用戶授權(quán),這個用戶可以是存在的用戶,也可以是不存在的
'%' 表示允許遠程連接的IP地址,%代表允許所有IP連接
只允許某個IP遠程連接,可以寫成'123.123.123.123'
只允許123.123.123.*這個網(wǎng)段遠程連接,可以寫成 '123.123.123.%' '123456' 是設置授權(quán)用戶的連接密碼
flush privileges; 代表立即刷新權(quán)限表,使添加的用戶生效
上面三步都設置好了,就可以再次嘗試遠程連接mysql了。
第一:更改 “mysql” 數(shù)據(jù)庫里的 “user” 表里的 “host” 項,從”localhost”改稱'%'。
或者新加條記錄,“host” 項為要訪問的ip地址,并授權(quán)。重啟mysql服務。
第二:在系統(tǒng)防火墻添加例外端口:3306,并允許例外。
錯誤提示:
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server
的解決方法:
1。改表法。可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql后,更改 "mysql" 數(shù)據(jù)庫里的 "user" 表里的 "host" 項,從"localhost"改稱"%"
1.mysql -u root -pvmware
mysqluse mysql;
mysqlupdate user set host = '%' where user = 'root';
mysqlselect host, user from user;
2. 授權(quán)法。例如,你想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端口
總結(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庫
第三句:查看mysql庫中的user表的host值(即可進行連接訪問的主機/IP名稱)
第四句:修改host值(以通配符%的內(nèi)容增加主機/IP地址),當然也可以直接增加IP地址
第五句:刷新MySQL的系統(tǒng)權(quán)限相關(guān)表
第六句:再重新查看user表時,有修改。。
重起mysql服務即可完成。
給你個linux的配置 my.cnf的內(nèi)容
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
[client]
socket = /tmp/mysql.sock
default-character-set=utf8
[mysqld1]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character-set-server=utf8
default-storage-engine=innodb
port = 3306
table_open_cache = 64
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqld2]
datadir=/usr/local/mysql/data1
basedir=/usr/local/mysql
character-set-server=utf8
default-storage-engine=innodb
port = 3307
table_open_cache = 64
innodb_data_home_dir = /usr/local/mysql/data1
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data1
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
----【mysqld】中的配置和單實例的mysqld配置一致,多實例中每個[mysqld]需要有不同的端口號,sock,datadir
然后是啟動:/usr/local/mysql/bin/mysqld_mulit --defaults-extra-file=/etc/my.cnf start 1
----這里的數(shù)字1 對應[mysqld1] ,關(guān)閉就是 把start 改成stop,啟動所有就是 start all
其他命令你自己網(wǎng)上查下吧