您的当前位置:首页正文

mysql错误:Can’t create TCP/IP socket (10106)

2023-11-08 来源:画鸵萌宠网

mysql错误:Can’t create TCP/IP socket (10106)

标签:mysql   tomcat   socket   

小编还为您整理了以下内容,可能对您也有帮助:

Can't create TCP/IP socket 这是怎么个情况

问题分析:

MySQL 无法建立 TCP/IP socket

解决办法:

1、编辑 mysql.ini,在 [mysqld] 下面的区域加 enable-named-pipe;

2、检查系统的临时目录或者 MySQL 临时目录的权限;

3、在以上方法无效的情况下,建议重新安装另外版本的 MySQL。

MYSQL建立外键失败几种情况记录Can''tcreatetable不能创建表

当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。

像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。

在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序,已知的原因:

1、 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配,更多关于signed 和 unsigned 的信息,请参阅:

2、 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的,你必须为它创建一个索引。

3、外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

4、 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型

5、 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug.

6、 请确定你的Charset 和 Collate 选项在表级和字段级上的一致

7、 你可能设置为外键设置了一个默认值,如 default=0

8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己的索引,这时,你必须为它创建一个的索引。

9、 ALTER 声明中有语法错误

最后:建立外键有点麻烦,可以直接用Myeclipse生成ddl。。

求助啊、、、mysql导出文本文件出错了 error 1 (hy000): Can't creat

出现该问题的原因一般都是向没有权限的文件或是目录写东西,然后报错个人总结

解决方法如下 以select .... into file

为例

<1> select ..... into outfile '/tmp/target.txt'

<2>使用数据库目录

select ..... into outfile

'/var/lib/mysql/target.txt'

root:@localhost[mytest]>select * from me into

outfile '/var/lib/mysql/target.txt' ;

Query OK, 3 rows affected (0.00

sec)

<3> 使用默认目录

root:@localhost[mytest]>select * from me into

outfile 'target.txt';

Query OK, 3 rows affected (0.00 sec)

<4>

我们给出我们的分析思路:

首先我们以用户ububu login :

目录的权限是:

ubutu@ubutu-desktop:~$ mkdir

test

ubutu@ubutu-desktop:~$ ls -lai test

总计 8

16423 drwxr-xr-x 2

ubutu ubutu 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu ubutu 4096

2010-03-24 19:59 ..

login mysql

(注意杂mysql中我们是以root用户登录的)

root:@localhost[mytest]>select * from me into

outfile '/home/ubutu/test/a.txt';

ERROR 1 (HY000): Can't create/write to file

'/home/ubutu/test/a.txt' (Errcode:

13)

报错:

我们修改目录的权限:

oot@ubutu-desktop:/home/ubutu# chown -R mysql:mysql

test/

root@ubutu-desktop:/home/ubutu# ls -lai test

总计 8

16423

drwxr-xr-x 2 mysql mysql 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu

ubutu 4096 2010-03-24 19:59

..

在继续执行:错误依旧:

我们继续修改:

root@ubutu-desktop:/home/ubutu# chmod a+wx

test/

root@ubutu-desktop:/home/ubutu# ls -lai test

总计 8

16423

drwxrwxrwx 2 mysql mysql 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu

ubutu 4096 2010-03-24 19:59

..

错误仍在继续:

接着我们尝试用操作系统帐户登录:

root@ubutu-desktop:~# mysql

root:@localhost[mytest]>select * from me into outfile

'/home/ubutu/test/a.txt'

-> ;

ERROR 1 (HY000): Can't create/write to

file '/home/ubutu/test/a.txt' (Errcode:

13)

仍是同样的错误,无语了。为了查找错误的原因,我们从上面成功的例子我们看看那文件的权限:

root@ubutu-desktop:/var/lib/mysql#

ls -lai target.txt

2510 -rw-rw-rw- 1 root root 6 2010-03-24 20:07

target.txt(<1><2><3>使用操作系统的一般用户登录,但是mysql的root用户操作得到的结果)

我们看到文件的拳限是:root

,可是面我们使用chmod a+wx 仍然不行,问题处在那呢?难道是selinux ?

