文章851
标签121
分类10

MySQL server has gone away

"MySQL server has gone away"错误通常表示应用程序与MySQL服务器之间的连接已断开。这可能由于以下原因导致:

  1. 连接超时:如果应用程序在一段时间内没有与MySQL服务器进行通信,服务器可能会主动关闭连接。这通常是为了释放资源或防止空闲连接占用服务器资源。可以通过增加连接超时时间来解决此问题。
  2. 数据处理时间过长:如果应用程序在与MySQL服务器进行交互期间执行了大量的数据处理或查询操作,服务器可能会认为连接已超时,并关闭连接。这可以通过优化查询、增加服务器的处理能力或分批处理数据来解决。
  3. 连接过多:如果应用程序同时打开了大量的连接,并且服务器的最大连接数限制被达到或超过,服务器可能会关闭某些连接。可以通过增加服务器的最大连接数或优化连接池管理来解决此问题。
  4. 服务器配置问题:某些服务器配置选项可能会导致连接意外关闭,例如max_allowed_packet参数设置过小,无法处理大型数据包。检查服务器的配置文件并根据需要进行调整。
  5. 网络问题:网络中断、不稳定或丢包等问题可能导致连接断开。确保网络连接稳定,并排除网络问题。

解决该问题的方法可能因具体情况而异。建议检查MySQL服务器和应用程序的配置,并查看相关日志以获取更多详细信息。如有需要,可以尝试调整服务器和应用程序的设置,以提高连接的稳定性和可靠性。如果问题持续存在,建议联系数据库管理员或MySQL技术支持进行进一步的故障排除和支持。

netcat 快速跨机器传输文件

以前两台机器间传输文件一般都是用scp 但是scp 需要先在两台机器间建立信任才可以.
今天发现 netcat 这神器真实牛逼的不要不要的!
具体操作如下

接收者: $ nc -l -p 12345 > save_filename ; 12345为1024-65535的任意端口号

发送者: $ nc 接收者ip 12345 < send_file

实际操作中 : 先检测接受者机器端口是否被占用:

netstat -anp |grep 12345

ok 使用nc 监听本机 12345端口

小文件基本秒传. 传过去后 接受者自动断开监听.

netcat 还有更多用法需要去学习下;

上面说的传输方式非常不安全. 因为任何人知道你的端口后都可以注入; 这种方法还是少用比较好

LDAP 查询基本知识

LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录服务的开放标准协议。它最初是为在网络上访问和管理目录信息而设计的。

目录是一种层次结构的数据库,用于存储和组织各种类型的信息,如用户、组织、设备等。LDAP提供了一种标准的方式来搜索、读取、修改和维护这些目录数据。

LDAP的设计目标是简单、高效和可伸缩。它使用客户端-服务器模型,其中客户端发出请求并与LDAP服务器进行通信,而服务器则处理请求并返回相应的结果。

LDAP协议基于TCP/IP协议栈,并使用基于字符串的协议元素进行通信。它使用特定的端口(默认是389端口)来监听客户端请求。

LDAP协议支持各种操作,包括:

  • 绑定(Bind):建立客户端与服务器之间的身份验证和安全关系。
  • 搜索(Search):根据特定的搜索条件在目录中查找匹配的条目。
  • 添加(Add):向目录中添加新的条目。
  • 修改(Modify):修改现有目录条目的属性值。
  • 删除(Delete):从目录中删除现有条目。
  • 比较(Compare):比较给定条目的属性值是否与指定值匹配。

LDAP广泛用于企业网络中的身份认证、用户管理、权限控制等方面。它也被许多应用程序和服务(如电子邮件、文件共享和VPN)用作集中式的用户和权限管理系统。

需要注意的是,LDAP是一种协议而不是特定的实现。常见的LDAP服务器实现包括OpenLDAP、Microsoft Active Directory和Novell eDirectory等。

总之,LDAP是一种用于访问和管理分布式目录服务的协议,它提供了一种标准的方式来搜索、读取、修改和维护目录中的信息。

本文讨论了轻量级目录访问协议 (LDAP) 查询,它在排查 Microsoft Exchange Server 及它与其目录之间关系的故障时十分有用,但是它也经常令人困惑不解。本文介绍了有关 LDAP 查询的基本信息。

基本 LDAP 语法

何时使用 LDAP 查询?

  • 使用“Active Directory 用户和计算机”执行搜索
  • 使用 LDP 执行搜索
  • 使用 LDIFDE 执行搜索
  • 在 ADModify 中使用 LDAP 查询

基本 LDAP 语法

  • =(等于)
    此 LDAP 参数表明某个属性等于某个值的条件得到满足。例如,如果希望查找“名“属性为“John”的所有对象,可以使用:
    (givenName=John)
    这会返回“名”属性为“John”的所有对象。圆括号是必需的,以便强调 LDAP 语句的开始和结束。
  • &(逻辑与)
    如果具有多个条件并且希望全部条件都得到满足,则可使用此语法。例如,如果希望查找居住在 Dallas 并且“名”为“John”的所有人员,可以使用:
    (&(givenName=John)(l=Dallas))
    请注意,每个参数都被属于其自己的圆括号括起来。整个 LDAP 语句必须包括在一对主圆括号中。操作符 & 表明,只有每个参数都为真,才会将此筛选条件应用到要查询的对象。
  • !(逻辑非)
    此操作符用来排除具有特定属性的对象。假定您需要查找“名”为“John”的对象以外的所有对象。则应使用如下语句:
    (!givenName=John)
    此语句将查找“名”不为“John”的所有对象。请注意:! 操作符紧邻参数的前面,并且位于参数的圆括号内。由于本语句只有一个参数,因此使用圆括号将其括起以示说明。
  • *(通配符)
    可使用通配符表示值可以等于任何值。使用它的情况可能是:您希望查找具有职务头衔的所有对象。为此,可以使用:
    (title=*)
    这会返回“title”属性包含内容的所有对象。另一个例子是:您知道某个对象的“名”属性的开头两个字母是“Jo”。那么,可以使用如下语法进行查找:
    (givenName=Jo*)
    这会返回“名”以“Jo”开头的所有对象。

