网络环境:

  • MySQL(MariaDB)服务器的操作系统为 CentOS 7
  • MySQL(MariaDB)服务器IP:172.16.230.15
  • 客户端操作系统为 Windows 2008 R2
  • 客户主机IP:172.16.230.200

在实际的工程或项目开发中,如果数据库服务器被放置在机房或机房的机柜中,开发或工程人员只能通过网络远程连接数据库进行操作时就需要用到我下面介绍的内容了。拓扑图如下:

 
 

1、客户端远程连接数据库需要先安装mysql的客户端工具,mysql的客户端工具网上有很多,大家可以百度一下。

2、查看windows 2008的IP地址,看是否和服务器在同一网段(即使不在同一网段,只要双方彼此能够ping通就OK),查看方法如下:

C:\mysql5628\bin>ipconfig

Windows IP 配置

以太网适配器 本地连接:

   连接特定的 DNS 后缀 . . . . . . . :

   本地链接 IPv6 地址. . . . . . . . : fe80::ecba:5cc1:388a:edd2%11

   IPv4 地址 . . . . . . . . . . . . : 172.16.230.200

   子网掩码  . . . . . . . . . . . . : 255.255.255.0

   默认网关. . . . . . . . . . . . . : 172.16.230.2

3、在客户端测试与数据库服务器的连通性:

C:\mysql5628\bin>ping 172.16.230.15

正在 Ping 172.16.230.15 具有 32 字节的数据:

来自 172.16.230.15的回复: 字节=32 时间<1ms TTL=64

来自 172.16.230.15的回复: 字节=32 时间<1ms TTL=64

来自 172.16.230.15 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.230.15 的回复: 字节=32 时间<1ms TTL=64

172.16.230.15 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 0ms,最长 = 0ms,平均 = 0ms

以上反馈信息说明客户机与服务器之间的网络连通是没有问题的。

4、客户端使用用户名和密码尝试通过网络远程连接数据库

C:\mysql5628\bin>mysql -h 172.16.230.15 -u root -p

Enter password: **********

ERROR 2003 (HY000): Can't connect to MySQL server on '172.16.230.15' (10060)

这个报错说明,数据库不允许除了本机外的任何主机连接数据库。为了解决这个问题,我们需要在服务器上进行访问权限的更改来允许其他主机也能访问该数据库。

5、以下两步都需要到服务器上操作

(1)为安全起见,给数据库的root用户设置密码

[root@localhost ~]# mysql -u root -p  //利用root用户登录数据库

Enter password:     //新安装的数据库是没有密码的,这里直接按下回车就行

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 4

Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> set password for 'root'@'localhost' = password('mycisco.cc');   

//为root用户设置的密码是mycisco.cc,注意:第二个password和左括号之间是不能有空格的。

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

这样,用户要想登录数据库就必须输入正确的用户名和密码才行。您可在提示符下输入exit退出数据库,然后再重新登录试一试就知道新设置的密码已经生效了。

(2)为其他主机远程连接数据库开放访问权限,重新登入数据库:

MariaDB [(none)]> use mysql;   //选择mysql数据库进行操作

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

MariaDB [mysql]> select user,password,host from user;  //查看user,password,host这三个字段的权限分配情况

+------+-------------------------------------------+-----------------------+

| user | password                                                                       | host                     |

+------+-------------------------------------------+-----------------------+

| root | *139EBD293A149D3C25DBD676D882BCBA5A00223E | localhost             |

| root |                                                                                        | localhost.localdomain |

| root |                                                                                        | 127.0.0.1             |

| root |                                                                                        | ::1                   |

|      |                                                                                           | localhost             |

|      |                                                                                           | localhost.localdomain |

+------+-------------------------------------------+-----------------------+

6 rows in set (0.00 sec)

//通过以上输出可以看出数据库默认只允许用户root在本地服务器(localhost)上登录,不允许其他主机远程连接。

MariaDB [mysql]> grant all privileges on *.* to root@"%" identified by "mycisco.cc";  

//上面这条语句将允许用户root使用密码(mycisco.cc)在任何主机上连接该数据库,并赋予该用户所有权限。

Query OK, 0 rows affected (0.01 sec)

