WinSCP UltraEdit Unix DOS Format

editor_transfer

用 WinSCP + UltraEdit,可以直接修改服务器上的文件,保存时自动上传到服务器上,用起来很方便。

最近发现个情况,服务器上的文件不管是 DOS 还是 Unix 格式,用 UltraEdit 打开总是显示 DOS 格式,保存后,却都变成了 Unix 格式!

反复检查了 UltraEdit 的设置选项,都没问题,编辑本机文件都是正常的。

后来开始怀疑 WinSCP。

费了好半天劲,终于找到原因,在 Editor 选项中可以设置外部编辑器,然后设置编辑器选项,如顶图所示红框的位置。

意思是,用编辑器传文件强制使用文本方式传输,这就是导致问题的关键点。

把这个选项去掉,打开文件格式可以正确识别,保存后格式也不会全部转换成 Unix 了。

记录 & 分享。

Tags: , ,

KB927917 IE 报错 解决方法

在 body 标签内调用 append 方式给 body 增加一个节点,如果此时 body 未加载完,也就是 body 标签还未关闭,IE 将报错:KB927917。

页面错误提示:Unable to modify the parent container element before the child element is closed.

查了下资料,知道了问题的产生原因:

首先是微软的详细解释:http://support.microsoft.com/kb/927917

最后发现其实微软的MSDN上早已列举了解决办法:
http://blogs.msdn.com/ie/archive/2008/04/23/what-happened-to-operation-aborted.aspx

官方给出的解决办法如下:

  1. Moving your script execution to a function that is invoked after parsing is complete (e.g., onload)
  2. Adding the defer boolean attribute to the script block (this defers execution of the script content until parsing is complete)
  3. Limiting your tree modifications to the script-element’s immediate parent
  4. Moving the location of your script block to a child of the body (this usually solves most problems, while allowing the most flexibility in terms of scenarios).

Tags: ,

mysql 持久连接 mysql_connect mysql_pconnect

在某些场合,mysql_pconnect( ) 是不适用的。

——————————————————————————–

状况一:

使用 1 部 web server 与 1 部 MySQL server(两者可能同在一部主机上),而 web server 固定只对 MySQL server 上的某一个数据库进行存取动作。

因为每次存取数据库时,都是由 web 那边使用同一账号对 MySQL 上的同一数据库作业,若我们将 MySQL 与 web server 的「同时联机数」都调整为 200,就好像 MySQL 这边一直有 200 位「服务生」,随时等着接待来自 web 的 200 位「顾客」似的。而且「顾客」离开之后,「服务生」也不下场休息,时时都站在门口等着接待下一个「顾客」。

在这种情况下,您只要注意将 MySQL 的「同时联机数」调得比 web server 的高或相等,就会发现使用 mysql_pconnect( ) 是个不错的选择。
——————————————————————————–

状况二:

使用 1 部 web server 与 1 部 MySQL server(两者可能同在一部主机上),而 web server 会对 MySQL server 上的两个数据库进行存取动作。

从 web server 那边提出数据存取需求时,有时是针对第 1 个数据库(DB1),有时则是针对第 2 个数据库(DB2)。若我们也将 MySQL 与 web server 的「同时联机数」都调整为 200,这样一来,就好像 MySQL 这边有 200 位「服务生」,但同时经营两个「吧台」(DB1 与 DB2),而「顾客」可能多达 200 位。

一开始,DB1 这个「吧台」比较热门,MySQL 派了 150 位「服务生」上场接待;同样地,当「顾客」离开之后,这 150 位「服务生」仍守着 DB1 而不下场休息。后来,DB2 那边也热闹起来了,「顾客」越来越多,MySQL 得加派「服务生」上场,有几个能派?答案是 50 个!

为什么「服务生」的人力调配会捉襟见肘?那是因为 web 那边使用了 mysql_pconnect( ) 来建立联机。「服务生」一开始被指定到哪个「吧台」工作,就会持续在那边停留,绝不「转台」。
——————————————————————————–

请注意,当使用持续性的联机时,每个已建立的联机只为来自同一部 web server、使用同一组账号,且存取同一数据库的使用者服务。

如此一来,假设每部 web server 的「同时联机数」都是 200,而且同时使用 2 部 web server 会怎么样呢?从 web1 来了 50 个「顾客」,先是到 DB1 走一趟,接着再到 DB2 晃一圈,这样需要多少「服务生」接待他们?100 个(web1->DB1: 50 web1->DB2: 50)!又从 web2 来了 50 个「顾客」,也做了同样的动作(web2->DB1: 50 web2->DB2: 50)。在此之后,还有「服务生」是闲着的吗?后续若从 web1 或 web2 同时涌入多于 50 位「顾客」时,谁来应付他们?

倘若您使用的是像 Apache 这类的 multi-process web server(一个 parent process 协调一组 children processes 运作),某个 children process 建立的「持续联机」,是不能分享给其它 children process 来使用的(「服务生」只对先前接待过的「顾客」服务)。在这样的情况下,将会使得 MySQL 上闲置的 process 越积越多(很多「服务生」站在门口等着「老顾客」上门,而不理会「新顾客」)。
mysql_pconnect( ) 一定是最佳选择吗?我想未必尽然。
——– 两者之间的区别 ————–
mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别。
首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接

标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由

mysql_pconnect() 建立的连接)。
可选参数 client_flags 自 PHP 4.3.0 版起可用。
此种连接称为”持久的”。
看到这里,写一条代码来测试一下

/*
* pconnect_test.php
*/

$link = mysql_pconnect(localhost, mysql_user, mysql_password)
or die(Could not connect: . mysql_error());
print (Connected successfully);

通过刷新网页的方式执行这条代码,发现每执行一次,mysql的进程数就增加一个。在这里我不禁有了疑问。上面说mysql_pconnect这个函

数的使用的时候,不是说”当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到

,则返回此标识而不打开新连接”么?为什么我每刷新一次页面他就给我打开一个新的连接呢?

考虑到这有可能是PHP的bug,我到PHP的bug列表中找关于和too many connections 有关的条目。
相关的话题主要有三个,分别是

#11966        mysql_pconnect opens new connections with the same parameters
#26117        Persistent connection not reused
#13589        Persistent connections stay open and accumulate

描述比较长,我就不在这里贴,具体的内容你自己去看。重点主要是”当一个进程打开一个mysql的持续连接,只要该进程还存在,这个持续

的连接就不会断开,而且每一个进程会打开一个mysql的持续连接,而不能使用其他进程打开的持续连接”。

Tags:

MySQL IN 条件语句 排序

有个场景,一个几万条记录的表,主键是 id,我想从表中取 id 为 30,20,80,40 的几条记录。

注意,30,20,80,40,是我预期的顺序,我希望 MySQL 按这样的顺序返回记录。

于是我这样写 SQL:

SELECT * FROM my_table WHERE id IN (30, 20, 80, 40);

结果是,他没有按我给的顺序返回。

怎么办?

查到了 FIELD() 函数。

FIELD(str,str1,str2,str3,…)
Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.

把 SQL 语句改写为:

SELECT * FROM my_table WHERE id IN (30, 20, 80, 40) ORDER BY FIELD(id, 30, 20, 80, 40);

排序过程是:

把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。

这样的用法,会导致 Using filesort,是效率很低的排序方式。除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序。

把 MySQL 返回的结果,用 PHP 在内存中按 id 顺序重新排列,是个不错的优化方案。

Tags:

sudo: sorry, you must have a tty to run sudo

I was recently working on a Perl script that would SSH to another server and run a sudo command on the remote server that was failing. The error that was received is below.

Error: sudo: sorry, you must have a tty to run sudo

The reason for this is an update along the way with sudo locked it down further by adding the below line to /etc/sudoers configuration file.

Defaults requiretty

To allow a remote script to login and run a command via sudo simply comment out that line as shown below.

# Commented out so remote script can login and run a command without a tty
# Defaults requiretty

