远程连接MySQL(MariaDB)数据库
网络环境:
- 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 内容如下:
从文件中的注释上来看,它主要有这么几个配置文件
- /etc/mysql/mariadb.cnf 默认配置文件,
- /etc/mysql/conf.d/*.cnf 设置全局项的文件
- "/etc/mysql/mariadb.conf.d/*.cnf" 设置与MariaDB相关的信息
- "~/.my.cnf" 设置该账户对应的信息
这也就是为什么我们在my.cnf做相关设置有的时候不起作用(可能在其他配置文件中有相同的项,MySQL最终采用的是另外一个文件中的设置)。
根据官方的说法, MariaDB为了提高安全性,默认只监听127.0.0.1中的3306端口并且禁止了远程的TCP链接,我们可以通过下面两步来开启MySQL的远程服务
- 注释掉skip-networking选项来开启远程访问.
- 注释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)数据库的更多相关文章
- Windows操作系统下远程连接MySQL数据库
用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...
- Navicat for mysql 远程连接 mySql数据库10061、1045错误
原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...
- linux远程连接mysql数据库
在linux系统中,远程连接mysql数据库时不仅需要开启ip访问,还需要将防火墙中添加相应规则 在wdlinux中的[安全管理]菜单下选择[防火墙[iptables]]选项,增加端口为3306的规则 ...
- 无法远程连接mysql,连接后也没有权限创建数据库
问题现象:无法远程连接mysql,连接后也没有权限创建数据库 问题原因: MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web- ...
- navcat无法远程连接mysql数据库解决办法
navcat无法远程连接mysql数据库,一般都是因为本地ip没有访问权限,服务器上执行下面指令即可解决 mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO ...
- 远程连接MySQL数据库问题总结
远程连接MySQL数据库时,陆陆续续遇到了一些杂七杂八的问题,相信很多人也曾经遇到过这类问题,下面总结归纳在下面,方便以后直接查找. 1:出现ERROR 2003 (HY000): Can't con ...
- 【MySQL解惑笔记】Navicat 无法远程连接MySQL数据库
安装好Navicat之后远程连接MySQL数据库出现以下报错截图: 出现以上截图怀疑是mysql用户权限不够: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.1 ...
- 远程连接 mySql数据库
远程连接 mySql数据库 一.安装并配置MySQL1.安装MySQL:运行mysql-essential-6.0.11-alpha-win32,按“MySQL+6.0+Windows下安装图解”完成 ...
- 远程连接mysql数据库
远程连接mysql数据库需要以下步骤(改表法): 1.数据源(数据库服务器)对要访问数据库进行授权: 2.本地库(本地)连接: 具体方法: 1. 进入数据服务器,输入cmd进入控制台:输入 mysql ...
随机推荐
- Android特效专辑(五)——自定义圆形头像和仿MIUI卸载动画—粒子爆炸
Android特效专辑(五)--自定义圆形头像和仿MIUI卸载动画-粒子爆炸 好的,各位亲爱的朋友,今天讲的特效还是比较炫的,首先,我们会讲一个自定义圆形的imageView,接着,我们会来实现粒子爆 ...
- 如何使用firefox适用于javascript的debugger命令
首先安装firebug,在firefox的扩展里搜索安装即可. 然后在页面中启用firebug中的脚本: 然后在网页某些位置加入debugger命令,比如如下页面代码: <!DOCTYPE ht ...
- Unity使用C++作为游戏逻辑脚本的研究(二)
文章申明:本文来自JacksonDunstan的博客系列文章内容摘取和翻译,版权归其所有,附上原文的链接,大家可以有空阅读原文:C++ Scripting( in Unity) 上一篇文章写完,有同学 ...
- TCP TIME WAIT
根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime) ...
- 面向对象,更适合JavaScript
面向对象程序设计是软件开发中一个很庞大很复杂的话题,它并不是仅仅学会类.继承.封装.多态这些面向对象编程语法元素就表示掌握的,这些语法元素只是实现面向对象程序的工具, 就像砖块.水泥能搭建小屋,也能造 ...
- pg_dump命令帮助信息
仅为参考查阅方便,完全命令行帮助信息,无阅读价值. pg_dump dumps a database as a text file or to other formats. Usage: pg_du ...
- 百度技术沙龙之2013-2&3
2013年2月2日技术沙龙 商业产品开发------谢马林 业务逻辑加大设计难度 集成难度大 降低学习成本 统一标准化开发模式 面向集成的架构平台 业务复杂,设计抽象的技术支撑不够 抽象6类数据流业务 ...
- 《Linux下FTP服务器搭建及FTP使用》
.LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...
- 【leetcode】 算法题 两数之和
问题 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...
- Linux中mongodb定时远程备份
下载mongodb https://www.cnblogs.com/tartis/p/5291580.html mongodb定时备份文档 虚拟机报错要改BIOS 虚拟技术开启 进入root账户 s ...