本篇文章给大家谈谈主机模式下使用127.0.0.1:3306无法连接mysql服务器,以及无法连接使用主机名的服务器的知识点,同时本文还将给你拓展C++操作mysql__通过mysql的capi连接m
本篇文章给大家谈谈主机模式下使用127.0.0.1:3306无法连接mysql服务器,以及无法连接使用主机名的服务器的知识点,同时本文还将给你拓展C++操作mysql__通过mysql的c api连接mysql服务器、centos – SQLSTATE [HY000] [2003]无法连接到’127.0.0.1′(13)上的MySQL服务器但是’localhost’工作、CentOS下php使用127.0.0.1不能连接mysql的解决方法、linux – 无法连接到PostgreSQL服务器:无法连接到服务器:权限被拒绝等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 主机模式下使用127.0.0.1:3306无法连接mysql服务器(无法连接使用主机名的服务器)
- C++操作mysql__通过mysql的c api连接mysql服务器
- centos – SQLSTATE [HY000] [2003]无法连接到’127.0.0.1′(13)上的MySQL服务器但是’localhost’工作
- CentOS下php使用127.0.0.1不能连接mysql的解决方法
- linux – 无法连接到PostgreSQL服务器:无法连接到服务器:权限被拒绝
主机模式下使用127.0.0.1:3306无法连接mysql服务器(无法连接使用主机名的服务器)
如何解决主机模式下使用127.0.0.1:3306无法连接mysql服务器?
我正在使用主机模式运行一个 MysqL 容器,这是我的 docker-compose.yml
MysqL:
image: MysqL:8.0
command: --default-authentication-plugin=MysqL_native_password
restart: always
environment:
MysqL_ROOT_PASSWORD: root
volumes:
- ./MysqL/datadir:/var/lib/MysqL
- ./MysqL/MysqL-files:/var/lib/MysqL-files
- ./MysqL/conf.d:/etc/MysqL
network_mode: host
container_name: MysqL
根据我的理解,host模式会共享宿主机的网络,所以MysqL容器在docker中监听的端口3306
应该和宿主机的3306
端口上监听的一样。所以我应该可以通过 127.0.0.1:3306
或 localhost:3306
访问 MysqL 但事实是失败的。
为什么?有什么问题吗?
我可以用桥接模式连接到MysqL。但是由于种种原因,我需要使用主机模式
更新
我从这个答案中找到了一些线索How to tell docker on mac to use host network for all purpose?
他说:
主机网络驱动程序将按照您期望的方式在 Linux 上运行,但它不会提供您在 Mac 和 Windows 上寻找的内容。
但是这个答案在 3 年前就很活跃了。不知道现在docker有没有解决这个问题。
解决方法
您使用的登录名有什么权限? Docker 有自己的网络管理方式,因此如果您的登录名使用 ''localhost'' 或 127.0.0.1'',您的容器将不会看到它。
尝试 docker inspect <yourContainerId> | grep IPAddress
,您将在 docker 网络中看到容器的“真实”地址。
如果您授予登录名@''%'' 的权限,那么它应该可以工作。
,检查以下内容
- 仅 Linux 主机支持主机网络。
- 检查端口 3306 的主机防火墙设置(如果该端口已打开且可用)。
- 用
ip addr show
检查IP地址 - 使用 netstat 命令验证哪个进程绑定到端口 80。您需要使用 sudo,因为该进程归 Docker 守护程序用户所有,否则您将无法看到其名称或 PID。
sudo netstat -tulpn | grep :80
C++操作mysql__通过mysql的c api连接mysql服务器
C++通过mysql的c api连接mysql服务器
1、在连接之前,不要忘记打开mysql服务器哇(Navicat打开或者不打开都可以)
2、添加包含目录
3、添加libmysql.lib到附属依赖中
上一步中也也可以在程序代码的开始处加上#pragma comment(lib,"D:\\Program Files\\MySQL\\MySQL Server 5.6\\lib\\libmysql.lib") 来导入libmysql.lib)
4、如果使用的mysql是64位的,还需要将项目的解决方案平台由win32改成x64
5、将D:\Program Files\MySQL\MySQL Server 5.6\lib(根据具体路径而定)下的libmysql.dll复制到项目中去,和.cpp,.h文件位于同一路径下
实例代码:


1 #include <stdio.h>
2 #include <mysql.h> // 如果配置ok就可以直接包含这个文件
3 int main(void)
4 {
5 MYSQL mysql; //一个数据库结构体
6 MYSQL_RES* res; //一个结果集结构体
7 MYSQL_ROW row; //char** 二维数组,存放一条条记录
8
9 mysql_init(&mysql);//初始化数据库
10 //设置编码方式
11 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
12 //连接数据库
13 //判断如果连接失败就输出连接失败。
14 if (mysql_real_connect(&mysql, "localhost", "root", "123456", "mysql", 3306, NULL, 0) == NULL) //mysql是一个数据库
15 printf("连接失败!\\n");
16 //查询数据
17 mysql_query(&mysql, "select * from db"); //db是数据库下的一个表
18 //获取结果集
19 res = mysql_store_result(&mysql);
20
21 //给ROW赋值,判断ROW是否为空,不为空就打印数据。
22 while (row = mysql_fetch_row(res))
23 {
24 printf("%s ", row[0]);//打印ID 打印第一列
25 printf("%s ", row[1]);//打印姓名 打印第二列
26 printf("%s ", row[2]);// 打印第三列
27 printf("%s ", row[3]);
28 printf("%s ", row[4]);
29 printf("%s ", row[5]);
30 printf("%s \n", row[6]);
31 }
32 //释放结果集
33 mysql_free_result(res);
34 //关闭数据库
35 mysql_close(&mysql);
36 //停留等待
37 system("pause");
38 return 0;
39 }
Navicat中的信息:
C++通过mysql的c api连接mysql服务器,并对数据库中的内容进行增删修改操作
在上面操作的基础上,修改代码如下:


1 #include <stdio.h>
2 #include <WinSock.h> //一定要包含这个,或者winsock2.h
3 //#include "include/mysql.h" //引入mysql头文件(一种方式是在vc目录里面设置,一种是文件夹拷到工程目录,然后这样包含)
4 #include "mysql.h"
5 #include <Windows.h>
6
7 //包含附加依赖项,也可以在工程--属性里面设置
8 #pragma comment(lib,"wsock32.lib")
9 #pragma comment(lib,"libmysql.lib")
10 MYSQL mysql; //mysql连接
11 MYSQL_FIELD *fd; //字段行数组
12 char field[32][32]; //存字段名二维数组
13 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
14 MYSQL_ROW column; //一个行数据的类型安全(type-safe)的表示,表示数据行的列
15 char query[150]; //存放mysql查询语句
16
17 bool ConnectDatabase(); //函数声明
18 void FreeConnect();
19 bool QueryDatabase1(); //查询1
20 bool QueryDatabase2(); //查询2
21 bool InsertData();
22 bool ModifyData();
23 bool DeleteData();
24
25 int main(int argc, char **argv)
26 {
27 ConnectDatabase();
28 QueryDatabase1();
29 InsertData();
30 QueryDatabase2();
31 ModifyData();
32 QueryDatabase2();
33 DeleteData();
34 QueryDatabase2();
35 FreeConnect();
36 system("pause");
37 return 0;
38 }
39 //连接数据库
40 bool ConnectDatabase()
41 {
42 //初始化mysql
43 mysql_init(&mysql); //连接mysql,数据库
44
45 //返回false则连接失败,返回true则连接成功
46 if (!(mysql_real_connect(&mysql, "localhost", "root", "123456", "test", 0, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
47 {
48 printf("Error connecting to database:%s\n", mysql_error(&mysql));
49 return false;
50 }
51 else
52 {
53 printf("Connected...\n");
54 return true;
55 }
56 }
57 //释放资源
58 void FreeConnect()
59 {
60 //释放资源
61 mysql_free_result(res);
62 mysql_close(&mysql);
63 }
64 /***************************数据库操作***********************************/
65 //其实所有的数据库操作都是先写个sql语句,然后用mysql_query(&mysql,query)来完成,包括创建数据库或表,增删改查
66 //查询数据
67 //int sprintf(char* str,const char* format,...) 发送格式化输出到str所指向的字符串
68 bool QueryDatabase1()
69 {
70 sprintf(query, "select * from user"); //执行查询语句,这里是查询所有,user是表名,不用加引号,用strcpy也可以
71 mysql_query(&mysql, "set names gbk"); //设置编码格式(SET NAMES GBK也行),否则cmd下中文乱码
72 //返回0 查询成功,返回1查询失败
73 if (mysql_query(&mysql, query)) //执行SQL语句
74 {
75 printf("Query failed (%s)\n", mysql_error(&mysql));
76 return false;
77 }
78 else
79 {
80 printf("query success\n");
81 }
82 //获取结果集
83 if (!(res = mysql_store_result(&mysql))) //获得sql语句结束后返回的结果集
84 {
85 printf("Couldn''t get result from %s\n", mysql_error(&mysql));
86 return false;
87 }
88
89 //打印数据行数
90 printf("number of dataline returned: %lld\n", mysql_affected_rows(&mysql)); //此处原本是%d但是会报错,根据原因改成了%lld,lld表示长整形
91
92 //获取字段的信息
93 char *str_field[32]; //定义一个字符串数组存储字段信息
94 for (int i = 0; i < 4; i++) //在已知字段数量的情况下获取字段名
95 {
96 str_field[i] = mysql_fetch_field(res)->name;
97 }
98 for (int i = 0; i < 4; i++) //打印字段
99 printf("%10s\t", str_field[i]); //此处有个制表符\t
100 printf("\n");
101 //打印获取的数据
102 while (column = mysql_fetch_row(res)) //在已知字段数量情况下,获取并打印下一行
103 {
104 printf("%10s\t%10s\t%10s\t%10s\n", column[0], column[1], column[2], column[3]); //column是列数组 每一个数据后面都有一个制表符,cout是没有制表符的吧
105 }
106 return true;
107 }
108 bool QueryDatabase2()
109 {
110 mysql_query(&mysql, "set names gbk");
111 //返回0 查询成功,返回1查询失败
112 if (mysql_query(&mysql, "select * from user")) //执行SQL语句
113 {
114 printf("Query failed (%s)\n", mysql_error(&mysql));
115 return false;
116 }
117 else
118 {
119 printf("query success\n");
120 }
121 res = mysql_store_result(&mysql);
122 //打印数据行数
123 printf("number of dataline returned: %lld\n", mysql_affected_rows(&mysql));
124 for (int i = 0; fd = mysql_fetch_field(res); i++) //获取字段名
125 strcpy(field[i], fd->name);
126 int j = mysql_num_fields(res); // 获取列数
127 for (int i = 0; i < j; i++) //打印字段
128 printf("%10s\t", field[i]);
129 printf("\n");
130 while (column = mysql_fetch_row(res))
131 {
132 for (int i = 0; i < j; i++)
133 printf("%10s\t", column[i]);
134 printf("\n");
135 }
136 return true;
137 }
138 //插入数据
139 bool InsertData()
140 {
141 sprintf(query, "insert into user values (6, ''Lilei'', ''123'',''lilei23@sina.cn'');"); //可以想办法实现手动在控制台手动输入指令
142 if (mysql_query(&mysql, query)) //执行SQL语句
143 {
144 printf("Query failed (%s)\n", mysql_error(&mysql)); //可以检查输入的信息是否有错误,比如输入的类型和字段的类型是否匹配
145 return false;
146 }
147 else
148 {
149 printf("Insert success\n");
150 return true;
151 }
152 }
153 //修改数据
154 bool ModifyData()
155 {
156 sprintf(query, "update user set email=''lilei325@163.com'' where name=''Lilei''");
157 if (mysql_query(&mysql, query)) //执行SQL语句
158 {
159 printf("Query failed (%s)\n", mysql_error(&mysql));
160 return false;
161 }
162 else
163 {
164 printf("Modify success\n");
165 return true;
166 }
167 }
168 //删除数据
169 bool DeleteData()
170 {
171 /*sprintf(query, "delete from user where id=6");*/
172 char query[100];
173 printf("please input the sql:\n");
174 gets_s(query); //这里手动输入sql语句
175 if (mysql_query(&mysql, query)) //执行SQL语句
176 {
177 printf("Query failed (%s)\n", mysql_error(&mysql));
178 return false;
179 }
180 else
181 {
182 printf("Delete success\n");
183 return true;
184 }
185 }
执行结果:
参考博客:https://www.cnblogs.com/47088845/p/5706496.html#top
centos – SQLSTATE [HY000] [2003]无法连接到’127.0.0.1′(13)上的MySQL服务器但是’localhost’工作
当您尝试连接到地址127.0.0.1的MySQL时,Cent os Apache PHP PHP来自PHP,发生错误.如果将127.0.0.1行替换为localhost,一切都可以正常工作.浏览器中PHP的唯一问题.如果控制台执行
PHP -r "var_dump (MysqLi_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"
没有错误.另外,如果控制台进入
MysqL -u user -h 127.0.0.1 -p db_name
要么
MysqL -u user -h localhost -p db_name
一切顺利.可能是什么问题呢?
软件版本
> PHP-5.6.26
> MysqL-5.5.53
> Apache 2.2.15
最后,
$host localhost
localhost has address 127.0.0.1
PHP代码工作:
$dsn = 'MysqL:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection Failed: ' . $e->getMessage();
}
PHP代码不工作:
$dsn = 'MysqL:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection Failed: ' . $e->getMessage();
}
sqlSTATE [HY000] [2003]无法连接到’127.0.0.1’上的MysqL服务器(13)
PHP代码工作:
$link = MysqLi_connect("localhost", "my_user", "my_password", "my_db");
PHP代码不工作:
$link = MysqLi_connect("127.0.0.1", "my_user", "my_password", "my_db");
解:
setsebool httpd_can_network_connect_db on
解决方法:
根据this (unaccepted) answer over on StackOverflow,原因是MysqL将localhost解释为127.0.0.1.这是confirmed in the documentation,请看段落开头,“在Unix上,MysqL程序专门处理主机名localhost”.
> 127.0.0.1是显式IPv4地址,因此客户端尝试通过TCP / IP进行连接
> localhost是使用本地主机的隐式提示,MysqL尽可能通过本地套接字而不是通过TCP / IP实现
由于您的localhost连接有效但127.0.0.1连接不起作用,因此其中一个问题似乎可能是罪魁祸首:
>您的数据库权限拒绝来自127.0.0.1的连接
>您有防火墙规则阻止TCP / IP上的所有入站数据库连接尝试
>您已更改MysqL的绑定配置条目,以便它不会绑定到环回地址
鉴于错误代码13(权限被拒绝),我会在其他两个之前调查其中的第一个.
CentOS下php使用127.0.0.1不能连接mysql的解决方法
php代码很简单: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,"mysql","mysql"); if (!$link) { die(''Could not connect: '' . mysql_error().mysql_errno()); } linux本机下使用php mysql.php 可以查看运行结果,但是 在我的wind
php代码很简单:
$server="127.0.0.1";
println("Begin");
$link = mysql_connect($server,"mysql","mysql");
if (!$link) {
die(''Could not connect: '' . mysql_error().mysql_errno());
}
linux本机下使用php mysql.php 可以查看运行结果,但是 在我的windows浏览器下报错:
Could not connect: Can''t connect to MySQL server on ''127.0.0.1'' (13) 2003
原因:
#getsebool -a | grep httpd
[neo@neo phpMyTest]$ getsebool -a | grep httpd
发现 httpd_can_network_connect --> off
解决方案:
#setsebool httpd_can_network_connect 1
原来是 SELINUX,所以我一般直接关闭SELINUX和 iptables ip6tables
# 关闭SELINUX
chkconfig --level 12345 iptables off
chkconfig --level 12345 ip6tables off
service iptables stop
service ip6tables stop
立即学习“PHP免费学习笔记(深入)”;
查看SELinux状态:
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
linux – 无法连接到PostgreSQL服务器:无法连接到服务器:权限被拒绝
警告:pg_connect():无法连接到Postgresql服务器:无法连接到服务器:权限被拒绝服务器是否在主机“10.0.1.201”上运行并接受端口5432上的TCP / IP连接?
这是我尝试从基于Linux的服务器连接到远程数据库时遇到的错误
虽然我能够从localhost连接到它
任何人都可以帮助我
服务httpd停止
服务postgresql停止
setsebool -P httpd_can_network_connect 1
服务httpd启动
服务postgresql启动
关于主机模式下使用127.0.0.1:3306无法连接mysql服务器和无法连接使用主机名的服务器的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于C++操作mysql__通过mysql的c api连接mysql服务器、centos – SQLSTATE [HY000] [2003]无法连接到’127.0.0.1′(13)上的MySQL服务器但是’localhost’工作、CentOS下php使用127.0.0.1不能连接mysql的解决方法、linux – 无法连接到PostgreSQL服务器:无法连接到服务器:权限被拒绝等相关内容,可以在本站寻找。
本文标签: