1、JVM設(shè)置:
找到%TOMCAT_HOME%/bin/catalina.sh, 找到如下代碼:
# ----- Execute The Requested Command -----------------------------------------
并加入如下設(shè)置:
CATALINA_OPTS="$CATALINA_OPTS -Xms128m -Xmx256m $JPDA_OPTS"
最小內(nèi)存128M,最大256M,按你的要求設(shè)置,不過最大只能1024M。
2、圖片不能顯示:
若Linux系統(tǒng)在字符模式下, 處理圖片用時,須作如下設(shè)置:
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
posted @
2007-11-30 12:35 josson 閱讀(1039) |
評論 (1) |
編輯 收藏
Source Installation Overview
----------------------------------
The basic commands you must execute to install a MySQL source
distribution are:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
If you start from a source RPM, do the following:
shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm
Set Root Password for MySQL
/usr/local/bin/mysqladmin -u root password 'new-password'
使用GRANT ... IDENTIFIED BY語句,來進(jìn)行授權(quán)
GRANT select,insert,delete,update on dbname.* to user@'%' IDENTIFIED BY 'manager';
這里PASSWORD()函數(shù)是不必要的,也不需要使用FLUSH PRIVILEGES來執(zhí)行確認(rèn)
posted @
2007-11-28 19:54 josson 閱讀(384) |
評論 (0) |
編輯 收藏
Mysql數(shù)據(jù)庫介紹
MySQL是一個真正的多用戶、多線程SQL數(shù)據(jù)庫服務(wù)器。SQL(結(jié)構(gòu)化查詢語言)是世界上最流行的和標(biāo)準(zhǔn)
化的數(shù)據(jù)庫語言。MySQL是以一個客戶機(jī)/服務(wù)器結(jié)構(gòu)的實現(xiàn),它由一個服務(wù)器守護(hù)程序mysqld和很多不同的
客戶程序和庫組成。
SQL是一種標(biāo)準(zhǔn)化的語言,它使得存儲、更新和存取信息更容易。例如,你能用SQL語言為一個網(wǎng)站檢索
產(chǎn)品信息及存儲顧客信息,同時MySQL也足夠快和靈活以允許你存儲記錄文件和圖像。
MySQL 主要目標(biāo)是快速、健壯和易用。最初是因為我們需要這樣一個SQL服務(wù)器,它能處理與任何可不昂
貴硬件平臺上提供數(shù)據(jù)庫的廠家在一個數(shù)量級上的大型數(shù)據(jù)庫,但速度更快,MySQL就開發(fā)出來。自1996年以
來,我們一直都在使用MySQL,其環(huán)境有超過 40 個數(shù)據(jù)庫,包含 10,000個表,其中500多個表超過7百萬行
,這大約有100 個吉字節(jié)(GB)的關(guān)鍵應(yīng)用數(shù)據(jù)。
Mysql數(shù)據(jù)庫特點
1. 使用核心線程的完全多線程。這意味著它能很容易地利用多CPU(如果有)。
2. 可運行在不同的平臺上。
3. 多種列類型:1、 2、 3、4、和 8 字節(jié)長度的有符號/無符號整數(shù)(INT)、FLOAT、DOUBLE、CHAR、
VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、SET和ENUM類型。
4. 利用一個優(yōu)化的一遍掃描多重聯(lián)結(jié)(one-sweep multi-join)非常快速地進(jìn)行聯(lián)結(jié)(join)。
5. 在查詢的SELECT和WHERE部分支持全部運算符和函數(shù)。
6. 通過一個高度優(yōu)化的類庫實現(xiàn)SQL函數(shù)庫并且像他們能達(dá)到的一樣快速,通常在查詢初始化后不應(yīng)該有任
何內(nèi)存分配。
7. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數(shù)( COUNT()、COUNT(DISTINCT)、AVG()、STD()、
SUM()、 MAX()和MIN() )。
8. 支持ANSI SQL的LEFT OUTER JOIN和ODBC語法。
9. 你可以在同一查詢中混用來自不同數(shù)據(jù)庫的表。
10. 一個非常靈活且安全的權(quán)限和口令系統(tǒng),并且它允許基于主機(jī)的認(rèn)證。口令是安全的,因為當(dāng)與一個服
務(wù)器連接時,所有的口令傳送被加密。
11. ODBC for Windiws 95。
12. 具備索引壓縮的快速B樹磁盤表。
13. 每個表允許有16個索引。每個索引可以由1~16個列或列的一部分組成。最大索引長度是 256 個字節(jié)(在
編譯MySQL時,它可以改變)。一個索引可以使用一個CHAR或VARCHAR字段的前綴。
14. 定長和變長記錄。
15. 用作臨時表的內(nèi)存散列表。
16. 大數(shù)據(jù)庫處理。我們正在對某些包含 50,000,000 個記錄的數(shù)據(jù)庫使用MySQL。
17. 所有列都有缺省值,你可以用INSERT插入一個表列的子集,那些沒用明確給定值的列設(shè)置為他們的缺省
值。
18. 一個非常快速的基于線程的內(nèi)存分配系統(tǒng)。
19. 沒有內(nèi)存漏洞。用一個商用內(nèi)存漏洞監(jiān)測程序測試過(purify)。
20. 包括myisamchk,一個檢查、優(yōu)化和修復(fù)數(shù)據(jù)庫表的快速實用程序。
21. 全面支持ISO-8859-1 Latin1 字符集。
22. 所有數(shù)據(jù)以 ISO-8859-1 Latin1 格式保存。所有正常的字符串比較是忽略大小寫的。
23. DELETE、INSERT、REPLACE和UPDATE 返回有多少行被改變(受影響)。
24. 函數(shù)名不會與表或列名沖突。例如ABS是一個有效的列名字。對函數(shù)調(diào)用的唯一限制是函數(shù)名與隨后的
"("不能有空格。
25. 所有MySQL程序可以用選項--help或-?獲得聯(lián)機(jī)幫助。
26. 服務(wù)器能為客戶提供多種語言的出錯消息。
27. 客戶端使用TCP/IP 連接或Unix套接字(socket)或NT下的命名管道連接MySQL。
28. MySQL特有的SHOW命令可用來檢索數(shù)據(jù)庫、表和索引的信息,EXPLAIN命令可用來確定優(yōu)化器如何解決一
個查詢。
MySQL服務(wù)器的啟動與停止
一、啟動服務(wù)器的方法
啟動服務(wù)器由三種主要方法:
1、 直接調(diào)用mysqld。
#./mysqld&
這可能是最不常用的方法,建議不要多使用。
2、調(diào)用safe_mysqld腳本,最好的方法。
#./safe_mysqld -O join_buffer=128M -O key_buffer=128M -O record_buffer=256M -O sort_buffer=128M -O table_cache=2048 -O tmp_table_size=16M -O max_connections=2048 &
3、調(diào)用mysql.server腳本。
safe_mysqld腳本安裝在MySQL安裝目錄的bin目錄下,或可在MySQL源代碼分發(fā)的scripts目錄下找到。
mysql.server腳本安裝在MySQL安裝目錄下的share/mysqld目錄下或可以在MySQL源代碼分發(fā)的support_files
目錄下找到。如果你想使用它們,你需要將它們拷貝到適當(dāng)?shù)哪夸浵耺ysql/bin下。
#./mysql.server start
Sun Solariys開機(jī)自動啟mysql的方法
寫一個啟動和關(guān)閉的批處理文件Web (在路徑/etc/init.d 下), 內(nèi)容如下:
#!/bin/sh
OPT_=$1
case "$OPT_" in
start)
/bin/echo "$0 : (start)"
#
# Your service startup command goes here.
#
/usr/local/apache/bin/apachectl start
/home3/mysql/bin/safe_mysqld -O join_buffer=128M -O key_buffer=128M -O record_buffer=256M -O sort_buffer=128M -O table_cache=2048 -O tmp_table_size=16M -O max_connections=2048 &
# NOTE: Must exit with zero unless error is severe.
exit 0
;;
stop)
/bin/echo "$0 : (stop)"
#
# Your service shutdown command goes here.
#
/usr/local/apache/bin/apachectl stop
# NOTE: Must exit with zero unless error is severe.
exit 0
;;
*) /bin/echo ''
/bin/echo "Usage: $0 [start|stop]"
/bin/echo " Invalid argument ==> \"${OPT_}\""
/bin/echo ''
exit 0
;;
esac
確認(rèn)此文件有可執(zhí)行的權(quán)利
#chmod 500 web
#cd /etc/rc2.d
#ln -s ../init.d/web S99mysql
在系統(tǒng)啟動時,S99mysql腳本將自動用一個start參數(shù)調(diào)用。注意頭字母必須大寫。
二、停止服務(wù)器的方法
1、要手工停止服務(wù)器,使用mysqladmin:
#mysqladmin -u 用戶名 -p'密碼' shutdown
2、 調(diào)用mysql.server腳本,最好的方法。
#./mysql.server stop
3、 直接殺掉OS的進(jìn)程號
#kill -9 進(jìn)程號
這可能是最不常用的方法,建議不要多使用。
要自動停止服務(wù)器,你不需做特別的事情。只需要加另外一個關(guān)閉程序。
#cd /etc/rc0.d
#ln -s ../init.d/web K01mysql
在系統(tǒng)啟動時,K01mysql腳本將自動用一個stop參數(shù)調(diào)用。
MySQL目錄結(jié)構(gòu)和常用命令
一、 數(shù)據(jù)目錄的位置
這是默認(rèn)的mysql目錄結(jié)構(gòu)
bin info libexec share var
include lib man sql-bench
一個缺省數(shù)據(jù)目錄被編譯進(jìn)了服務(wù)器,如果你從一個源代碼分發(fā)安裝MySQL,典型的缺省目錄為
/usr/local/var,如果從RPM文件安裝則為/var/lib/mysql,如果從一個二進(jìn)制分發(fā)安裝則是
/usr/local/mysql/data。
作為一名MySQL管理員,你應(yīng)該知道你的數(shù)據(jù)目錄在哪里。如果你運行多個服務(wù)器,你應(yīng)該是到所有數(shù)據(jù)目錄
在哪里,但是如果你不知道確切的位置,由多種方法找到它:
1、使用mysqladmin variables從你的服務(wù)器直接獲得數(shù)據(jù)目錄路徑名。查找datadir變量的值,在Unix上,其輸出類似于:
%mysqladmin -u username -p'*****' variables
+----------------------+----------------------+
| variable_name | Value |
+----------------------+----------------------+
| back_log | 5 |
| connect_timeout | 5 |
| basedir | /var/local/ |
| datadir | /usr/local/var/ |
....
2、查找mysql運行的路徑
%ps -ef | grep mysqld
二、數(shù)據(jù)目錄結(jié)構(gòu)
每個數(shù)據(jù)庫對應(yīng)于數(shù)據(jù)目錄下的一個目錄。
在一個數(shù)據(jù)庫中的表對應(yīng)于數(shù)據(jù)目錄下的文件。
數(shù)據(jù)目錄也包含由服務(wù)器產(chǎn)生的幾個狀態(tài)文件,如日志文件。這些文件提供了關(guān)于服務(wù)器操作的重要信息。
對管理特別在出了問題而試圖確定問題原因時很有價值。
1、數(shù)據(jù)庫表的表示
數(shù)據(jù)庫目錄中有3種文件:一個樣式(描述文件)、一個數(shù)據(jù)文件和一個索引文件。每個文件的基本名是表
名,文件名擴(kuò)展名代表文件類型。擴(kuò)展名如下表。數(shù)據(jù)和索引文件的擴(kuò)展名指出表使用老式IASM索引或新式
MyISAM索引。
MySQL文件類型
文件類型 文件名擴(kuò)展名 文件內(nèi)容
樣式文件 .frm 描述表的結(jié)構(gòu)(它的列、列類型、索引等)
數(shù)據(jù)文件 .ISD(ISAM)或.MYD(MyISAM) 包含表里所有的數(shù)據(jù)
索引文件 .ISM(ISAM)或.MYI(MyISAM) 包含數(shù)據(jù)文件上的所有索引的索引樹
當(dāng)你發(fā)出一條CREATE TABLE tbl_name時語句定義表的結(jié)構(gòu)時,服務(wù)器創(chuàng)建一個名為tbl_name.frm的文件,它
包括該結(jié)構(gòu)的內(nèi)部編碼,同時也創(chuàng)建一個空數(shù)據(jù)和索引文件,初始化為包含指出無記錄和無索引的信息(如
果CREATE TABLE語句包括索引指定,索引文件反映出這些索引)。對應(yīng)于表的文件的屬主和模式被設(shè)置為只
允許MySQL服務(wù)器用戶訪問。
下面介紹一下常用的mysql命令
進(jìn)入mysql數(shù)據(jù)庫
#./mysql -u 用戶名 -p'密碼'
查看所有的數(shù)據(jù)庫
mysql> show databases;
進(jìn)入一個特定的數(shù)據(jù)庫
mysql> use 數(shù)據(jù)庫名;
查看數(shù)據(jù)庫里所有的表
mysql> show tables;
把表改名
mysql> alter table 表名1 rename 表名2;
例子:mysql>alter table dept rename dept2;
2、 建索引的注意事項:
先要把要加索引的字段設(shè)為非空
mysql> alter table 表名 change 字段名 字段名 字段描述 not null;
例子:
我們創(chuàng)建這樣一個表
mysql> create table employee
( id int(5) not null,
depno int(5),
name varchar(20) not null,
cardnumber bigint(15) not null);
mysql> alter table employee change depno depno int(5) not null;
加索引
mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
例子: mysql> alter table employee add index emp_name (name);
加主關(guān)鍵字的索引
mysql> alter table 表名 add primary key (字段名);
例子: mysql> alter table employee add primary key(id);
加唯一限制條件的索引
mysql> alter table 表名 add unique 索引名 (字段名);
例子: mysql> alter table employee add unique emp_name2(cardnumber);
查看某個表的索引
mysql> show index from 表名;
例子: mysql> show index from employee;
刪除某個索引
mysql> alter table 表名 drop index 索引名;
例子: mysql>alter table employee drop index emp_name;
MySQL用戶管理
MySQL管理員應(yīng)該知道如何設(shè)置MySQL用戶賬號,指出哪個用戶可以連接服務(wù)器,從哪里連接,連接后能做什
么。MySQL 3.22.11開始引入兩條語句使得這項工作更容易做:GRANT語句創(chuàng)建MySQL用戶并指定其權(quán)限,而
REVOKE語句刪除權(quán)限。兩條語句扮演了mysql數(shù)據(jù)庫的前端角色,并提供與直接操作這些表的內(nèi)容不同的另一
種方法。CREATE和REVOKE語句影響4個表:
授權(quán)表內(nèi)容:
user 能連接服務(wù)器的用戶以及他們擁有的任何全局權(quán)限
db 數(shù)據(jù)庫級權(quán)限
tables_priv 表級權(quán)限
columns_priv 列級權(quán)限
還有第5個授權(quán)表(host),但它不受GRANT和REVOKE的影響。
當(dāng)你對一個用戶發(fā)出一條GRANT語句時,在user表中為該用戶創(chuàng)建一條記錄。如果語句指定任何全局權(quán)限(管
理權(quán)限或適用于所有數(shù)據(jù)庫的權(quán)限),這些也記錄在user表中。如果你指定數(shù)據(jù)庫、表和列級權(quán)限,他們被
分別記錄在db、tables_priv和columns_priv表中。
在下面的章節(jié)中,我們將介紹如何設(shè)置MySQL用戶賬號并授權(quán)。我們也涉及如何撤權(quán)和從授權(quán)表中刪除用戶。
一、創(chuàng)建用戶并授權(quán)
GRANT語句的語法看上去像這樣:
GRANT privileges (columns)
ON what
TO user IDENTIFIED BY "password"
WITH GRANT OPTION
要使用該語句,你需要填寫下列部分:
privileges
授予用戶的權(quán)限,下表列出可用于GRANT語句的權(quán)限指定符:
權(quán)限指定符 權(quán)限允許的操作:
ALTER 修改表和索引
CREATE 創(chuàng)建數(shù)據(jù)庫和表
DELETE 刪除表中已有的記錄
DROP 拋棄(刪除)數(shù)據(jù)庫和表
INDEX 創(chuàng)建或拋棄索引
INSERT 向表中插入新行
REFERENCE 未用
SELECT 檢索表中的記錄
UPDATE 修改現(xiàn)存表記錄
FILE 讀或?qū)懛?wù)器上的文件
PROCESS 查看服務(wù)器中執(zhí)行的線程信息或殺死線程
RELOAD 重載授權(quán)表或清空日志、主機(jī)緩存或表緩存。
SHUTDOWN 關(guān)閉服務(wù)器
ALL 所有;ALL PRIVILEGES同義詞
USAGE 特殊的“無權(quán)限”權(quán)限
columns
權(quán)限運用的列,它是可選的,并且你只能設(shè)置列特定的權(quán)限。如果命令有多于一個列,應(yīng)該用逗號分開它們.
what
權(quán)限運用的級別。權(quán)限可以是全局的(適用于所有數(shù)據(jù)庫和所有表)、特定數(shù)據(jù)庫(適用于一個數(shù)據(jù)庫中的
所有表)或特定表的。可以通過指定一個columns字句是權(quán)限是列特定的。
user
權(quán)限授予的用戶,它由一個用戶名和主機(jī)名組成。MySQL中的一個用戶名就是你連接服務(wù)器時指定的用戶名,
該名字不必與你的Unix登錄名或Windows名聯(lián)系起來。缺省地,如果你不明確指定一個名字,客戶程序?qū)⑹褂?br />
你的登錄名作為MySQL用戶名。這只是一個約定。你可以在授權(quán)表中將該名字改為nobody,然后以nobody連接
執(zhí)行需要超級用戶權(quán)限的操作。
password
賦予用戶的口令,它是可選的。如果你對新用戶沒有指定IDENTIFIED BY子句,該用戶不賦給口令(不安全)。
對現(xiàn)有用戶,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當(dāng)你用IDENTIFIED BY
時,口令字符串用改用口令的字面含義,GRANT將為你編碼口令,不要象你用SET PASSWORD 那樣使用password()
函數(shù)。
WITH GRANT OPTION子句是可選的。如果你包含它,用戶可以授予權(quán)限通過GRANT語句授權(quán)給其它用戶。你可
以用該子句給與其它用戶授權(quán)的能力。
用戶名、口令、數(shù)據(jù)庫和表名在授權(quán)表記錄中是大小寫敏感的,主機(jī)名和列名不是。
舉例:創(chuàng)建一個超級用戶test1
mysql> grant all privilleges on *.* to test1@localhost identified by '123456' with grant option;
創(chuàng)建一個只能查詢的用戶 test2
mysql> grant select on *.* to test2@localhost identified by '9876543';
二、撤權(quán)并刪除用戶
要取消一個用戶的權(quán)限,使用REVOKE語句。REVOKE的語法非常類似于GRANT語句,除了TO用FROM取代并且沒有
INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必須匹配原來GRANT語句的你想撤權(quán)的用戶的user部分。privileges部分不需匹配,你可以用GRANT
語句授權(quán),然后用REVOKE語句只撤銷部分權(quán)限。REVOKE語句只刪除權(quán)限,而不刪除用戶。即使你撤銷了所有
權(quán)限,在user表中的用戶記錄依然保留,這意味著用戶仍然可以連接服務(wù)器。要完全刪除一個用戶,你必須
用一條DELETE語句明確從user表中刪除用戶記錄:
#mysql -u root mysql
mysql>DELETE FROM user
->WHERE User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;
DELETE語句刪除用戶記錄,而FLUSH語句告訴服務(wù)器重載授權(quán)表。(當(dāng)你使用GRANT和REVOKE語句時,表自動
重載,而你直接修改授權(quán)表時不是。)
舉例:刪除用戶test1
mysql> revoke all on *.* from test2@localhost;
mysql> use mysql;
mysql> delete from user where user='test' and host='localhost';
mysql> flush privileges;
MySQL數(shù)據(jù)庫備份
在數(shù)據(jù)庫表丟失或損壞的情況下,備份你的數(shù)據(jù)庫是很重要的。已經(jīng)知道表被破壞,用諸如vi或Emacs等編輯
器試圖直接編輯它們,這對表絕對不是件好事!
備份數(shù)據(jù)庫兩個主要方法是用mysqldump程序或直接拷貝數(shù)據(jù)庫文件(如用cp、cpio或tar等)。每種方法都
有其優(yōu)缺點:
mysqldump與MySQL服務(wù)器協(xié)同操作。直接拷貝方法在服務(wù)器外部進(jìn)行,并且你必須采取措施保證沒有客戶正
在修改你將拷貝的表,一般在數(shù)據(jù)庫關(guān)閉情況下做。mysqldump比直接拷貝要慢些。mysqldump生成能夠移植
到其它機(jī)器的文本文件,甚至那些有不同硬件結(jié)構(gòu)的機(jī)器上。直接拷貝文件可以移植到同類機(jī)器上,但不能
移植到其它機(jī)器上,除非你正在拷貝的表使用MyISAM存儲格式。
一、使用mysqldump備份和拷貝數(shù)據(jù)庫
當(dāng)你使用mysqldump程序產(chǎn)生數(shù)據(jù)庫備份文件時,缺省地,文件內(nèi)容包含創(chuàng)建正在傾倒的表的CREATE語句和包
含表中行數(shù)據(jù)的INSERT語句。換句話說,mysqldump產(chǎn)生的輸出可在以后用作mysql的輸入來重建數(shù)據(jù)庫。
Mysqldump參數(shù)如下:
#mysqldump -u 用戶名-p'密碼' 數(shù)據(jù)庫名 [表名] > 操作系統(tǒng)下文件名
舉例:#./mysqldump -u root -p'123456' samp_db>samp.db.txt
輸出文件的開頭看起來象這樣:
# MySQL Dump 6.0
#
# Host: localhost Database: samp_db
#---------------------------------------
# Server version 3.23.2-alpha-log
#
# Table structure for table 'absence'
#
CREATE TABLE absence(
student_id int(10) unsigned DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (student_id,date)
);
#
# Dumping data for table 'absence'
#
INSERT INTO absence VALUES (3,'1999-09-03');
INSERT INTO absence VALUES (5,'1999-09-03');
INSERT INTO absence VALUES (10,'1999-09-08');
......
文件剩下的部分有更多的INSERT和CREATE TABLE語句組成。
輸出單個的表:
#mysqldump samp_db student score event absence >grapbook.sql
#mysqldump samp_db member president >hist-league.sql
缺省地,mysqldump在寫入前將一個表的整個內(nèi)容讀進(jìn)內(nèi)存。這通常確實不必要,并且實際上如果你有一個大
表,幾乎是失敗的。你可用--quick選項告訴mysqldump只要它檢索出一行就寫出每一行。為了進(jìn)一步優(yōu)化傾
倒過程,使用--opt而不是--quick。--opt選項打開其它選項,加速數(shù)據(jù)的傾倒和把它們讀回。
二、使用直接拷貝數(shù)據(jù)庫的備份和拷貝方法
另一種不涉及mysqldump備份數(shù)據(jù)庫和表的方式是直接拷貝數(shù)據(jù)庫表文件。典型地,這用諸如cp、tar或cpio
實用程序。本文的例子使用cp。
%cd DATADIR
%cp -r samp_db /usr/archive/mysql
單個表可以如下備份:
%cd DATADIR/samp_db
%cp member.* /usr/archive/mysql/samp_db
%cp score.* /usr/archive/mysql/samp_db
....
當(dāng)你完成了備份時,你可以重啟服務(wù)器(如果關(guān)閉了它)或釋放加在表上的鎖定(如果你讓服務(wù)器運行)。
要用直接拷貝文件把一個數(shù)據(jù)庫從一臺機(jī)器拷貝到另一臺機(jī)器上,只是將文件拷貝到另一臺服務(wù)器主機(jī)的適
當(dāng)數(shù)據(jù)目錄下即可。要確保文件是MyIASM格式或兩臺機(jī)器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫在另一臺主機(jī)
上有奇怪的內(nèi)容。你也應(yīng)該保證在另一臺機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫表時不訪問它們。
建一個sh文件bakmysql.sh
#!/bin/sh
cd /usr/local/mysql/
tar cvf /mount2/mysqlvar.tar var
可以設(shè)到操作系統(tǒng)自動運行。
root用戶crontab文件
/var/spool/cron/crontabs/root增加以下內(nèi)容
0 2 1 * * /mount2/bakmysql.sh
#/etc/rc2.d/S75cron stop
#/etc/rc2.d/S75cron start
重新?lián)艋頢un Solaris自動處理進(jìn)程
三、用備份恢復(fù)數(shù)據(jù)
數(shù)據(jù)庫損壞的發(fā)生有很多原因,程度也不同。如果你走運,你可能僅損壞一兩個表(如掉電),如果你倒霉
,你可能必須替換整個數(shù)據(jù)目錄(如磁盤損壞)。在某些情況下也需要恢復(fù),比如用戶錯誤地刪除了數(shù)據(jù)庫
或表。不管這些倒霉事件的原因,你將需要實施某種恢復(fù)。
如果表損壞但沒丟失,嘗試用myisamchk或isamchk修復(fù)它們,如果這樣的損壞可有修復(fù)程序修復(fù)。
1、 恢復(fù)整個數(shù)據(jù)庫
Mysqldump參數(shù)如下:
#mysqldump -u 用戶名-p'密碼' 數(shù)據(jù)庫名 < 操作系統(tǒng)下文件名
舉例:
先在Mysql里創(chuàng)建另一個數(shù)據(jù)庫
mysql> create database test;
然后將備份的數(shù)據(jù)導(dǎo)入
#mysqldump -u root -p'123456' test2 < samp.db.txt
create database dbname DEFAULT CHARSET=UTF8
posted @
2007-11-28 19:53 josson 閱讀(333) |
評論 (0) |
編輯 收藏
在 MySQL 中,數(shù)據(jù)庫和表對就于那些目錄下的目錄和文件。因而,操作系統(tǒng)的敏感性決定數(shù)據(jù)庫和表命名的大小寫敏感。這就意味著數(shù)據(jù)庫和表名在 Windows 中是大小寫不敏感的,而在大多數(shù)類型的 Unix 系統(tǒng)中是大小寫敏感的。
奇怪的是列名與列的別名在所有的情況下均是忽略大小寫的,而表的別名又是區(qū)分大小寫的。
要避免這個問題,你最好在定義數(shù)據(jù)庫命名規(guī)則的時候就全部采用小寫字母加下劃線的組合,而不使用任何的大寫字母。
或者也可以強(qiáng)制以 -O lower_case_table_names=1
參數(shù)啟動 mysqld
(如果使用 --defaults-file=...\my.cnf 參數(shù)來讀取指定的配置文件啟動 mysqld 的話,你需要在配置文件的 [mysqld] 區(qū)段下增加一行 lower_case_table_names=1)。這樣MySQL 將在創(chuàng)建與查找時將所有的表名自動轉(zhuǎn)換為小寫字符(這個選項缺省地在 Windows 中為 1 ,在 Unix 中為 0。從 MySQL 4.0.2 開始,這個選項同樣適用于數(shù)據(jù)庫名)。
當(dāng)你更改這個選項時,你必須在啟動 mysqld
前首先將老的表名轉(zhuǎn)換為小寫字母。
換句話說,如果你希望在數(shù)據(jù)庫里面創(chuàng)建表的時候保留大小寫字符狀態(tài),則應(yīng)該把這個參數(shù)置0: lower_case_table_names=1 。否則的話你會發(fā)現(xiàn)同樣的sqldump腳本在不同的操作系統(tǒng)下最終導(dǎo)入的結(jié)果不一樣(在Windows下所有的大寫字符都變成小寫了)。
posted @
2007-11-23 12:42 josson 閱讀(330) |
評論 (0) |
編輯 收藏
1、查看當(dāng)前所有連接的詳細(xì)資料:
./mysqladmin -uadmin -p -h10.140.1.1 processlist
2、只查看當(dāng)前連接數(shù)(Threads就是連接數(shù).):
./mysqladmin -uadmin -p -h10.140.1.1 status
posted @
2007-11-23 12:41 josson 閱讀(2080) |
評論 (0) |
編輯 收藏
A.修改linux系統(tǒng)默認(rèn)的1024個文件上限。
在/root/.bash_profile文件中加入:
ulimit -n 4096
參見:
linux 解決Too open many files問題
B.察看某個進(jìn)程打開的文件數(shù):
先用ps -aux找到pid,然后運行:
lsof -p %pid% | wc -l
C.察看80端口的連接數(shù)
netstat -nat|grep -i “80″|wc -l
posted @
2007-11-23 12:38 josson 閱讀(159) |
評論 (0) |
編輯 收藏
1、接口UserService.java:
package demo.xfire;