I would suggest making a comment in the sudoers file along with the actual script that is running just in case there is another systems administrator that is tasked with working on this server at a later date. Now when your script runs it will not throw that error and should be able to run the remote command that was initially required.

Tags:

MySQL 索引优化

表中包含 10 万条记录,有一个 datetime 类型的字段。

取数据的语句:

SELECT * FROM my_table WHERE created_at < '2010-01-20';

用 EXPLAIN 检查,发现 type 是 ALL, key 是 NULL,根本没用上索引。

可以确定的是,created_at 字段设定索引了。

什么原因呢?

用 SELECT COUNT(*) 看了一下符合 WHERE 条件的记录总数,居然是 6W 多条!!

难怪不用索引,这时用索引毫无意义,就好像 10 万条记录的用户表,有个性别字段,不是男就是女,在这种字段设置索引是错误的决定。

稍微改造一下上述语句:

SELECT * FROM my_table WHERE created_at BETWEEN '2009-12-06' AND '2010-01-20';

这回问题解决!

符合条件的记录只有几百条,EXPLAIN 的 type 是 range,key 是 created_at,Extra 是 Using where 。

自己总结个准则,索引的目的就是尽量缩小结果集,这样才能做到快速查询。

Tags:

送别谷歌 Say Goodbye to Google

—————————————————————-

腾讯常州市网友 ミ王先生 .﹎ 1小时前
北京时间3月23日凌晨3时零3分,谷歌公司高级副总裁、首席法律官大卫德拉蒙德公开发表声明,再次借黑客攻击问题指责中国,宣布停止对谷歌中国搜索服务的“过滤审查”,并将搜索服务由中国内地转至香港。

—–走了还不忘说中国点毛病啊。。!这帮玩意。。.不是个东西

我只用百度。。

—————————————————————-

腾讯铁岭市网友 青青雨竹 1小时前
终于走了,以后电脑不用自动跳谷歌了

—————————————————————-

腾讯嘉峪关市网友 小磨猪(空) 1小时前
我一直用的百度,走就走吧,强扭的瓜不甜啊!

—————————————————————-

腾讯泸州市网友 我想死/huaix 1小时前
我用电脑很多年了!从来都拒绝很多流氓软件安装谷歌!我也从来就没用过谷歌!不知道有啥了不起!我需要的东西在其他网上也能找到!谷歌~请你离开中国吧!

—————————————————————-

腾讯北京市网友 天箭一号 1小时前
象这样和美国情报局一体的公司早一天退,中国多一份平安,愿所有这样的公司全部退出。

—————————————————————-

腾讯西安市网友 我是谁谁是我 1小时前
不遵守中国法律,商业政治化就让它滚出中国!

—————————————————————-

腾讯杭州市网友 小河流水 1小时前
就“狗歌”公司退出中国,对我一般不使用其业务的来说,起不到一点影响,欢迎“狗哥”公司退出,谢谢“狗歌”公司

—————————————————————-

腾讯株洲市网友 雪花飞舞 1小时前
我从不用谷歌,但我照样能搜索想要的东西

—————————————————————-

腾讯保定市网友 小哥 1小时前
他早就该走 香港也不应该要他

—————————————————————-

腾讯铁岭市网友 Z宁共和国 1小时前
我一直用百度! 我们自己国家的!
垃圾!     在中国别那么嚣张

—————————————————————-

腾讯北京市网友 婲花☆厷孒 1小时前
中国还差一个谷歌吗,笑话!!!!!!!!!!!!!!

—————————————————————-

腾讯临沂市网友 郑雯茜 1小时前
走就走吧 谁稀罕,我一直百度,比什么都好。基本上没用过谷歌 是个什么鸟东西,只有他自己拿自己当回事,支持中国支持百度支持政府 支持自己的选择!

—————————————————————-

腾讯湘潭市网友 四年夏天 1小时前
百度是世界上最好的引擎,是全国人民都支持百度,是中国人就顶起来~

—————————————————————-

腾讯大连市网友 寒床 1小时前
都用百度的,看看大家还是支持百度啊,应该是谷歌根本就没什么用才退出的!!!

—————————————————————-

