安裝mariadb/mysql 連接失敗問題


在linux下安裝mariadb會出現一系列問題

問題1->服務器端不需要用戶名密碼就可登陸數據庫

問題2->php使用mysql不能連接數據庫 訪問受限

問題3->navicate遠程連接數據庫失敗

 

在搗鼓一段時間之后然后莫名就可以了,雖然知道是權限方面的問題,但是終究不得要領。為了弄清楚特意找了個新服務器,重新搭建一套ubuntu、php7、mariadb的環境重現一下問題。

具體的安裝過程這里略過了啊,網上這方面資料很多。

安裝完mariadb第一次登陸是沒有登錄密碼限制的,就是隨便輸什么密碼都可以進入,但是用戶名是固定的 root

#mysql -u root -p

 

空格

注意我這里輸入的是空格 然后就進來了.

之后我們看看這是為什么

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 命令行測試端口開放情況

1、安裝telnet。我的win7下就沒有telnet,在cmd下輸入telnet提示沒有該命令。於是我們進入控制面板---->程序---->打開或關閉windows功能。然后等一段時間,在出來的對話框把telnet客戶端和telnet服務器勾選上,其他的不用管,然后點擊確定。這樣就安裝好了telnet組件了。

2、 下面開始測試某個端口是否開啟,比如我測的是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分鍾通知,其實就是把賣不出去的服務器資源便宜賣了,如果資源不夠了再及時收回來。批發改零售嘛!一天兩天的 是不會被回收的!

因為是一次性的想怎么搗鼓怎么搗鼓 如果想在正式服務器上面搗鼓 也不攔着,如果你吼得住的話!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM