在linux下安裝mariadb會出現一系列問題php
問題1->服務器端不須要用戶名密碼就可登錄數據庫mysql
問題2->php使用mysql不能鏈接數據庫 訪問受限linux
問題3->navicate遠程鏈接數據庫失敗sql
在搗鼓一段時間以後而後莫名就能夠了,雖然知道是權限方面的問題,可是終究不得要領。爲了弄清楚特地找了個新服務器,從新搭建一套ubuntu、php七、mariadb的環境重現一下問題。數據庫
具體的安裝過程這裏略過了啊,網上這方面資料不少。ubuntu
安裝完mariadb第一次登錄是沒有登陸密碼限制的,就是隨便輸什麼密碼均可以進入,可是用戶名是固定的 rootvim
#mysql -u root -p
空格windows
注意我這裏輸入的是空格 而後就進來了.安全
以後咱們看看這是爲何服務器
MariaDB [mysql]> use mysql; MariaDB [mysql]> select user,password,host from user;
這個名爲mysql的庫是記錄mysql相關內容的數據
而user就是記錄mysql用戶名及密碼權限的表能夠看到root的密碼是空的
下面咱們先解決這個問題
先運行命令
MariaDB [mysql]> grant all privileges on *.* to root@"localhost" identified by "123456";
而後咱們查看用戶及密碼
MariaDB [mysql]> select user,password,host from user;
而後咱們就會發現必須使用123456這個密碼來進圖數據庫了 問題一解決
下一步咱們嘗試使用遠程工具navicate連接mariadb
而後經過度娘找到了一些方法
mysql和mariadb中關於root權限管理不一樣 須要調配
執行兩條命令 添加兩個用戶
MariaDB [mysql]> grant all privileges on *.* to root@"%" identified by "123456"; MariaDB [mysql]> grant all privileges on *.* to root@"127.0.0.1" identified by "123456"; MariaDB [mysql]> flush privileges;
退出數據庫 exit;或者ctrl+c
修改mysql的配置文件
# vim /etc/mysql/mariadb.conf.d/50-server.cnf
找到
bind-address = 127.0.0.1
將其註釋掉
# bind-address = 127.0.0.1
保存退出 重啓mysql
# service mysql restart
再次鏈接以後我驚喜的發現 仍是連接不上,一股煩躁之氣漸漸升起。平定一下心神,看看數據庫去吧。
MariaDB [mysql]> select * from user;
以後找到這一行 爲何是N呢 這個權限不對啊 改下試試
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION; MariaDB [mysql]> flush privileges;
從新鏈接發現
蒼天啊 大地啊 絕望啊 ,放棄吧? 開玩笑!
繼續查資料發現是端口問題使用
# netstat -aptn執行看看,是否監聽在0.0.0.0:3306
重啓mysql以後發現監聽並無改變
kill掉3306的進程號 991 再次重啓以後我獲得了下面幾張截圖效果
本覺得弄到這種程度就能夠了 然而現實繼續教育了我 navicate遠程鏈接繼續失敗!!!
其實這時候我對於權限這塊仍是端口這塊我是抱有疑問的 因此我試了下 本地php 使用pdo連接數據庫 發現是能夠鏈接操做的 通過之前失敗的經驗我能夠認爲權限問題已經解決了。
因此問題二 php使用mysql不能鏈接數據庫訪問受限 在倒騰的過程當中已經解決了
這裏畫下重點:通常狀況下 到這裏數據庫鏈接的問題 已經基本解決了
根據查閱的資料,形成不能鏈接的緣由是 mysql 和 mariadb 對於 root 權限管理是不一樣的,mariadb對於root的權限默認是不開放Gan_priv權限的。另外對於用戶表mariadb添加了兩個新字段,is_role和password_expired。數據庫的表格數也是不一樣的,老版mysql是24張表左右 而mariadb是30張左右(這裏就不去數各個版本的具體數量了,有個概念)
下面繼續直面個人問題
想一想若是權限沒有問題了 是否是端口問題呢?
而後使用telnet工具本地 cmd 命令行測試端口開放狀況
一、安裝telnet。個人win7下就沒有telnet,在cmd下輸入telnet提示沒有該命令。因而咱們進入控制面板---->程序---->打開或關閉windows功能。而後等一段時間,在出來的對話框把telnet客戶端和telnet服務器勾選上,其餘的不用管,而後點擊肯定。這樣就安裝好了telnet組件了。
二、 下面開始測試某個端口是否開啓,好比我測的是47.104.195.152的 3306 這個端口。在cmd下輸入
telnet 47.104.195.152 3306
而正常的狀況是這樣的 跳轉一個新的頁面 若是有疑問能夠測試80 或者22 端口我這裏是通的
因此如今已經鎖定是端口的問題
下面是一些開放的操做 不過在我這裏是沒什麼用的 怎麼開端口加防火牆規則也麼用
我用是阿里雲的服務器
ss -nltp | grep 3306 查看服務端口是否鏈接
iptables -nL 查看防火牆端口是否開啓
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 開放防火牆3306端口
通過一系列噁心的嘗試 發現仍是不能接通
既然內部不能改變規則 那就去服務器上 阿里雲界面去改試試
這個是案例雲安全組裏面的內容 通過添加必定的規則 有了下面的內容 這個3306
開始是沒有的,添加好了規則以後 重啓服務器
ok 連接成功 整理一下回去睡覺了 中間還有不少細節沒弄清楚 可是明天還要上班啊
人生什麼的仍是不要隨便懷疑吧 相信本身。
-------------------------------------------------------------------------------分割線--------------------------------------------------------------------------------------------------------
這裏給你們普及一個阿里雲服務器比較實惠的小技巧 在阿里雲建立實例的時候 選擇搶佔實例的選項
很適合開發人員進行一次性試驗的時候使用 作一次試驗 部署一臺雲服務器 成本控制在2元之內
搶佔式實例 搶佔式實例 搶佔式實例
這個官方的解釋是隨時有可能會釋放 提早5分鐘通知,其實就是把賣不出去的服務器資源便宜賣了,若是資源不夠了再及時收回來。批發改零售嘛!一天兩天的 是不會被回收的!
由於是一次性的想怎麼搗鼓怎麼搗鼓 若是想在正式服務器上面搗鼓 也不攔着,若是你吼得住的話!