最后配置好权限之后不应该忘记刷新使之生效
MariaDB [mysql]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select user,password,host from user;

+------+-------------------------------------------+-----------------------+

| user | password                                  | host                         |

+------+-------------------------------------------+-----------------------+

| root | *139EBD293A149D3C25DBD676D882BCBA5A00223E | localhost             |

| root |                                                                                        | localhost.localdomain |

| root |                                                                                        | 127.0.0.1             |

| root |                                                                                        | ::1                   |

|      |                                                                                           | localhost             |

|      |                                                                                           | localhost.localdomain |

| root | *139EBD293A149D3C25DBD676D882BCBA5A00223E | %          |  //这行中的“%”就意味着任何主机都被允许连接数据库

+------+-------------------------------------------+-----------------------+

7 rows in set (0.00 sec)

MariaDB [mysql]> 

这样数据库的访问权限就设置好了。

6、回到客户端再尝试连接,如图1,显示连接数据库成功。

 
 

注:如果连接不成功,可能是服务器中的防火墙没有关闭,可通过指令 systemctl disable firewalld 关闭firewalld 并重启系统。


MariaDB 与普通的MySQL数据库的一个不同在于它的配置文件不止一个,它将不同的数据放入到不同的配置文件中,之前的 /etc/mysql/my.cnf 内容如下:

 

从文件中的注释上来看,它主要有这么几个配置文件

  1. /etc/mysql/mariadb.cnf 默认配置文件,
  2. /etc/mysql/conf.d/*.cnf 设置全局项的文件
  3. "/etc/mysql/mariadb.conf.d/*.cnf" 设置与MariaDB相关的信息
  4. "~/.my.cnf" 设置该账户对应的信息

这也就是为什么我们在my.cnf做相关设置有的时候不起作用(可能在其他配置文件中有相同的项,MySQL最终采用的是另外一个文件中的设置)。
根据官方的说法, MariaDB为了提高安全性,默认只监听127.0.0.1中的3306端口并且禁止了远程的TCP链接,我们可以通过下面两步来开启MySQL的远程服务

  1. 注释掉skip-networking选项来开启远程访问.
  2. 注释bind-address项,该项表示运行哪些IP地址的机器连接,允许所有远程的机器连接,但是配置文件这么多,这两选项究竟在哪呢?这个时候使用grep在/etc/mysql/目录中的所有文件中递归查找,看哪个文件中含有这个字符串
    我们输入:
grep -rn "skip-networking" *

结果如下:

 

十分幸运的是这两项都在同一文件中(我自己的是没有skip-networking项)
我们打开文件 /etc/mysql/mariadb.conf.d/50-server.cnf ,注释掉bind-address项,如下:

 

只有这些仍然不够,我们只是开启了MySQL监听远程连接的选项,接下来需要给对应的MySQL账户分配权限,允许使用该账户远程连接到MySQL
输入

select User, host from mysql.user;

查看用户账号信息:

 

root账户中的host项是localhost表示该账号只能进行本地登录,我们需要修改权限,输入命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

修改远程连接密码
先进入到mysql

use mysql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '新密码' WITH GRANT OPTION;

修改权限。%表示针对所有IP,password表示将用这个密码登录root用户,如果想只让某个IP段的主机连接,可以修改为

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;

注意:此时远程连接的密码可能与你在本地登录时的密码不同了,主要看你在IDENTIFIED BY后面给了什么密码
具体的请参考GRANT命令

最后配置好权限之后不应该忘记刷新使之生效

FLUSH PRIVILEGES;

保存更改。再看看用户信息:

 

这个时候发现相比之前多了一项,它的host项是%,这个时候说明配置成功了,我们可以用该账号进行远程访问了
输入 shell service mysql restart 重启远程服务器,测试一下:

 

如果这些都做完了,还是不能连接,可以看一下端口是不是被防火墙拦截了

远程连接MySQL(MariaDB)数据库的更多相关文章

  1. Windows操作系统下远程连接MySQL数据库

    用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...

  2. Navicat for mysql 远程连接 mySql数据库10061、1045错误

    原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...

  3. linux远程连接mysql数据库

    在linux系统中,远程连接mysql数据库时不仅需要开启ip访问,还需要将防火墙中添加相应规则 在wdlinux中的[安全管理]菜单下选择[防火墙[iptables]]选项,增加端口为3306的规则 ...

  4. 无法远程连接mysql,连接后也没有权限创建数据库

    问题现象:无法远程连接mysql,连接后也没有权限创建数据库 问题原因: MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web- ...

  5. navcat无法远程连接mysql数据库解决办法

    navcat无法远程连接mysql数据库,一般都是因为本地ip没有访问权限,服务器上执行下面指令即可解决 mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO ...

  6. 远程连接MySQL数据库问题总结

    远程连接MySQL数据库时,陆陆续续遇到了一些杂七杂八的问题,相信很多人也曾经遇到过这类问题,下面总结归纳在下面,方便以后直接查找. 1:出现ERROR 2003 (HY000): Can't con ...

  7. 【MySQL解惑笔记】Navicat 无法远程连接MySQL数据库

    安装好Navicat之后远程连接MySQL数据库出现以下报错截图: 出现以上截图怀疑是mysql用户权限不够: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.1 ...

  8. 远程连接 mySql数据库

    远程连接 mySql数据库 一.安装并配置MySQL1.安装MySQL:运行mysql-essential-6.0.11-alpha-win32,按“MySQL+6.0+Windows下安装图解”完成 ...

  9. 远程连接mysql数据库

    远程连接mysql数据库需要以下步骤(改表法): 1.数据源(数据库服务器)对要访问数据库进行授权: 2.本地库(本地)连接: 具体方法: 1. 进入数据服务器,输入cmd进入控制台:输入 mysql ...

随机推荐

  1. web报表工具FineReport的公式编辑框的语法简介

    FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式, ...

  2. 实施一个SAP项目大概分为下面几个过程

    实施一个SAP项目大概分为下面几个过程 1.需求调研.了解客户需要实施的范围,比如是财务模块,后勤模块,人力资源,商务智能等等.需求调研通常有几种方法了解,和客户开会讨论:分配到具体业务人员了解:通过 ...

  3. [转]web服务器压力测试工具

    http_load学习心得: 测试网站每秒所能承受的平均访问量(吞吐量) http_load -parallel 5 -fetches 1000 urls.txt这段命令行是同时使用5个进程,随机访问 ...

  4. MySQL Join 的实现原理

    在寻找Join 语句的优化思路之前,我们首先要理解在MySQL 中是如何来实现Join 的,只要理解了实现原理之后,优化就比较简单了.下面我们先分析一下MySQL 中Join 的实现原理.在MySQL ...

  5. 完整的treeview菜单实例

    以下是我用treeview控件按部门和员工显示设备领用情况代码. Option Compare Database    Dim rec As New ADODB.Recordset    Dim re ...

  6. Apache Flink Quickstart

    Apache Flink 是新一代的基于 Kappa 架构的流处理框架,近期底层部署结构基于 FLIP-6 做了大规模的调整,我们来看一下在新的版本(1.6-SNAPSHOT)下怎样从源码快速编译执行 ...

  7. Day8 接口与归一化设计

    接口:在程序的使用中,我不能把程序的主体直接提供给使用者,一般是提供一个接口. 为什么要使用接口: 1,接口提取了一群共同的函数,可以把接口当做一个函数的集合. 2,让子类去实现接口中的函数. 归一化 ...

  8. python---内置函数,匿名函数,嵌套函数,高阶函数,序列化

    函数简单说明 # 函数即"变量" # 高阶函数 # a.把一个函数名当做实参传给另一个函数(在不修改被装饰函数的源代码的情况下,为其添加功能) # b.返回值中包含函数名(不修改函 ...

  9. 基于分支限界法的旅行商问题(TSP)二

    和上篇一样,考前写写伪代码,考完了补上具体的解释和代码. 状态{矩阵,结果集,下界} 全局结果集列表,全局上界初始为Infinite 建立一个heap,存储状态,出堆规则为拥有最小的下界. 利用red ...

  10. Android 开发知识体系

    知识体系 1.Unix/Linux平台技术:基本命令,Linux下的开发环境 2.企业级数据库技术:SQL语言.SQL语句调优.Oracle数据库技术 3.Java 语言核心技术:Java语言基础.J ...