以下是 LDAP 语法的高级使用示例:

  • 您需要一个筛选条件,用来查找居住在 Dallas 或 Austin,并且名为“John”的所有对象。使用的语法应当是:
    (&(givenName=John)(|(l=Dallas)(l=Austin)))
  • 您发现应用程序日志中有 9,548 个事件,因此需要查找导致这些日志事件的所有对象。在此情况下,您需要查找所有被禁用的用户 (msExchUserAccountControl=2),这些用户的 msExchMasterAccountSID 没有值。使用的语法应当是:
    (&(msExchUserAccountControl=2)(!msExchMasterAccountSID=*))

注意:

! 操作符与通配符的结合使用可查找属性未设置为任何值的对象。

PHP 中 `default_socket_timeout`

default_socket_timeout 是 PHP 中的一个配置选项,用于设置 socket 连接的默认超时时间(以秒为单位)。在进行网络请求(如通过 fsockopenstream_socket_client 或其他网络函数)时,超时时间决定了在等待响应时的最大时间限制。

1. 配置方法

default_socket_timeout 可以在 php.ini 文件中进行配置,也可以在运行时通过 ini_set 函数进行设置。

1.1 在 php.ini 中设置

打开您的 php.ini 文件,找到以下行并修改其值:

; Default timeout for socket based streams (seconds)
default_socket_timeout = 60

60 修改为您希望的超时时间(单位为秒)。

1.2 在代码中设置

如果您希望在运行时动态修改超时时间,可以使用 ini_set 函数:

ini_set('default_socket_timeout', 30); // 设置为 30 秒

2. 如何使用

当您进行网络请求时,如果服务器在设置的超时时间内没有响应,PHP 将抛出一个警告,并且相关的网络调用将失败。例如:

$fp = @fsockopen('example.com', 80, $errno, $errstr, 30);

if (!$fp) {
    echo "Error: $errstr ($errno)";
} else {
    // 进行数据传输
    fclose($fp);
}

在这个示例中,如果连接 example.com 的请求在 30 秒内没有成功,PHP 将输出错误信息。

3. 注意事项

  • 全局影响default_socket_timeout 的设置会影响所有使用 socket 进行网络请求的函数。
  • 长时间请求:如果您的应用需要进行长时间的请求(例如文件上传或大数据处理),考虑适当增加超时时间。
  • 异步请求:如果使用异步请求(如 cURL 的异步模式),请注意单独设置超时参数。

4. 示例

以下是一个使用 default_socket_timeout 的完整示例:

// 设置默认 socket 超时时间为 10 秒
ini_set('default_socket_timeout', 10);

// 尝试连接
$fp = @fsockopen('example.com', 80, $errno, $errstr, 10);

if (!$fp) {
    echo "Error: $errstr ($errno)";
} else {
    fwrite($fp, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: Close\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

GIT 导出项目中文件更改列表

在使用 Git 进行版本控制时,了解项目中的文件更改是非常重要的。无论您是开发者、项目经理还是测试人员,获取文件更改列表可以帮助您快速了解代码的变动情况。本文将介绍如何使用 Git 导出项目中的文件更改列表。

1. 什么是文件更改列表?

文件更改列表指的是在某个提交(commit)或一系列提交之间所做的所有文件的修改记录。这些记录包括新增、修改和删除的文件。通过文件更改列表,您可以清晰地了解项目的演变过程。

2. 使用 Git 命令查看更改

2.1 查看当前工作区的更改

如果您只想查看当前工作区的更改,可以使用以下命令:

git status

这将显示所有未提交的修改、未跟踪的文件和已暂存的更改。

2.2 查看最近的提交更改

要查看最近一次提交的更改,可以使用:

git show --name-only

这将显示最近一次提交的详细信息,包括提交信息和更改的文件列表。

2.3 查看特定提交的更改

要查看特定提交的文件更改,可以使用提交哈希:

git show <commit-hash> --name-only

<commit-hash> 替换为实际的提交哈希。

3. 导出文件更改列表

3.1 导出到文本文件

如果您希望将文件更改列表导出到文本文件中,可以使用以下命令:

git diff --name-only <commit1> <commit2> > changes.txt
  • <commit1><commit2> 是您想要比较的两个提交的哈希值。
  • changes.txt 是将要保存更改列表的文件名。

例如,要比较最近的两次提交,可以使用:

git diff --name-only HEAD~1 HEAD > changes.txt

3.2 导出最近 N 次提交的更改

如果想导出最近 N 次提交的文件更改列表,可以使用 git log 命令结合管道:

git log -n N --name-only --pretty=format: > changes.txt

N 替换为您想要的提交次数。这条命令将只输出文件名,不包括提交信息。

3.3 导出所有提交的更改

要导出整个项目历史中的文件更改列表,可以使用:

git log --name-only --pretty=format: > all_changes.txt

这将导出项目中所有提交的文件更改,保存在 all_changes.txt 中。

4. 总结

通过 Git,您可以轻松地查看和导出项目中的文件更改列表。无论是查看最近的更改,还是导出特定提交之间的变化,Git 都提供了丰富的命令和选项来满足需求。希望本文能帮助您更好地管理和理解项目中的文件变动。

">