import demo.xfire.model.UserInfoBean;


public interface UserService
{


/** *//**
* 獲取用戶信息.
* @param username
* @return
*/
public UserInfoBean getUserInfo(String username);

/** *//**
* 用戶認(rèn)證.
* @param username
* @param passwd
* @return
*/
public int login(String username,String passwd);
}

2、實現(xiàn)UserServiceImpl.java:
package demo.xfire;

import demo.xfire.model.UserInfoBean;


public class UserServiceImpl implements UserService
{


/** *//**
* 獲取用戶信息.
* @param username
* @return
*/

public UserInfoBean getUserInfo(String username)
{
return JingManager.getUserInfo(username);
}

/** *//**
* 用戶認(rèn)證.
* @param username
* @param passwd
* @return
*/

public int login(String username,String passwd)
{
return JingManager.login(username, passwd);
}
}
3、XFire服務(wù)配置services.xml,放置到/WEB-INF/目錄下(具體路徑須視web.xml中的設(shè)置而定):
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>UserService</name>
<namespace>http://xfire.demo/service/UserService</namespace>
<serviceClass>demo.xfire.UserService</serviceClass>
<implementationClass>demo.xfire.UserServiceImpl</implementationClass>
</service>
</beans>
4、配置Web.xml文件:
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>services.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
啟動服務(wù)后,
http://localhost:8080/appname/UserService?wsdl即可以查看用戶接口服務(wù)的wsdl了。
posted @
2007-11-23 12:30 josson 閱讀(374) |
評論 (0) |
編輯 收藏
一、設(shè)置構(gòu)建路徑(必要的jar包)
commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar

aopalliance-1.0.jar
spring-core-2.0.4.jar
spring-beans-2.0.4.jar
spring-context-2.0.4.jar
spring-web-2.0.4.jar

cxf-2.0-incubator.jar
二、編寫服務(wù)類
a). 接口類HelloService.java
package demo.spring;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;

import demo.spring.model.UserInfoBean;

@WebService

public interface HelloService
{

public String sayHello(@WebParam(name="name")String text);
public UserInfoBean getUserInfo(@WebParam(name="username")String name);
public List<UserInfoBean> getUsers();
}
b).實現(xiàn)類HelloServiceImpl.java
package demo.spring;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

import demo.cxf.server.HelloService;
import demo.spring.model.UserInfoBean;

@WebService(endpointInterface="demo.spring.HelloService")

public class HelloServiceImpl implements HelloService
{


public String sayHello(String text)
{
return "Hello,".concat(text);
}


public UserInfoBean getUserInfo(String username)
{
UserInfoBean user = new UserInfoBean();
user.setRealname("捷克");
user.setUsername(username);
user.setEmail("jack@chaina.com");
return user;
}

public List<UserInfoBean> getUsers()
{
List<UserInfoBean> users = new ArrayList<UserInfoBean>();
users.add(getUserInfo("john"));
return users;
}
}
三、聲明服務(wù)Bean
在WEB-INF目錄下創(chuàng)建成一個beans.xml文件,以聲明endpoint bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloService" implementor="demo.spring.HelloServiceImpl" address="/HelloService"/>
</beans>