然后我们在/etc/apparmor

里面发现了这个:

capability setuid,

network tcp,

/etc/hosts.allow

r,

/etc/hosts.deny r,

/etc/mysql/*.pem r,

/etc/mysql/conf.d/

r,

/etc/mysql/conf.d/* r,

/etc/mysql/my.cnf r,

/usr/sbin/mysqld

mr,

/usr/share/mysql/** r,

/var/log/mysql.log rw,

/var/log/mysql.err

rw,

/var/lib/mysql/ r,

/var/lib/mysql/** rwk,

/var/log/mysql/

r,

/var/log/mysql/* rw,

/var/run/mysqld/mysqld.pid

w,

/var/run/mysqld/mysqld.sock w,

网上一搜,发现:

AppArmor attempts to

protect processes on the server or desktop from security threats. AppArmor

enforces limits on what processes can access on the system. It attempts to

restrict processes to those resources that the process requires to function

only. AppArmor will not only define the system resources a program can access ,

it will also determine the privileges with which it can access those resources.

To protect applications you will need to set up a security profile for each

application that you want to protect.

AppArmor has it's history connected to

the Linux Security Moles and the SELinux project that was developed by the

National Security Agency. Both SELinux and AppArmor use these moles developed

with security in mind.

ubuntu :

Default enforcement

By default in a

new installation of the following services is done with AppArmor profiles

enforced:

* cups

* bind

* mysql

* slapd (Open

LDAP)

修改后的:

# vim:syntax=apparmor

# Last Modified: Tue Jun 19 17:37:30

2007

#include <tunables/global>

/usr/sbin/mysqld {

#include

<abstractions/base>

#include

<abstractions/nameservice>

#include

<abstractions/user-tmp>

#include <abstractions/mysql>

#include

<abstractions/winbind>

capability dac_override,

capability

sys_resource,

capability setgid,

capability setuid,

network

tcp,

/etc/hosts.allow r,

/etc/hosts.deny r,

/etc/mysql/*.pem

r,

/etc/mysql/conf.d/ r,

/etc/mysql/conf.d/* r,

/etc/mysql/my.cnf

r,

/usr/sbin/mysqld mr,

/usr/share/mysql/** r,

/var/log/mysql.log

rw,

/var/log/mysql.err rw,

/var/lib/mysql/ r,

/var/lib/mysql/**

rwk,

/var/ r,

/var/**

rwk,

/var/log/mysql/ r,

/var/log/mysql/*

rw,

/var/run/mysqld/mysqld.pid w,

/var/run/mysqld/mysqld.sock

w,

}

然后执行命令:

root:@localhost[mytest]>select * from me into outfile

'/var/data/target.txt';

Query OK, 3 rows affected (0.00

sec)解决,该情况同样使用于你想将现在的数据目录执行更换,而出现的权限问题,即

自定义数据目录。

写的有点乱,边实验边总结哈追问其实之前我已经解决了,我就是使用数据库目录的,mysql数据库导出数据时是以mysql用户向目录里写数据的,所以使用数据库目录就成导出成功了、、、你研究的很深入啊!!!

追答出问题了,没办法,都是被的,相信你能解决肯定也研究的很深入的。 哈哈哈

MySQL8远程连接不上的原因

执行 ./bin/mysqld --defaults-file=xxx --initialize-insecure 初始化data目录

./bin/mysqld_safe --defaults-file=/home/xxx/mysql/my.cnf &

运行后netstat -anlp | grep mysql 发现mysqld进程使用的是unix domain socket,没使用tcp/tcp6,没监听端口,看配置文件里面有一行 --skip-grant-tables,看官方文档,如果开启了--skip-grant-tables默认启用--skip-networking,这样就不允许远程连接了,因为--skip-grant-tables不安全。

https://www.oreilly.com/library/view/mysql-8-cookbook/9781788395809/6ea03335-6ff2-4d4f-a008-48c8cf88fd01.xhtml#:~:text=In%20this%20method%2C%20you%20stop,to%20connect%20to%20the%20server .

./bin/mysqladmin shutdown

Top