MySQL server has gone away
"MySQL server has gone away"错误通常表示应用程序与MySQL服务器之间的连接已断开。这可能由于以下原因导致:
- 连接超时:如果应用程序在一段时间内没有与MySQL服务器进行通信,服务器可能会主动关闭连接。这通常是为了释放资源或防止空闲连接占用服务器资源。可以通过增加连接超时时间来解决此问题。
- 数据处理时间过长:如果应用程序在与MySQL服务器进行交互期间执行了大量的数据处理或查询操作,服务器可能会认为连接已超时,并关闭连接。这可以通过优化查询、增加服务器的处理能力或分批处理数据来解决。
- 连接过多:如果应用程序同时打开了大量的连接,并且服务器的最大连接数限制被达到或超过,服务器可能会关闭某些连接。可以通过增加服务器的最大连接数或优化连接池管理来解决此问题。
- 服务器配置问题:某些服务器配置选项可能会导致连接意外关闭,例如
max_allowed_packet参数设置过小,无法处理大型数据包。检查服务器的配置文件并根据需要进行调整。 - 网络问题:网络中断、不稳定或丢包等问题可能导致连接断开。确保网络连接稳定,并排除网络问题。
解决该问题的方法可能因具体情况而异。建议检查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 连接的默认超时时间(以秒为单位)。在进行网络请求(如通过 fsockopen、stream_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 都提供了丰富的命令和选项来满足需求。希望本文能帮助您更好地管理和理解项目中的文件变动。