Monday, January 31, 2011

使用Hibernate + MYSQL数据库开发,链接超时问题

使用Hibernate + MYSQL数据库开发,链接超时问题:

com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.


查了一下,原来是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.

解决办法:
一种. 如果不用hibernate的话, 则在 connection url中加参数: autoReconnect=true

jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true

二种。用hibernate的话, 加如下属性:
true
true
true

三。要是还用c3p0连接池:
1
0
0
true


 四。最不好的解决方案

使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。

其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

1.按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true& failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。

2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

重启生效,需要同时修改这两个参数。

Thursday, January 20, 2011

wiki Installation

Error message:
Warning: Parameter 2 to Parser::parse() expected to be a reference, value given
in /home/site/gzcore/wiki/includes/StubObject.php on line 58
Fatal error: Call to a member function getCacheTime() on a non-object in
/home/site/gzcore/wiki/includes/Article.php on line 3387

solution
includes/Setup.php : 244

- $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array(
$wgParserConf ) );
+ $wgParser = new $wgParserConf['class'] ($wgParserConf);

Friday, January 14, 2011

linux mysql 用户管理

http://www.net527.cn/shujukuguanli/Mysql/2010/0225/6432.html

自从上在redhat Enterprise 5 中安装了MySQL,这次来实践操作一下MySQL用户的管理;



一、root用户密码的维护:

由于安装MySQL完后,MySQL会自动提供一个不带密码的root用户,为了安全起见给root设置密码:

#mysqladmin -u root password 123 (123为密码,也可以写成:'123'或"123") ;

设置密码后登入时就不能直接输入mysql了,必须跟些参数了,如下:

[root@localhost ~]# mysql -u root -p (-u 后跟登入的用户名,-p 提示要密码登入)
Enter password:(输入密码)



修改密码:

[root@localhost ~] #mysqladmin -u root -p password 123456 (password 后跟的是要更新的新密码)
Enter password:(输入原始密码,回车即可)



二、其他用户的增加和删除:

以root用户登入,在mysql中有一张mysql.user表是存储MySQL中所有用户的信息表,所以可以直接增加删除这个表的记录就可增加和删除用户;



1.添加用户(有两种形式):

A.mysql> grant all on *.* to yushan@"%" identified by "123" ;
mysql>flush privileges; (刷新系统权限表)
(执行完会在mysql.user表插入一条记录,all表示所有权限(包括增 删 改 查等权限), *.* 表示所有数据库,yushan为添加的用户名,123为密码,%为匹配的所有主机,上面的信息都可以指定如grant select,update on db.* to yushan@localhost identified by '123";)



B.直接对mysql.user添加一条记录

mysql> insert into mysql.user(Host,User,Password) values("localhost","yusuhan",password("123"));
mysql>flush privileges;
这样就创建了一个名为:yushan 密码为:123 (密码是经过加密的 ) 的用户,不过这样没有权限因为只添加了三个字段,也可通过grant添 加权限:

mysql>grant all on *.* to yushan@localhost identified by '123";
mysql>flush privileges;(刷新系统权限表)

(这种好像有点啰嗦了。直接用grant不久得了)



添加完用户 如果要远程登入MySQL,必须跟上主机Ip 如下:

[root@localhost ~]# mysql -u yushan -p -h 192.168.59.123
Enter password:(输入密码)



2.删除用户 :

mysql>delete from mysql.user where user ='yushan' ;

mysql>flush privileges; (刷新系统权限表)



其他用户的密码修改与root的一样,在这里无论是添加或是删除操作后必须来个flush privileges;这样才能起作用特别是删除用户后,如果未执行,被删除的用户还可登入,以上都是在MySQL root用户下操作,为了MySQL的安全,应该给用户指定相应的权限



ps:相关连接

http://www.phplamp.org/2008/06/mysql-add-user/

http://www.oklinux.cn/html/sql/other/20080516/54375.html



http://article.3326.com/idc/Linux/MYSQL/0Q625C52008.html



以上为实践总结



以下内容转载于 http://wenson.javaeye.com/blog/39066



三、登录MySQL



  登录 MySQL 的命令是mysql , mysql 的使用语法如下:
mysql [-u username] [-h host] [-p[password]] [dbname]
username 与 password 分别是 MySQL 的用户名与密码,mysql 的初始管理帐号是root,没有密码,注意:这个root用户不是Linux 的系统用户。MySQL 默认用户是root,由于初始没有密码,第一次进时只需键入mysql 即可。
[root@test1 local]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.16-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql >
出现了“mysql >”提示符,恭喜你,安装成功!
增加了密码后的登录格式如下:
mysql -u root -p
Enter password: (输入密码)
其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。



  注意:这个mysql 文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql 不是一个文件。



四、MySQL 的几个重要目录



  MySQL 安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux 的初学者,因为Linux 本身的目录结构就比较复杂,如果搞不清楚MySQL 的安装目录那就无从谈起深入学习。



  下面就介绍一下这几个目录。



   1、数据库目录
/var/lib/mysql /



   2、配置文件
/usr/share/mysql (mysql .server命令及配置文件)



   3、相关命令
/usr/bin(mysqladmin mysqldump等命令)



   4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql 的目录)



