在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分钟通知,其实就是把卖不出去的服务器资源便宜卖了,若是资源不够了再及时收回来。批发改零售嘛!一天两天的 是不会被回收的!
由于是一次性的想怎么捣鼓怎么捣鼓 若是想在正式服务器上面捣鼓 也不拦着,若是你吼得住的话!