2009/5/6

ERROR 2006 (HY000) at line ***: MySQL server has gone away 对策

原因分析:
1.执行批量的MYSQL语句,例如备份恢复的时候,时间过长。
对应:修改my.cnf中的wait_timeout和interactive_timeout变量
在一些不便修改的情形下,如租用的空间,可以采取sql语句修改,如何做呢?
对当前交互链接有效;
mysql>set wait_timeout = someIntValue;
对后续起的交互链接有效;
mysql>set interactive_timeout = someIntValue;

当然此处也可进行一些变量的设定
我们应当保持良好的习惯,操作完毕后 恢复原值。

2.SQL语句过大或者语句中含有BLOB类似字段
对应:修改my.cnf中的max_allowed_packet变量

对应于windows是my.ini 一般在mysql的安装目录下,改正完毕后都不要忘记对mysql服务进行重启。
以上变量的位置是在[mysqld]下面,而不是在[mysql]下面

除此之外,可能还有一些别的buffer_size的变量会影响到,也值得注意
例如
read_buffer_size
read_rnd_buffer_size
等等

我目前遇见的问题主要是blob的size问题,可能数据量的大小还不足与导致超时。

至于这些时间限制的默认参数是多少(有时候并不写明在my.cnf中),可通过以下查看:
mysql> show variables like '%timeout'
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| connect_timeout | 5 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+--------------------------+-------+
时间单位是秒 :-)

2009/4/27

linux下命令行备份mysql数据库

备份:shell> mysqldump -uroot -p dbname > /path/dbname_timestamp.sql
恢复:mysqladmin -uroot -p drop db_name
mysqladmin -uroot -p create db_name
mysql -uroot -p dbname < /path/dbname_timestamp.sql
过程中需要提示密码输入

linux下用打包目录

压缩:tar cvfz filename.tar somepath
展开:tar xvfz filename.tar

压缩文件夹加上-r参数,表示调用递归压缩,如:
zip -r filename.zip somepath
相较tar命令
这个命令比较使用,因为在linux和windows下数据解压缩都很方便
tar的命令也许是我没有用对。没有办法正确的解压缩。

2009/4/17

Balsamiq Mockups,一款很别致的手绘原型设计工具

浏览了许多的原型设计工具,包括visio,axure等等,但都有些过于“正式”的感觉。
有时候和用户讨论设计的需求等等,用纸笔画在纸上,也许更能够让用户放松
不会有一种“已经开发完了”的错觉,会本能的回避提出很切实的意见
那时候往往仅仅在界面的细节等等地方提出一些无关痛痒的问题
用户的需求已经被完全的误导了....
并且这个软件的优秀之处还在于界面的“轻松”
可以让原型设计者的思绪不会陷入一种僵化的严谨
(1) 控件非常丰富,可以直接拖来使用,并且可以持续的更新
(2)很好的可亲性能够让你的用户轻松的参与到和你一起的设计中去
(3) 基于AIR的开发,甚至可以在web上直接使用,也许你有了一个原型文件,但当时候的计算机又没有对应的软件,那么也是可以通过web来使用的 :-)

目前感受到的一些不足之处
(1)对于计算机的硬件要求似乎过高,我的双核电脑依然会有比较不流畅的体验
(2)需要adobe air安装平台,可能是一个推广障碍

更重要的是,你几乎没有需要license和桌面版的必要,如果你在网络环境中的话:
http://www.balsamiq.com/demos/mockups/Mockups.html
可以通过以上网址进行使用
导出xml文件保存好
需要编辑的时候导入即可

非常的方便!!!

站点地址:http://www.balsamiq.com
使用的的相关截图:

2008/10/20

js中getYear的IE与FF差异

在js中,如果我们对Date对象进行getyear的操作
那么按照手册中的说法:
使用getYear()方法可返回两位或四位数的年份
手册中也提及了两个注意要点:
  1. 用getYear()返回的数并不一定是4位的!处于1900年和1999年间的getYear()方法返回的只有两位数。在此之前的或是在此之后的年份返回的都是四位数的
  2. 这个方法得结合Date对象一起使用
但是以上的说法也不尽然准确,在FF下我们获取的数据无论是否超过1999年都需要+1900才能够表达正确年份,例如2008年在FF下返回的是108而在IE下却是2008.
为了适应这种情况,我们应当采取手册中的建议:
  1. getYear()方法不应该再使用了。最好是用getFullYear方法!!
如此一来,无论在IE或FF下都能够返回完全的年份,例如2008:-)

table操作中IE与FF的差异

最近在html表格操作中遇见了一些代码
var newRow = t.insertRow(insertpoint);
newRow.id = newRow_id;
newRow.innerHTML = html;
这段代码在FF下正常运行,在IE下却报出莫名错误。通过google了解了一些别人的处理方法,学习并总结如下:
在IE下,以下特性被严格遵循:
table tbody tr 的innerHTML 为只读
td tr tbody 的outerHTML 为只读

通过以下JS的运行我们便可以看出端倪:
《table id="table"》
《tbody id="tbody"》
《tr id="tr"》
《td id="td"》内容 《/td》
《/tr》
《/tbody》
《/table》
《script type="text/javascript"》
var $ = function () {
return document.getElementById(arguments[0]);
};
window.onload = function () {
try {
$("table").innerHTML = " 《tbody》 《tr》 《td》变更table 《\/td》 《\/tr》 《\/tbody》";
} catch (exp) {
try {
$("tbody").innerHTML = " 《tr》 《td》变更tbody 《\/td》 《\/tr》";
} catch (exp) {
try {
$("tr").innerHTML = " 《td》变更tr 《\/td》";
} catch (exp) {
$("td").innerHTML = "变更td";
}
}
}
};
《/script》
基于博客编辑器的限制,运行测试时候请将'《'替换为'<','》'替换为'>'。
运行后我们便可发现实际执行生效的只有“变更td”。当然我们也有变通方法,就是通过insertCell来进行新的tr的拼接。

2008/9/28

jsp中tag解释与文件包含的问题

这个问题的发生主要是针对在FF与IE下的不同表现来进行阐述:
1.文件包含代码如下(包含一个js文件):
[script type="text/javascript" src="[c:url value="/scripts/prototype.js" /]"][/script]
2.在somejs.js中我们有一处代码为
var a = '';
alert(a);
针对以上的代码,我们下意识的认为应该在加载包含了js文件的页面后会输出“a信息”的对话框,当我们运行起来后,在FF下查看,的确如此。但当我们转到IE的时候,就会出现“”的对话框,这个标签并没有被解释?!
作为应对,我们将var a = ''这段代码放置在jsp页面文件中,就一切正常。
我们不妨猜想,通过script引入的js文件,在IE中是在页面解释完后引入的,而在火狐中确实引入后再进行解释。
当然也可能问题并不那么单纯,例如有些标签也存在解释优先级别的问题,例如 标签是不能够直接嵌套使用。
但对于“在js中包含的标签语言不一定会被解释”这一问题保持警惕,可能会对我们遇见一些查错时候的“灵异现象”提供多一条解决道路。