五、修改登录密码



  MySQL 默认没有密码,安装完毕增加密码的重要性是不言而喻的。



   1、命令
usr/bin/mysqladmin -u root password 'new-password'
格式:mysqladmin -u用户名 -p旧密码 password 新密码



   2、例子
例1:给root加个密码123456。
键入以下命令 :
[root@test1 local]# /usr/bin/mysqladmin -u root password 123456
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。



   3、测试是否修改成功
1)不用密码登录
[root@test1 local]# mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
显示错误,说明密码已经修改。
2)用修改后的密码登录
[root@test1 local]# mysql -u root -p
Enter password: (输入修改后的密码123456)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.16-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql >
成功!
这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。



六、启动与停止



   1、启动
MySQL 安装完成后启动文件mysql 在/etc/init.d目录下,在需要启动时运行下面命令即可。
[root@test1 init.d]# /etc/init.d/mysql start



   2、停止
/usr/bin/mysqladmin -u root -p shutdown



   3、自动启动
1)察看mysql 是否在自动启动列表中
[root@test1 local]# /sbin/chkconfig –list
2)把MySQL 添加到你系统的启动服务组里面去
[root@test1 local]# /sbin/chkconfig – add mysql
3)把MySQL 从启动服务组里面删除。
[root@test1 local]# /sbin/chkconfig – del mysql



七、更改MySQL 目录



  MySQL 默认的数据文件存储目录为/var/lib/mysql 。假如要把目录移到/home/data下需要进行下面几步:



   1、home目录下建立data目录
cd /home
mkdir data



   2、把MySQL 服务进程停掉:
mysqladmin -u root -p shutdown



   3、把/var/lib/mysql 整个目录移到/home/data
mv /var/lib/mysql  /home/data/
这样就把MySQL 的数据文件移动到了/home/data/mysql 下



   4、找到my.cnf配置文件
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql /下找到*.cnf文件,拷贝其中一个到/etc/



并改名为 my.cnf。命令如下:
[root@test1 mysql ]# cp /usr/share/mysql /my-medium.cnf /etc/my.cnf



   5、编辑MySQL 的配置文件/etc/my.cnf
为保证MySQL 能够正常工作,需要指明mysql .sock文件的产生位置。 修改



socket=/var/lib/mysql /mysql .sock一行中等号右边的值为:/home/mysql /mysql .sock 。操作如下:
vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之)
# The MySQL server
[mysqld]
port   = 3306
#socket  = /var/lib/mysql /mysql .sock(原内容,为了更稳妥用“#”注释此行)
socket  = /home/data/mysql /mysql .sock   (加上此行)



   6、修改MySQL 启动脚本/etc/rc.d/init.d/mysql
最后,需要修改MySQL 启动脚本/etc/rc.d/init.d/mysql ,把其中datadir=/var/lib/mysql 一行中,等号右



边的路径改成你现在的实际存放路径: home/data/mysql 。
[root@test1 etc]# vi /etc/rc.d/init.d/mysql
#datadir=/var/lib/mysql     (注释此行)
datadir=/home/data/mysql    (加上此行)



   7、重新启动MySQL 服务
/etc/rc.d/init.d/mysql  start
或用reboot命令重启Linux
如果工作正常移动就成功了,否则对照前面的7步再检查一下。



八、MySQL 的常用操作



  注意:MySQL 中每个命令后都要以分号;结尾。



   1、显示数据库
mysql > show databases;
+----------+
| Database |
+----------+
| mysql   |
| test   |
+----------+
2 rows in set (0.04 sec)
Mysql 刚安装完有两个数据库:mysql 和test。mysql 库非常重要,它里面有MySQL 的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。



   2、显示数据库中的表
mysql > use mysql ; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
Database changed



   mysql > show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv  |
| db       |
| func      |
| host      |
| tables_priv   |
| user      |
+-----------------+
6 rows in set (0.01 sec)



   3、显示数据表的结构:
describe 表名;



   4、显示表中的记录:
select * from 表名;
例如:显示mysql 库中user表中的纪录。所有能对MySQL 用户操作的用户都在此表中。
Select * from user;



   5、建库:
create database 库名;
例如:创建一个名字位aaa的库
mysql > create database aaa;
6、建表:
use 库名;
create table 表名 (字段设定列表);
例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
use aaa;
mysql > create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
可以用describe命令察看刚建立的表结构。
mysql > describe name;



   +-------+---------+------+-----+---------+----------------+
| Field | Type  | Null | Key | Default | Extra     |
+-------+---------+------+-----+---------+----------------+
| id  | int(3) |   | PRI | NULL  | auto_increment |
| xm  | char(8) | YES |   | NULL  |        |
| xb  | char(2) | YES |   | NULL  |        |
| csny | date  | YES |   | NULL  |        |
+-------+---------+------+-----+---------+----------------+



   7、增加记录
例如:增加几条相关纪录。
mysql > insert into name values('','张三','男','1971-10-01');
mysql > insert into name values('','白云','女','1972-05-20');
可用select命令来验证结果。
mysql > select * from name;
+----+------+------+------------+
| id | xm  | xb  | csny    |
+----+------+------+------------+
| 1 | 张三 | 男  | 1971-10-01 |
| 2 | 白云 | 女  | 1972-05-20 |
+----+------+------+------------+



   8、修改纪录
例如:将张三的出生年月改为1971-01-10
mysql > update name set csny='1971-01-10' where xm='张三';



   9、删除纪录
例如:删除张三的纪录。
mysql > delete from name where xm='张三';



   10、删库和删表
drop database 库名;
drop table 表名;



九、增加MySQL 用户



  格式: grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL ,然后键入以下命令:



   mysql > grant select,insert,update,delete on *.* to mailto:user_1@" " Identified by "123";
例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL 数据库并对你的数据为所欲为了,解决办法见例2。



  例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL 数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过MYSQL 主机来操作aaa库。



  mysql >grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";



  用新增的用户如果登录不了MySQL ,在登录时用如下命令:



  mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)



十、备份与恢复



  1、备份



  例如:将上例创建的aaa库备份到文件back_aaa中



   [root@test1 root]# cd /home/data/mysql  (进入到库目录,本例库已由val/lib/mysql 转到/home/data/mysql ,见上述第七部分内容)
[root@test1 mysql ]# mysqldump -u root -p --opt aaa > back_aaa



  2、恢复



  [root@test mysql ]# mysql -u root -p ccc < back_aaa

Friday, January 7, 2011

再议UTF-16的编码

http://blog.csdn.net/luo_yifan/archive/2010/03/23/5409356.aspx

http://hi.baidu.com/pengwenfu/blog/item/703b2b457ab4768eb3b7dc11.html/cmtid/da8bdffae3813d186c22eb15

Wednesday, January 5, 2011

Server Installation

1. Install Mysql Server and Client

rpm -ivh MySQL-server-community-5.1.50-1.rhel5.x86_64.rpm
rpm -ivh MySQL-client-community-5.1.50-1.rhel5.x86_64.rpm
//Change pwd
$ mysqladmin -u root password NEWPASSWORD
$ mysqladmin -u root -p'oldpassword' password newpass
//set timeout for threadpool
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
//add the following 2 lines in my.cnf
[mysqld]
port=3306
wait_timeout = 31536000
interactive-timeout = 31536000
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
set-variable=max_allowed_packet=16M
restart the DB
service mysql restart
or
/etc/init.d/mysqld restart
To check
whether the setting is take effect:
show variables like '%wait%';
backup DB

mysqldump -u [user] -p [password] databasename --routine > filename
mysql -u [user] -p databasename < filename 

2. Install Jre 1.6
chmod +x jre-6u21-linux-x64-rpm.bin
./jre-6u21-linux-x64-rpm.bin
vi ~/.bashrc
export JAVA_HOME=/usr/java/jre1.6.0_21
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export CATALINA_BASE=/usr/local/apache-tomcat-6.0.26
export CATALINA_HOME=/usr/local/apache-tomcat-6.0.26
export LD_LIBRARY_PATH=/usr/lib/fma/lib:$LD_LIBRARY_PATH

vi /etc/profile
///etc/profile is run by new login shells. It is run only once, not again each time you open a terminal.

export LD_LIBRARY_PATH=/usr/lib/fma/lib:$LD_LIBRARY_PATH
3. Install Tomcat
cd /usr/local 
gunzip –c tomcat.tar.gz | tar xvf -
vi tomcat/conf/server.xml
//change the port from 8080 to 80
vi tomcat/conf/tomcat-users.xml
//add


auto start
vi /etc/rc.local
export LD_LIBRARY_PATH=/usr/lib/fma/lib:$LD_LIBRARY_PATH
JAVA_HOME=/usr/java/jre1.6.0_21
export JAVA_HOME
cd /usr/local/apache-tomcat-6.0.26/bin
./startup.sh

//update server date time.
# date -s 14:36:00 
Fri Nov 26 14:15:00 CST 1999
# date -s 991128 
Sun Nov 28 00:00:00 CST 1999

4.

Sunday, January 2, 2011

BlackBerry WiFi

Blackberry HTTP connection
http://supportforums.blackberry.com/t5/Java-Development/Different-ways-to-make-an-HTTP-or-socket-connection/ta-p/445879
https://partners.blackberry.com/c/document_library/get_file?uuid=610c7f9f-2879-4632-a752-d4329be286e1&groupId=45163
http://www.blackberry.com/developers/docs/4.2api/javax/microedition/io/Connector.html
http://supportforums.blackberry.com/t5/Java-Development/Connecting-your-BlackBerry-http-and-socket-connections-to-the/m-p/206243#M29104


Check WiFi
http://supportforums.blackberry.com/t5/Java-Development/Wifi-not-available-when-Mobile-Network-is-off-on-Blackberry-Bold/m-p/313212

BES BIS
http://blog.csdn.net/cheyong007/archive/2009/02/04/3862252.aspx