安裝mariadb/mysql 鏈接失敗問題

在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分鐘通知,其實就是把賣不出去的服務器資源便宜賣了,若是資源不夠了再及時收回來。批發改零售嘛!一天兩天的 是不會被回收的!

由於是一次性的想怎麼搗鼓怎麼搗鼓 若是想在正式服務器上面搗鼓 也不攔着,若是你吼得住的話!

相關文章
相關標籤/搜索