若使用Spring定義的bean,也可這樣聲明:
<bean id="helloService" class="demo.spring.HelloServiceImpl" />
<jaxws:endpoint id="helloServiceImpl" implementor="#helloService" address="/HelloService" />
四、定義Servlet
修改WEB-INF/目錄下的web.xml文件,添加如下定義:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
五、客戶端代碼
client_beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

<bean id="client" class="demo.spring.HelloService"
factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="demo.spring.HelloService"/>
<property name="address" value="http://localhost:8080/cxf/HelloService"/>
</bean>
</beans>
client.java
ClassPathXmlApplicationContext context

= new ClassPathXmlApplicationContext(new String[]
{"demo/spring/client/client_beans.xml"});
HelloService client = (HelloService)context.getBean("client");
String response = client.sayHello("Joe");
System.out.println("Response: " + response);
UserInfoBean user = client.getUserInfo("jack");
System.out.println(user.getUsername());
List<UserInfoBean> users = client.getUsers();

for(UserInfoBean u : users)
{
System.out.println(u.getUsername());
}
System.exit(0);
posted @
2007-11-21 23:21 josson 閱讀(635) |
評論 (0) |
編輯 收藏
Apache CXF 則是由 Celtix 和 XFire 項目整合而生,并且剛剛發(fā)布了 2.0.2 的最新版本,不過仍是 Apache 的一個孵化項目。
一、與Axis2的不同之處
1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy將在新版本里得到支持
3、Apache CXF 是根據(jù)Spring哲學(xué)來進(jìn)行編寫的,即可以無縫地與Spring進(jìn)行整合
4、Axis2 不是
5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
6、Apache CXF 目前僅支持 JAXB 和 Aegis,并且默認(rèn)是 JAXB 2.0,與 XFire 默認(rèn)是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 將在 CXF 2.1 版本中得到支持,目前版本是 2.0.2
7、Axis2 支持多種語言,它有 C/C++ 版本。
8、Apache CXF 提供方便的Spring整合方法,可以通過注解、Spring標(biāo)簽式配置來暴露Web Services和消費Web Services
二、A simple JAX-WS service
原文見
http://cwiki.apache.org/CXF20DOC/a-simple-jax-ws-service.html
a). 設(shè)置構(gòu)建路徑,將下列jar包放到項目中
the CXF distribution
commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
jetty-6.1.5.jar
jetty-util-6.1.5.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar
Spring jars
aopalliance-1.0.jar
spring-core-2.0.4.jar
spring-beans-2.0.4.jar
spring-context-2.0.4.jar
spring-web-2.0.4.jar
CXF jar
cxf-2.0-incubator.jar
b). 編寫Service代碼
接口HelloService.java
package demo.cxf.server;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService

public interface HelloService
{

public String sayHello(@WebParam(name="text")String text);
}
實現(xiàn)類HelloServiceImpl
package demo.cxf.server;

import javax.jws.WebService;

@WebService(endpointInterface="demo.cxf.server.HelloService",serviceName="helloService")

public class HelloServiceImpl implements HelloService
{

public String sayHello(String text)
{
return "Hello ".concat(text);
}

}
c). 發(fā)布服務(wù)
System.out.println("Starting Server");
HelloServiceImpl impl = new HelloServiceImpl();
String addr = "http://localhost:80/helloService";
Endpoint.publish(addr,impl);
d). 客戶端調(diào)用
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.setServiceClass(HelloService.class);
factory.setAddress("http://localhost:9000/helloService");
HelloService service = (HelloService)factory.create();
String reply = service.sayHello("cxf.");
System.out.println(reply);
System.exit(0);
posted @
2007-11-21 23:01 josson 閱讀(1004) |
評論 (0) |
編輯 收藏
"^\\d+$" //非負(fù)整數(shù)(正整數(shù) + 0)
"^[0-9]*[1-9][0-9]*$" //正整數(shù)
"^((-\\d+)|(0+))$" //非正整數(shù)(負(fù)整數(shù) + 0)
"^-[0-9]*[1-9][0-9]*$" //負(fù)整數(shù)
"^-?\\d+$" //整數(shù)
"^\\d+(\\.\\d+)?$" //非負(fù)浮點數(shù)(正浮點數(shù) + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數(shù)
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$" //非正浮點數(shù)(負(fù)浮點數(shù) + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負(fù)浮點數(shù)
"^(-?\\d+)(\\.\\d+)?$" //浮點數(shù)
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[A-Z]+$" //由26個英文字母的大寫組成的字符串
"^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數(shù)字和26個英文字母組成的字符串
"^\\w+$" //由數(shù)字、26個英文字母或者下劃線組成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$" //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$" //url
"^[A-Za-z0-9_]*$"
posted @
2007-11-21 22:38 josson 閱讀(284) |
評論 (0) |
編輯 收藏