腾讯河南省网友 逆水使者 1小时前
什么垃圾玩意啊,用百度不好啊。是中国人就支持百度吧,希望那天谷歌还被人黑!

—————————————————————-

腾讯白城市网友 天晴の夫君 1小时前
谷歌?听过,但没用过。谷歌滚蛋更好,中国还有百度,支持国货!支持百度!希望中国的搜索网站越来越好!越来越强大!但不能交尿(骄傲)啊!
让外国的东西都滚蛋把!

—————————————————————-

腾讯菏泽市网友 欣雨梦 1小时前
简直是笑话,什么高级的网站,还值得政府派黑客去攻击,既然让你来大陆经营,就说明了中国政府的诚意,何来攻击一说?肯定是谷歌公司自己违背了中国政府和人民的意愿,自己理亏,才无奈搬家的,

—————————————————————-

腾讯徐州市网友 诚实 1小时前
有谷歌这个东东吗?我怎么都没有听说过,抵制谷歌、支持百度!!!

—————————————————————-

腾讯德州市网友 為你存在 1小时前
谷歌走了还有百度 soso 支持国产

—————————————————————-

腾讯廊坊市网友 宅莮No謿 1小时前
我们有百度!我都没用过谷歌!拜拜!

—————————————————————-

腾讯湖州市网友 夏天的冰 1小时前
我一直只用百度,谷歌好像没什么新意!所以我宁可百度一下,也不谷歌一下!走了更好!

—————————————————————-

下面是我说:

走吧,走远一点吧。

天朝没有谷歌,一样是天朝。

谷歌没有天朝,一样是天堂。

天朝人民习惯了被强奸,习惯了一夫多妻制。

你来解放他们,是不可能的,因为他们接受不了。

有那闲功夫干点什么不好?

天朝人民喜欢在规定的时间,规定的地点,打开规定的网页,看规定的内容,思考规定的问题,说规定的话,过规定的生活。

天朝人民不喜欢自由。

恋人分手时,最好的理由是:我们不合适。

我觉得以此来对谷歌这几年跟天朝的关系作总结,挺合适的。

我只能抱一点点幻想地期望,谷歌不要拒绝中国的工程师,毕竟妓院里的女人,不全都是妓女。

看来我的美国VPN代理,还是要长期续费的……

Tags:

MySQL 多实例运行

今天要在服务器上运行多个 MySQL,用不同的端口,彼此隔离数据。

我最先想到的办法是下源码,编译多份,编译的时候设置不同的默认路径、端口和 my.cnf 配置文件位置。

被同事劝止……

人家告诉我不用装多份,只装一份二进制 rpm 版本,然后 copy 多份配置文件,再用不同的命令行参数启动即可。

/usr/sbin/mysqld --user=mysql --skip-external-locking \
	--port=3316 --defaults-file=/etc/my.s1.cnf \
	--basedir=/ --datadir=/var/lib/mysql_s1/ \
	--pid-file=/var/lib/mysql/s1.pid \
	--socket=/var/lib/s1.sock &

/usr/sbin/mysqld --user=mysql --skip-external-locking \
	--port=3326 --defaults-file=/etc/my.s2.cnf \
	--basedir=/ --datadir=/var/lib/mysql_s2/ \
	--pid-file=/var/lib/mysql/s2.pid \
	--socket=/var/lib/s2.sock &

就这么简单!

我曾经用原有的想法,编译过多份 MySQL!

笨死算了~~

顺便说下 –skip-external-locking 这个参数,由此也可引出另一种方式。

MySQL 支持 multi 方式运行多个实例,在 my.cnf 中,每个 [mysql#] 段代表一个实例,# 替换为正整数即可。

看手册的意思,好像是说多个实例可以共用相同的数据目录,还未证实。

但 –skip-external-locking 的说明是,当用 multi 方式启动多个 mysqld server ,多个 server 对同一个 table 进行读写时会锁表。如果你不会同时读写同一张表,那么可以加上这个参数启动 MySQL。

也许可以提高性能吧,回头有空了测试下~

Tags: