因小程序需要部署服務器端進行聯調,所以在阿里雲ECS 部署了MariaDB,部署過程基本一步一個坑~踩出來的
故簡單覆盤,遇到問題 ,一定要定位到原因再 再進行有序的排查~
不禁讓我想起去年阿里面試 問我服務器連接不上問題排查的思路,現在的思路比當時又上了一層樓吧~
登錄:
本地連接:mysql -u root -p
本地遠程連接:mysql -h yourip -u user -p
問題:
1.網絡監測
只要可以ping通,說明網絡沒問題
2.端口監測
查看端口監控狀態 |
netstat -talnp |
若是0.0.0.0:3306 說明已對所有地址監聽,若沒有可在my.conf裏配置
3.防火牆監測
查看防火牆狀態 |
iptables --list |
4.mysql配置文件檢查
- 檢查my.cnf的配置,bind-address=addr可以配置綁定ip地址。
- 不配置或者IP配置爲0.0.0.0,表示監聽所有客戶端連接。
- #ps -aux | grep mysql 查看進程ID是3340
- #ll /proc/3340 查看進程程序情況,找配置文件或者#which mysql 找程序路徑
5.mysql訪問權限
- 進入mysql數據庫
- $mysql -u root -p
- >use mysql;
- >select host,user from user;
- MySQL建用戶的時候會指定一個host,默認是127.0.0.1/localhost只能本機訪問;
- 其它機器用這個用戶帳號訪問會提示沒有權限,host改爲%,表示允許所有機器訪問。
6.阿里雲ECS安全組中設置 配置規則
頭一天晚上本來早早部署好準備測試,搞到睡覺都沒弄好~
睡了一覺突然想起來是不是跟阿里雲什麼配置有關,果然。。。
增加入方向 MariaDB的3306端口的監聽權限~謝謝啊,讓我又精通了mysql配置~
遠程連接問題參考:
https://www.linuxidc.com/Linux/2017-10/148068.htm
https://www.2cto.com/database/201401/269578.html
https://jingyan.baidu.com/article/95c9d20dac9040ec4f75617a.html
增加本地防火牆策略 |
防火牆:
centos從7開始默認用的是firewalld,這個是基於iptables的,雖然有iptables的核心,但是iptables的服務是沒安裝的。所以你只要停止firewalld服務即可:
systemctl stop firewalld.service && systemctl disable firewalld.service
systemctl start firewalld.service && systemctl enable firewalld.service
centos7沒有iptables
1 關閉防火牆-----service iptables stop
2 啓動防火牆-----service iptables start
3 重啓防火牆-----service iptables restart
4 查看防火牆狀態--service iptables status
5 永久關閉防火牆--chkconfig iptables off
6 永久關閉後啓用--chkconfig iptables on
MariaDb的安裝
yum install mariadb mariadb-server #詢問是否要安裝,輸入Y即可自動安裝
systemctl start mariadb.service #啓動MariaDB
systemctl stop mariadb.service #停止MariaDB
systemctl restart mariadb.service #重啓MariaDB
systemctl enable mariadb.service #設置開機自動啓動
systemctl disenable mariadb.service #設置開機自啓關閉
創建用戶 |
|
CREATE USER 'yunqi'@'%' IDENTIFIED BY 'yunqi';
MariaDB [(none)]> CREATE USER 'yunqi'@'IP.%' IDENTIFIED BY 'yangfan'; |
雲棲上線後,通過此方式建立數據庫授權 |
MariaDB [(none)]> CREATE USER 'yunqi'@'%.yunqilive.cn' IDENTIFIED BY 'yunqi'; |
雲棲上線後,通過此方式建立數據庫授權 |
MariaDB [(none)]> CREATE USER 'yunqi'@'%' IDENTIFIED BY 'yunqi&'; |
在測試階段使用 通配符 來授權所有用戶 |
設置密碼
UPDATE mysql.user SET password = PASSWORD('yunqi&maria') WHERE USER = 'yunqi';
set password for 'yunqi'@'%' =password('yunqi&');
用戶管理 |
用戶授權(其中 with grant option 表示擁有該權限後的用戶可以給別的用戶授予自身所擁有的權限。)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.222.1' IDENTIFIED BY 'password' WITH GRANT OPTION;
grant all on yunqi to yunqi identified by 'password';
grant all on yunqi.* TO yunqi@'%' IDENTIFIED BY 'password';
//取消權限
revoke all on *.* from 'root'@'%';
delete from user where user='user' and host='%';,host from user;
//刷新並生效權限
flush privileges;
此時發現問題:local不能登錄yunqi用戶,報錯:ERROR 1045 (28000): Access denied for user 'yunqi'@'localhost' (using password: YES) |
解決方式參考:https://blog.csdn.net/u010098331/article/details/50730309 |
PS:
| GRANT USAGE ON *.* TO 'yunqi'@'%' IDENTIFIED BY PASSWORD '*B717581CBB1306AEA99BAD57CB004F51B4F5BDDC' |
| GRANT ALL PRIVILEGES ON `yunqi`.* TO 'yunqi'@'%' |
| GRANT ALL PRIVILEGES ON `yunqi`.`yunqi` TO 'yunqi'@'%'
注意:all不能和*.*一起使用的,不然就報錯了。
find 目錄 -name “”
grep -rn "bind-address" *