文章目錄
1. 添加服務器安全組規則(3306)
2. 添加服務器防火牆安全端口(3306)(以centos爲例)
防火牆端口未放行報錯:
2.1 查看firewall防火牆狀態:
systemctl status firewalld
或
firewall-cmd --state
2.2 啓動firewall防火牆
systemctl start firewalld
- 設置開機啓用防火牆
systemctl enable firewalld.service
- 設置開機不啓動防火牆
systemctl disable firewalld.service
2.3 關閉firewall防火牆
systemctl disable firewalld
2.4 查看firewall防火牆開放的端口
(1)查看防火牆的所有信息
firewall-cmd --list-all
(2)查看防火牆所有開放端口信息
firewall-cmd --list-ports
(3)查看某個端口信息(yes表示已放行,no表示未放行
)
firewall-cmd --zone=public --query-port=3306/tcp
說明:
--zone
作用域
--query-port=3306/tcp
查詢端口,格式爲:端口/通訊協議
2.5 放行firewall防火牆端口
(1)放行某個端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
說明:
--zone
作用域
--add-port=3306/tcp
添加端口,格式爲:端口/通訊協議
--permanent
永久生效,沒有此參數重啓後失效
(2)放行一個端口區間
firewall-cmd --zone=public --add-port=3306-8888/tcp --permanent
刪除放行端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
2.6 重新加載firewall(將修改應用於防火牆)
firewall-cmd --reload
3. 添加服務器防火牆安全端口(3306)(以ubuntu爲例)
3.1 查看UFW防火牆狀態以及本機放行端口
ufw status或sudo ufw status
查看某一端口是否被監聽
netstat -an | grep 端口號
3.2 打開UFW防火牆
sudo ufw enable
3.3 關閉UFW防火牆
sudo ufw disable
3.4 UFW防火牆放行某個端口
ufw allow 3306
- 拒絕放行某個端口
ufw deny 端口號
- 刪除某個放行/拒絕放行端口的規則
ufw delete allow/deny 端口號
3.5 UFW防火牆重啓
sudo ufw reload
4. 查看並編輯mysql的配置文件
4.1 查詢mysql配置文件的位置(my.cnf)
mysql --help|grep my.cnf
或
whereis my.cnf
4.2 編輯my.cnf
一般位置爲/etc/my.cnf
,準確位置以第一步查詢到的爲準
vi /etc/my.cnf
點擊鍵盤的i,進入插入模式,可以編輯該文件。
(1)若[mysqld]節中有一行bind-address=127.0.0.1
則表示僅在本地環路地址127.0.0.1的3306端口監聽,將其註釋即可。
#bind-address=127.0.0.1
(2)在[mysqld]節中增加下面一行:(可選,若配置完成報錯,則可進行這一步)
Mysql默認在本地環路地址127.0.0.1的3306端口監聽,要使用外網訪問需要修改配置文件。
bind-address=0.0.0.0 #全部地址或者指定的ip地址
(3)退出並保存配置
點擊鍵盤的Esc鍵,並輸入:wq
,退出並保存該文件。
4.3 重啓mysqld服務
service mysqld restart
5. 配置mysql用戶訪問權限
未配置用戶遠程訪問權限報錯:
5.1 以管理員(root)身份連接mysql數據庫
mysql -u root -p
5.2 選擇mysql庫,用戶信息都存在這個庫的user表中
若未進行這一步操作,則之後操作表都需要寫成mysql.user
,否則會報錯:ERROR 1046 (3D000): No database selected
。
use mysql;
5.3 查詢用戶列表
select user, host, authentication_string, plugin from User;
或(若沒有選擇mysql庫)
select user, host, authentication_string, plugin from mysql.User;
查看錶格中 root 用戶的 host,默認應該顯示的 localhost,只支持本地訪問,不允許遠程訪問。
5.4 創建可遠程登陸用戶並賦予權限(以mysql8之前的版本爲例)
grant privileges on *.* to 'user'@'host' identified by 'password';
user
:你將創建的用戶名。
host
:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost
,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%
。
password
:該用戶的登陸密碼,密碼可以爲空,如果爲空則該用戶可以不需要密碼登陸服務器,但是如果使用navcat登錄則必須要密碼。
例如:
grant all on *.* to 'root'@'%' identified by 'root';
但是在mysql8中已經不支持
grant
命令創建並賦予權限,會報錯`ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'root'' at line 1`
5.6 創建可遠程登陸用戶並賦予權限(適用於mysql任何版本)
(1)創建用戶(可遠程訪問使用%
)
create User 'user'@'host' identified by 'password';
或(若沒有選擇mysql庫)
create mysql.User 'user'@'host' identified by 'password';
說明:
username
:你將創建的用戶名。
host
:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost
,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%。
password
:該用戶的登陸密碼,密碼可以爲空,如果爲空則該用戶可以不需要密碼登陸服務器,但是如果使用navcat登錄則必須要密碼。
例如:
create User 'root'@'%' identified by 'root';
create User 'student'@'localhost' identified by '123';
create User 'student'@'本機IP' identified by '123';
create User 'student'@'%' identified by '';
(2)用戶授權(授予全部權限使用all
,全部數據庫全部表格使用*.*
)
grant privileges on database.table to 'user'@'host';
說明:
privileges
:用戶的操作權限,如select
,insert
,update
等,如果要授予所的權限則使用all
。
databasename:數據庫名。
tablename:表名,如果要授予該用戶對所有數據庫和表的相應操作權限則可用*
表示,如*.*
。
例如:
grant all on *.* to 'root'@'%';
grant insert on studentsystem.guide to 'student'@'localhost';
注意:
用以上命令授權的用戶不能給其它用戶授權,如果想讓該用戶可以授權,用以下命令:grant privileges on database.table to 'user'@'host' with grant option;
5.7 重新加載權限表數據
這一步一定要做,不然無法成功! 這句表示從mysql數據庫的grant表中重新加載權限數據。因爲MySQL把權限都放在了cache中,所以在做完更改後需要重新加載。
flush privileges;
5.8 刪除用戶及權限
(1)刪除用戶數據
delete from User where Host='%';
或(若沒有選擇mysql庫)
delete from mysql.User where Host='%';
(2)重新加載權限表數據
flush privileges;
6. 使用Navcat for Mysql訪問遠程數據庫
詳情見Navicat 12 for MySQL下載、安裝及使用教程(https://blog.csdn.net/weixin_44222492/article/details/98775090)