zoukankan      html  css  js  c++  java
  • 安装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分钟通知,其实就是把卖不出去的服务器资源便宜卖了,如果资源不够了再及时收回来。批发改零售嘛!一天两天的 是不会被回收的!

    因为是一次性的想怎么捣鼓怎么捣鼓 如果想在正式服务器上面捣鼓 也不拦着,如果你吼得住的话!

     

     

  • 相关阅读:
    [译]理解Javascript的异步等待
    [译]为什么我要离开gulp和grunt转投npm脚本的怀抱
    [译]代码审查的重要性
    [译]转译器: 今日大不同
    猴年马月都到了
    关于“我是谁”的思考
    ASP.net MVC基础
    利用Spring.Net技术打造可切换的分布式缓存读写类
    JQuery WEB前段开发
    Javascript——说说js的调试
  • 原文地址:https://www.cnblogs.com/haizizhu/p/9215665.html
Copyright © 2011-2022 走看看