ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品日韩在线,日本电影一区二区在线观看,亚洲精品成人精品456http://www.aygfsteel.com/OpenCloseD/!Qrdinary zh-cnThu, 19 Jun 2025 18:36:00 GMTThu, 19 Jun 2025 18:36:00 GMT60Speeding up InnoDB Insert by Changing Default Settingshttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125451.htmlå¼€å…?/dc:creator>å¼€å…?/author>Wed, 20 Jun 2007 18:51:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125451.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/125451.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125451.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/125451.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/125451.htmlInnoDB default options are very conservative and in several situations increasing the buffers can have a high impact on the performance. E.g. for speeding up inserts on a InnoDB-only setup, the rule of a thumb is to set the innodb_buffer_pool size to 50-80% of your computer's memory and to set innodb_log_file_size to about 25% of the innodb_buffer_pool_size.

If you are running your program on several threads, which all work on
the InnoDB table(s) you might want to also set
innodb_flush_log_at_trx_commit=0
This adds some risk of losing some transactions in the case of a
power failure or an unclean mysqld shutdown, but it can improve
speed.

Please note that when inserting several rows at once in InnoDB table, it is fastest, if the rows are inserted in Primary Key order. This is because of the clustered index, which InnoDB always uses.

If your system has a mix of several table handlers, then it is harder to provide good general settings for improving the speed, as the option settings heavily depend on your overall system design. In such cases you can contact us at consulting@mysql.com, and purchase online consulting. In Online Consulting our developers will log into your system and they will do extensive analysis of your system's requirements. Based on the research they can set proper settings for your MySQL installation or they can give you advice, how to make the needed changes by yourself in order to gain better performance.




http://www.mysql.com/news-and-events/newsletter/2003-11/a0000000269.html

]]>
my.ini详解及mysqlå½Õdº•优化讲述http://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125450.htmlå¼€å…?/dc:creator>å¼€å…?/author>Wed, 20 Jun 2007 18:35:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125450.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/125450.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125450.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/125450.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/125450.htmlhttp://bbs.muzone.cn/thread-107946-1-1.html

]]>
恢复mysql数据http://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125449.htmlå¼€å…?/dc:creator>å¼€å…?/author>Wed, 20 Jun 2007 18:34:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125449.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/125449.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125449.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/125449.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/125449.html MY-SQL常用命ä×o

一、连接MYSQL�

格式åQ?mysql -hä¸ÀLœºåœ°å€ -u用户å?åQp用户密码

1、例1åQšè¿žæŽ¥åˆ°æœ¬æœºä¸Šçš„MYSQLã€?

首先在打开DOS½H—口åQŒç„¶åŽè¿›å…¥ç›®å½?mysqlbinåQŒå†é”®å…¥å‘½ä×omysql -uroot -påQŒå›žè½¦åŽæç¤ºä½ è¾“密码åQŒå¦‚果刚安装好MYSQLåQŒè¶…¾U§ç”¨æˆ·root是没有密码的åQŒæ•…直接回èžR卛_¯˜q›å…¥åˆ°MYSQL中了åQŒMYSQL的提½Cºç¬¦æ˜¯ï¼šmysql>

2、例2åQšè¿žæŽ¥åˆ°˜qœç¨‹ä¸ÀLœºä¸Šçš„MYSQL。假设远½E‹ä¸»æœºçš„IP为:110.110.110.110åQŒç”¨æˆ·åä¸ºroot,密码为abcd123。则键入以下命ä×oåQ?

mysql -h110.110.110.110 -uroot -pabcd123

åQˆæ³¨:u与root可以不用加空æ û|¼Œå…¶å®ƒä¹Ÿä¸€æ øP¼‰

3、退出MYSQL命ä×oåQ?exit åQˆå›žè½¦ï¼‰

二、修改密码�

格式åQšmysqladmin -u用户å?-p旧密ç ?password 新密ç ?

1、例1åQšç»™root加个密码ab12。首先在DOS下进入目录mysqlbinåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»?

mysqladmin -uroot -password ab12

æ³¨ï¼šå› äØ“å¼€å§‹æ—¶root没有密码åQŒæ‰€ä»?p旧密码一™å¹å°±å¯ä»¥çœç•¥äº†ã€?

2、例2åQšå†ž®†root的密码改为djg345ã€?

mysqladmin -uroot -pab12 password djg345

三、增加新用户。(注意åQšå’Œä¸Šé¢ä¸åŒåQŒä¸‹é¢çš„å› äØ“æ˜¯MYSQL环境中的命ä×oåQŒæ‰€ä»¥åŽé¢éƒ½å¸¦ä¸€ä¸ªåˆ†å·ä½œä¸ºå‘½ä»¤ç»“束符åQ?

格式åQšgrant select on 数据åº?* to 用户名@ç™Õd½•ä¸ÀLœº identified by \"密码\"

ä¾?、增加一个用户test1密码为abcåQŒè®©ä»–可以在ä»ÖM½•ä¸ÀLœºä¸Šç™»å½•,òq¶å¯¹æ‰€æœ‰æ•°æ®åº“有查询、插入、修攏V€åˆ é™¤çš„æƒé™ã€‚首先用以root用户˜qžå…¥MYSQLåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»¤ï¼š

grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

但例1增加的用æˆäh˜¯ååˆ†å±é™©çš„,你想如某个äh知道test1的密码,那么他就可以在internet上的ä»ÖM½•一台电脑上ç™Õd½•ä½ çš„mysqlæ•°æ®åº“åÆˆå¯¹ä½ çš„æ•°æ®å¯ä»¥äØ“æ‰€‹Æ²äؓ了,解决办法见例2ã€?

ä¾?、增加一个用户test2密码为abc,让他只可以在localhost上登录,òq¶å¯ä»¥å¯¹æ•°æ®åº“mydb˜q›è¡ŒæŸ¥è¯¢ã€æ’入、修攏V€åˆ é™¤çš„æ“ä½œåQˆlocalhost指本åœîC¸»æœºï¼Œå³MYSQL数据库所在的那台ä¸ÀLœºåQ‰ï¼Œ˜q™æ ·ç”¨æˆ·å³ä‹É用知道test2的密码,他也无法从internet上直接访问数据库åQŒåªèƒ½é€šè¿‡MYSQLä¸ÀLœºä¸Šçš„web™å‰|¥è®‰K—®äº†ã€?

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

如果你不想test2有密码,可以再打一个命令将密码消掉�

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";

在上½‹‡æˆ‘们讲了登录、增加用戗÷€å¯†ç æ›´æ”¹ç­‰é—®é¢˜ã€‚下½‹‡æˆ‘们来看看MYSQL中有å…Ïx•°æ®åº“æ–šw¢çš„æ“ä½œã€‚注意:你必™å»é¦–先登录到MYSQL中,以下操作都是在MYSQL的提½Cºç¬¦ä¸‹è¿›è¡Œçš„åQŒè€Œä¸”每个命ä×o以分åïL»“束ã€?

一、操作技�

1、如果你打命令时åQŒå›žè½¦åŽå‘çŽ°å¿˜è®°åŠ åˆ†åøP¼Œä½ æ— ™å»é‡æ‰“一遍命令,只要打个分号回èžRž®±å¯ä»¥äº†ã€‚也ž®±æ˜¯è¯´ä½ å¯ä»¥æŠŠä¸€ä¸ªå®Œæ•´çš„命ä×o分成几行来打åQŒå®ŒåŽç”¨åˆ†å·ä½œç»“束标志就OKã€?

2、你可以使用光标上下键调å‡ÞZ»¥å‰çš„命ä×o。但以前我用˜q‡çš„一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-winã€?

二、显½Cºå‘½ä»?

1、显½Cºæ•°æ®åº“列表ã€?

show databases;

刚开始时才两个数据库åQšmysqlå’Œtest。mysql库很重要它里面有MYSQL的系¾lŸä¿¡æ¯ï¼Œæˆ‘们改密码和新增用户åQŒå®žé™…上ž®±æ˜¯ç”¨è¿™ä¸ªåº“˜q›è¡Œæ“ä½œã€?

2、显½Cºåº“中的数据表:

use mysqlåQ?åQï¼æ‰“开库,学过FOXBASE的一定不会陌生吧

show tables;

3、显½Cºæ•°æ®è¡¨çš„结构:

describe 表名;

4、徏库:

create database 库名;

5、徏表:

use 库名åQ?

create table 表名 (字段讑֮šåˆ—表)åQ?

6、删库和删表:

drop database 库名;

drop table 表名åQ?

7、将表中记录清空åQ?

delete from 表名;

8、显½Cø™¡¨ä¸­çš„记录åQ?

select * from 表名;

ä¸‰ã€ä¸€ä¸ªå¾åº“å’Œå»ø™¡¨ä»¥åŠæ’入数据的实ä¾?

drop database if exists school; //如果存在SCHOOL则删�

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER

(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default ’深圳’,

year date

); //廸™¡¨¾l“束

//以下为插入字ŒD?

insert into teacher values(’’,’glchengang’,’深圳一ä¸?#8217;,’1976-10-10’);

insert into teacher values(’’,’jack’,’深圳一ä¸?#8217;,’1975-12-23’);

注:在徏表中åQ?åQ‰å°†IDè®¾äØ“é•¿åº¦ä¸?的数字字ŒD?int(3)òq¶è®©å®ƒæ¯ä¸ªè®°å½•自动加一:auto_incrementòq¶ä¸èƒ½äØ“½I?not nullè€Œä¸”è®©ä»–æˆäØ“ä¸Õd­—ŒDµprimary keyåQ?åQ‰å°†NAMEè®¾äØ“é•¿åº¦ä¸?0的字½W¦å­—ŒDµï¼ˆ3åQ‰å°†ADDRESSè®¾äØ“é•¿åº¦50的字½W¦å­—ŒDµï¼Œè€Œä¸”¾~ºçœå€égؓ深圳。varcharå’Œchar有什么区别呢åQŒåªæœ‰ç­‰ä»¥åŽçš„æ–‡ç« å†è¯´äº†ã€‚(4åQ‰å°†YEARè®¾äØ“æ—¥æœŸå­—æ®µã€?

如果你在mysql提示½W¦é”®å…¥ä¸Šé¢çš„命ä×o也可以,但不方便调试。你可以ž®†ä»¥ä¸Šå‘½ä»¤åŽŸæ ·å†™å…¥ä¸€ä¸ªæ–‡æœ¬æ–‡ä»¶ä¸­å‡è®¾ä¸ºschool.sqlåQŒç„¶åŽå¤åˆ¶åˆ°c:\\下,òq¶åœ¨DOS状态进入目录\\mysql\\binåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»¤ï¼š

mysql -uroot -p密码 < c:\\school.sql

如果成功åQŒç©ºå‡ÞZ¸€è¡Œæ— ä»ÖM½•昄¡¤ºåQ›å¦‚有错误,会有提示。(以上命ä×o已经调试åQŒä½ åªè¦ž®?/的注释去掉即可ä‹É用)ã€?

四、将文本数据转到数据库中

1、文本数据应½W¦åˆçš„æ ¼å¼ï¼šå­—段数据之间用tab键隔开åQŒnull值用\\n来代æ›?

例:

3 rose 深圳二中 1976-10-10

4 mike 深圳一�1975-12-23

2、数据传入命ä»?load data local infile \"æ–‡äšg名\" into table 表名;

注意åQšä½ æœ€å¥½å°†æ–‡äšg复制到\\mysql\\bin目录下,òq¶ä¸”要先用use命ä×o打表所在的库ã€?

五、备份数据库åQšï¼ˆå‘½ä×o在DOSçš„\\mysql\\bin目录下执行)

mysqldump --opt school>school.bbb

注释:ž®†æ•°æ®åº“school备䆾到school.bbbæ–‡äšgåQŒschool.bbb是一个文本文ä»Óž¼Œæ–‡äšg名ä“Q取,打开看看你会有新发现ã€?

后记åQšå…¶å®žMYSQL的对数据库的操作与其它的SQL¾cÀL•°æ®åº“大同ž®å¼‚åQŒæ‚¨æœ€å¥½æ‰¾æœ¬å°†SQL的书看看。我在这里只介绍一些基本的åQŒå…¶å®žæˆ‘也就只懂˜q™äº›äº†ï¼Œå‘µå‘µã€‚最好的MYSQL教程˜q˜æ˜¯“晏子“译的“MYSQL中文参考手å†?#8220;不仅免费每个相关¾|‘站都有下蝲åQŒè€Œä¸”它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查扑և½æ•°å‘½ä»¤çš„æ—¶å€™ä¸å¤ªæ–¹ä¾Ñ€?/div>

]]>mysql常用命ä×ohttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125448.htmlå¼€å…?/dc:creator>å¼€å…?/author>Wed, 20 Jun 2007 18:20:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125448.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/125448.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/21/125448.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/125448.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/125448.html
MY-SQL常用命ä×o

一、连接MYSQL�

格式åQ?mysql -hä¸ÀLœºåœ°å€ -u用户å?åQp用户密码

1、例1åQšè¿žæŽ¥åˆ°æœ¬æœºä¸Šçš„MYSQLã€?

首先在打开DOS½H—口åQŒç„¶åŽè¿›å…¥ç›®å½?mysqlbinåQŒå†é”®å…¥å‘½ä×omysql -uroot -påQŒå›žè½¦åŽæç¤ºä½ è¾“密码åQŒå¦‚果刚安装好MYSQLåQŒè¶…¾U§ç”¨æˆ·root是没有密码的åQŒæ•…直接回èžR卛_¯˜q›å…¥åˆ°MYSQL中了åQŒMYSQL的提½Cºç¬¦æ˜¯ï¼šmysql>

2、例2åQšè¿žæŽ¥åˆ°˜qœç¨‹ä¸ÀLœºä¸Šçš„MYSQL。假设远½E‹ä¸»æœºçš„IP为:110.110.110.110åQŒç”¨æˆ·åä¸ºroot,密码为abcd123。则键入以下命ä×oåQ?

mysql -h110.110.110.110 -uroot -pabcd123

åQˆæ³¨:u与root可以不用加空æ û|¼Œå…¶å®ƒä¹Ÿä¸€æ øP¼‰

3、退出MYSQL命ä×oåQ?exit åQˆå›žè½¦ï¼‰

二、修改密码�

格式åQšmysqladmin -u用户å?-p旧密ç ?password 新密ç ?

1、例1åQšç»™root加个密码ab12。首先在DOS下进入目录mysqlbinåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»?

mysqladmin -uroot -password ab12

æ³¨ï¼šå› äØ“å¼€å§‹æ—¶root没有密码åQŒæ‰€ä»?p旧密码一™å¹å°±å¯ä»¥çœç•¥äº†ã€?

2、例2åQšå†ž®†root的密码改为djg345ã€?

mysqladmin -uroot -pab12 password djg345

三、增加新用户。(注意åQšå’Œä¸Šé¢ä¸åŒåQŒä¸‹é¢çš„å› äØ“æ˜¯MYSQL环境中的命ä×oåQŒæ‰€ä»¥åŽé¢éƒ½å¸¦ä¸€ä¸ªåˆ†å·ä½œä¸ºå‘½ä»¤ç»“束符åQ?

格式åQšgrant select on 数据åº?* to 用户名@ç™Õd½•ä¸ÀLœº identified by \"密码\"

ä¾?、增加一个用户test1密码为abcåQŒè®©ä»–可以在ä»ÖM½•ä¸ÀLœºä¸Šç™»å½•,òq¶å¯¹æ‰€æœ‰æ•°æ®åº“有查询、插入、修攏V€åˆ é™¤çš„æƒé™ã€‚首先用以root用户˜qžå…¥MYSQLåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»¤ï¼š

grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

但例1增加的用æˆäh˜¯ååˆ†å±é™©çš„,你想如某个äh知道test1的密码,那么他就可以在internet上的ä»ÖM½•一台电脑上ç™Õd½•ä½ çš„mysqlæ•°æ®åº“åÆˆå¯¹ä½ çš„æ•°æ®å¯ä»¥äØ“æ‰€‹Æ²äؓ了,解决办法见例2ã€?

ä¾?、增加一个用户test2密码为abc,让他只可以在localhost上登录,òq¶å¯ä»¥å¯¹æ•°æ®åº“mydb˜q›è¡ŒæŸ¥è¯¢ã€æ’入、修攏V€åˆ é™¤çš„æ“ä½œåQˆlocalhost指本åœîC¸»æœºï¼Œå³MYSQL数据库所在的那台ä¸ÀLœºåQ‰ï¼Œ˜q™æ ·ç”¨æˆ·å³ä‹É用知道test2的密码,他也无法从internet上直接访问数据库åQŒåªèƒ½é€šè¿‡MYSQLä¸ÀLœºä¸Šçš„web™å‰|¥è®‰K—®äº†ã€?

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

如果你不想test2有密码,可以再打一个命令将密码消掉�

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";

在上½‹‡æˆ‘们讲了登录、增加用戗÷€å¯†ç æ›´æ”¹ç­‰é—®é¢˜ã€‚下½‹‡æˆ‘们来看看MYSQL中有å…Ïx•°æ®åº“æ–šw¢çš„æ“ä½œã€‚注意:你必™å»é¦–先登录到MYSQL中,以下操作都是在MYSQL的提½Cºç¬¦ä¸‹è¿›è¡Œçš„åQŒè€Œä¸”每个命ä×o以分åïL»“束ã€?

一、操作技�

1、如果你打命令时åQŒå›žè½¦åŽå‘çŽ°å¿˜è®°åŠ åˆ†åøP¼Œä½ æ— ™å»é‡æ‰“一遍命令,只要打个分号回èžRž®±å¯ä»¥äº†ã€‚也ž®±æ˜¯è¯´ä½ å¯ä»¥æŠŠä¸€ä¸ªå®Œæ•´çš„命ä×o分成几行来打åQŒå®ŒåŽç”¨åˆ†å·ä½œç»“束标志就OKã€?

2、你可以使用光标上下键调å‡ÞZ»¥å‰çš„命ä×o。但以前我用˜q‡çš„一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-winã€?

二、显½Cºå‘½ä»?

1、显½Cºæ•°æ®åº“列表ã€?

show databases;

刚开始时才两个数据库åQšmysqlå’Œtest。mysql库很重要它里面有MYSQL的系¾lŸä¿¡æ¯ï¼Œæˆ‘们改密码和新增用户åQŒå®žé™…上ž®±æ˜¯ç”¨è¿™ä¸ªåº“˜q›è¡Œæ“ä½œã€?

2、显½Cºåº“中的数据表:

use mysqlåQ?åQï¼æ‰“开库,学过FOXBASE的一定不会陌生吧

show tables;

3、显½Cºæ•°æ®è¡¨çš„结构:

describe 表名;

4、徏库:

create database 库名;

5、徏表:

use 库名åQ?

create table 表名 (字段讑֮šåˆ—表)åQ?

6、删库和删表:

drop database 库名;

drop table 表名åQ?

7、将表中记录清空åQ?

delete from 表名;

8、显½Cø™¡¨ä¸­çš„记录åQ?

select * from 表名;

ä¸‰ã€ä¸€ä¸ªå¾åº“å’Œå»ø™¡¨ä»¥åŠæ’入数据的实ä¾?

drop database if exists school; //如果存在SCHOOL则删�

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER

(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default ’深圳’,

year date

); //廸™¡¨¾l“束

//以下为插入字ŒD?

insert into teacher values(’’,’glchengang’,’深圳一ä¸?#8217;,’1976-10-10’);

insert into teacher values(’’,’jack’,’深圳一ä¸?#8217;,’1975-12-23’);

注:在徏表中åQ?åQ‰å°†IDè®¾äØ“é•¿åº¦ä¸?的数字字ŒD?int(3)òq¶è®©å®ƒæ¯ä¸ªè®°å½•自动加一:auto_incrementòq¶ä¸èƒ½äØ“½I?not nullè€Œä¸”è®©ä»–æˆäØ“ä¸Õd­—ŒDµprimary keyåQ?åQ‰å°†NAMEè®¾äØ“é•¿åº¦ä¸?0的字½W¦å­—ŒDµï¼ˆ3åQ‰å°†ADDRESSè®¾äØ“é•¿åº¦50的字½W¦å­—ŒDµï¼Œè€Œä¸”¾~ºçœå€égؓ深圳。varcharå’Œchar有什么区别呢åQŒåªæœ‰ç­‰ä»¥åŽçš„æ–‡ç« å†è¯´äº†ã€‚(4åQ‰å°†YEARè®¾äØ“æ—¥æœŸå­—æ®µã€?

如果你在mysql提示½W¦é”®å…¥ä¸Šé¢çš„命ä×o也可以,但不方便调试。你可以ž®†ä»¥ä¸Šå‘½ä»¤åŽŸæ ·å†™å…¥ä¸€ä¸ªæ–‡æœ¬æ–‡ä»¶ä¸­å‡è®¾ä¸ºschool.sqlåQŒç„¶åŽå¤åˆ¶åˆ°c:\\下,òq¶åœ¨DOS状态进入目录\\mysql\\binåQŒç„¶åŽé”®å…¥ä»¥ä¸‹å‘½ä»¤ï¼š

mysql -uroot -p密码 < c:\\school.sql

如果成功åQŒç©ºå‡ÞZ¸€è¡Œæ— ä»ÖM½•昄¡¤ºåQ›å¦‚有错误,会有提示。(以上命ä×o已经调试åQŒä½ åªè¦ž®?/的注释去掉即可ä‹É用)ã€?

四、将文本数据转到数据库中

1、文本数据应½W¦åˆçš„æ ¼å¼ï¼šå­—段数据之间用tab键隔开åQŒnull值用\\n来代æ›?

例:

3 rose 深圳二中 1976-10-10

4 mike 深圳一�1975-12-23

2、数据传入命ä»?load data local infile \"æ–‡äšg名\" into table 表名;

注意åQšä½ æœ€å¥½å°†æ–‡äšg复制到\\mysql\\bin目录下,òq¶ä¸”要先用use命ä×o打表所在的库ã€?

五、备份数据库åQšï¼ˆå‘½ä×o在DOSçš„\\mysql\\bin目录下执行)

mysqldump --opt school>school.bbb

注释:ž®†æ•°æ®åº“school备䆾到school.bbbæ–‡äšgåQŒschool.bbb是一个文本文ä»Óž¼Œæ–‡äšg名ä“Q取,打开看看你会有新发现ã€?

后记åQšå…¶å®žMYSQL的对数据库的操作与其它的SQL¾cÀL•°æ®åº“大同ž®å¼‚åQŒæ‚¨æœ€å¥½æ‰¾æœ¬å°†SQL的书看看。我在这里只介绍一些基本的åQŒå…¶å®žæˆ‘也就只懂˜q™äº›äº†ï¼Œå‘µå‘µã€‚最好的MYSQL教程˜q˜æ˜¯“晏子“译的“MYSQL中文参考手å†?#8220;不仅免费每个相关¾|‘站都有下蝲åQŒè€Œä¸”它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查扑և½æ•°å‘½ä»¤çš„æ—¶å€™ä¸å¤ªæ–¹ä¾Ñ€?/div>

]]>MySQL优化¾léªŒhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123745.htmlå¼€å…?/dc:creator>å¼€å…?/author>Tue, 12 Jun 2007 18:55:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123745.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/123745.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123745.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/123745.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/123745.htmlMySQL优化¾léªŒ

WikipediaåQŒè‡ªç”Þqš„癄¡§‘全书

同时在线讉K—®é‡ç‘ô¾l­å¢žå¤?对于1G内存的服务器明显感觉到吃力严重时甚至每天都会æ­ÀLœº 或者时不时的服务器卡一ä¸?˜q™ä¸ªé—®é¢˜æ›„¡»å›°æ‰°äº†æˆ‘半个多月MySQL使用是很具äŽ×¾~©æ€§çš„½Ž—法åQŒå› æ­¤ä½ é€šå¸¸èƒ½ç”¨å¾ˆå°‘的内存运行或¾l™MySQL更多的被存以得到更好的性能ã€?

安装好mysql后,配制文äšg应该åœ?usr/local/mysql/share/mysql目录中,配制文äšg有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的¾|‘站和不同配制的服务器环境,当然需要有不同的配制文件了ã€?

一般的情况下,my-medium.cnf˜q™ä¸ªé…åˆ¶æ–‡äšgž®Þpƒ½æ»¡èƒö我们的大多需要;一般我们会把配¾|®æ–‡ä»¶æ‹·è´åˆ°/etc/my.cnf 只需要修改这个配¾|®æ–‡ä»¶å°±å¯ä»¥äº†ï¼Œä½¿ç”¨mysqladmin variables extended-status –u root –p 可以看到目前的参敎ͼŒæœ‰ï¼“个配¾|®å‚数是最重要的,即key_buffer_size,query_cache_size,table_cacheã€?

key_buffer_size只对MyISAM表è“v作用åQ?

key_buffer_size指定索引¾~“冲区的大小åQŒå®ƒå†›_®šç´¢å¼•处理的速度åQŒå°¤å…¶æ˜¯ç´¢å¼•è¯Èš„速度。一般我们设ä¸?6M,实际上稍微大一点的站点 ˜q™ä¸ªæ•°å­—是远˜qœä¸å¤Ÿçš„åQŒé€šè¿‡‹‚€æŸ¥çŠ¶æ€å€¼Key_read_requestså’ŒKey_reads,可以知道key_buffer_size讄¡½®æ˜¯å¦åˆç†ã€‚比例key_reads / key_read_requests应该ž®½å¯èƒ½çš„低,臛_°‘æ˜?:100åQ?:1000更好åQˆä¸Š˜q°çŠ¶æ€å€¼å¯ä»¥ä‹É用SHOW STATUS LIKE ‘key_read%’获得åQ‰ã€?或者如果你装了phpmyadmin 可以通过服务器运行状态看åˆ?½W”者推荐用phpmyadmin½Ž¡ç†mysqlåQŒä»¥ä¸‹çš„状态值都是本人通过phpmyadmin获得的实例分æž?

˜q™ä¸ªæœåС噍已¾lè¿è¡Œäº†20å¤?

key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112

比例接近1:8000 健康状况非常�

另外一个估计key_buffer_size的办法 把你¾|‘站数据库的每个表的索引所占空间大ž®åŠ èµäh¥çœ‹çœ‹ä»¥æ­¤æœåС噍䨓ä¾?比较大的几个表烦引加èµäh¥å¤§æ¦‚125M ˜q™ä¸ªæ•°å­—会随着表变大而变大ã€?

ä»?.0.1开始,MySQL提供了查询缓冲机制。ä‹É用查询缓å†ÔŒ¼ŒMySQLž®†SELECT语句和查询结果存攑֜¨¾~“冲åŒÞZ¸­åQŒä»ŠåŽå¯¹äºŽåŒæ ïLš„SELECT语句åQˆåŒºåˆ†å¤§ž®å†™åQ‰ï¼Œž®†ç›´æŽ¥ä»Ž¾~“冲åŒÞZ¸­è¯Õd–¾l“果。根据MySQL用户手册åQŒä‹É用查询缓冲最多可以达åˆ?38%的效率ã€?

通过调节以下几个参数可以知道query_cache_size讄¡½®å¾—是否合ç?

Qcache inserts
Qcache hits
Qcache lowmem prunes
Qcache free blocks
Qcache total blocks

Qcache_lowmem_prunes的值非常大åQŒåˆ™è¡¨æ˜Ž¾lå¸¸å‡ºçް¾~“冲不够的情å†?同时Qcache_hits的值非常大åQŒåˆ™è¡¨æ˜ŽæŸ¥è¯¢¾~“冲使用非常频繁åQŒæ­¤æ—‰™œ€è¦å¢žåŠ ç¼“å†²å¤§ž®Qcache_hitsçš„å€ég¸å¤§ï¼Œåˆ™è¡¨æ˜Žä½ çš„æŸ¥è¯¢é‡å¤çŽ‡å¾ˆä½ŽåQŒè¿™¿Uæƒ…况下使用查询¾~“冲反而会影响效率åQŒé‚£ä¹ˆå¯ä»¥è€ƒè™‘不用查询¾~“冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不ä‹É用查询缓册Ӏ?

Qcache_free_blocksåQŒå¦‚果该值非常大åQŒåˆ™è¡¨æ˜Ž¾~“冲åŒÞZ¸­¼„Žç‰‡å¾ˆå¤šquery_cache_type指定是否使用查询¾~“冲

我设¾|?

query_cache_size = 32M
query_cache_type= 1

得到如下状态�

Qcache queries in cache 12737 表明目前¾~“存的条æ•?
Qcache inserts 20649006
Qcache hits 79060095  看来重复查询率还挺高�
Qcache lowmem prunes 617913 有这么多‹Æ¡å‡ºçŽ°ç¼“å­˜è¿‡ä½Žçš„æƒ…å†µ
Qcache not cached 189896   
Qcache free memory 18573912  目前剩余¾~“å­˜½Iºé—´
Qcache free blocks 5328 ˜q™ä¸ªæ•°å­—ä¼ég¹Žæœ‰ç‚¹å¤§ã€€¼„Žç‰‡ä¸å°‘
Qcache total blocks 30953

如果内存允许32M应该要往上加�

table_cache指定表高速缓存的大小。每当MySQL讉K—®ä¸€ä¸ªè¡¨æ—Óž¼Œå¦‚果在表¾~“冲åŒÞZ¸­˜q˜æœ‰½Iºé—´åQŒè¯¥è¡¨å°±è¢«æ‰“å¼€òq¶æ”¾å…¥å…¶ä¸­ï¼Œ˜q™æ ·å¯ä»¥æ›´å¿«åœ°è®¿é—®è¡¨å†…容。通过‹‚€æŸ¥å³°å€¼æ—¶é—´çš„状态值Open_tableså’ŒOpened_tablesåQŒå¯ä»¥å†³å®šæ˜¯å¦éœ€è¦å¢žåŠ table_cache的倹{€‚如果你发现open_tables½{‰äºŽtable_cacheåQŒåƈ且opened_tables在不断增长,那么你就需要增加table_cacheçš„å€égº†åQˆä¸Š˜q°çŠ¶æ€å€¼å¯ä»¥ä‹É用SHOW STATUS LIKE ‘Open%tables’获得åQ‰ã€‚注意,不能盲目地把table_cache讄¡½®æˆå¾ˆå¤§çš„倹{€‚如果设¾|®å¾—太高åQŒå¯èƒ½ä¼šé€ æˆæ–‡äšg描述½W¦ä¸­‘»I¼Œä»Žè€Œé€ æˆæ€§èƒ½ä¸ç¨³å®šæˆ–者连接失败ã€?

对于æœ?G内存的机器,推荐值是128åQ?56ã€?

½W”者设¾|®table_cache = 256

得到以下状�

Open tables 256
Opened tables 9046

虽然open_tables已经½{‰äºŽtable_cacheåQŒä½†æ˜¯ç›¸å¯¹äºŽæœåŠ¡å™¨è¿è¡Œæ—¶é—´æ¥è¯?已经˜qè¡Œäº?0天,opened_tablesçš„å€ég¹Ÿéžå¸¸ä½Žã€‚因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述å€?那就要考虑增大table_cacheã€?

如果你不需要记å½?˜q›åˆ¶log ž®±æŠŠ˜q™ä¸ªåŠŸèƒ½å…ÏxމåQŒæ³¨æ„å…³æŽ‰ä»¥åŽå°±ä¸èƒ½æ¢å¤å‡ºé—®é¢˜å‰çš„æ•°æ®äº†åQŒéœ€è¦æ‚¨æ‰‹åЍ备䆾åQŒäºŒ˜q›åˆ¶æ—¥å¿—包含所有更新数据的语句åQŒå…¶ç›®çš„æ˜¯åœ¨æ¢å¤æ•°æ®åº“时用它来把数据ž®½å¯èƒ½æ¢å¤åˆ°æœ€åŽçš„状态。另外,如果做同步复åˆ? Replication )的话åQŒä¹Ÿéœ€è¦ä‹É用二˜q›åˆ¶æ—¥å¿—传送修æ”ÒŽƒ…å†üc€?

log_bin指定日志文äšgåQŒå¦‚果不提供文äšg名,MySQLž®†è‡ªå·×ƒñ”生缺省文件名。MySQL会在文äšg名后面自动添加数字引åQŒæ¯‹Æ¡å¯åŠ¨æœåŠ¡æ—¶åQŒéƒ½ä¼šé‡æ–°ç”Ÿæˆä¸€ä¸ªæ–°çš„二˜q›åˆ¶æ–‡äšg。此外,使用log-bin-index可以指定索引文äšgåQ›ä‹É用binlog-do-db可以指定记录的数据库åQ›ä‹É用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-dbå’Œbinlog-ignore-db一‹Æ¡åªæŒ‡å®šä¸€ä¸ªæ•°æ®åº“åQŒæŒ‡å®šå¤šä¸ªæ•°æ®åº“需要多个语句。而且åQŒMySQL会将所有的数据库名¿U°æ”¹æˆå°å†™ï¼Œåœ¨æŒ‡å®šæ•°æ®åº“æ—¶å¿…™åÕd…¨éƒ¨ä‹É用小写名字,否则不会起作用ã€?

å…Ïxމ˜q™ä¸ªåŠŸèƒ½åªéœ€è¦åœ¨ä»–å‰é¢åŠ ä¸?å?

#log-bin

开启慢查询日志( slow query log ) 慢查询日志对于跟ítªæœ‰é—®é¢˜çš„æŸ¥è¯¢éžå¸¸æœ‰ç”¨ã€‚它记录所有查˜q‡long_query_time的查询,如果需要,˜q˜å¯ä»¥è®°å½•不使用索引的记录。下面是一个慢查询日志的例子:

开启慢查询日志åQŒéœ€è¦è®¾¾|®å‚æ•°log_slow_queries、long_query_times、log-queries-not-using-indexesã€?

log_slow_queries指定日志文äšgåQŒå¦‚果不提供文äšg名,MySQLž®†è‡ªå·×ƒñ”生缺省文件名。long_query_times指定慢查询的阈å€û|¼Œ¾~ºçœæ˜?0¿U’。log-queries-not-using-indexesæ˜?.1.0以后引入的参敎ͼŒå®ƒæŒ‡½Cø™®°å½•不使用索引的查询。笔者设¾|®long_query_time=10

½W”者设¾|?

sort_buffer_size = 1M
max_connections=120
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
interactive_timeout=120
thread_concurrency = 4

参数说明:

back_log

要求MySQL能有的连接数量。当主要MySQL¾U¿ç¨‹åœ¨ä¸€ä¸ªå¾ˆçŸ­æ—¶é—´å†…得到非常多的˜qžæŽ¥è¯äh±‚åQŒè¿™ž®Þp“v作用åQŒç„¶åŽä¸»¾U¿ç¨‹èŠ×ƒº›æ—‰™—´(ž®½ç®¡å¾ˆçŸ­)‹‚€æŸ¥è¿žæŽ¥åƈ且启动一个新¾U¿ç¨‹ã€‚back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短旉™—´å†…有很多˜qžæŽ¥åQŒä½ éœ€è¦å¢žåŠ å®ƒåQŒæ¢å¥è¯è¯ß_¼Œ˜q™å€¼å¯¹åˆ°æ¥çš„TCP/IP˜qžæŽ¥çš„侦听队列的大小。你的操作系¾lŸåœ¨˜q™ä¸ªé˜Ÿåˆ—大小上有它自å·Þqš„限制ã€?Unix listen(2)¾pȝ»Ÿè°ƒç”¨çš„æ‰‹å†Œé¡µåº”该有更多的¾l†èŠ‚ã€‚æ£€æŸ¥ä½ çš„OS文档扑ևº˜q™ä¸ªå˜é‡çš„æœ€å¤§å€¹{€‚试图设定back_log高于你的操作¾pȝ»Ÿçš„限制将是无效的ã€?

max_connections

òq¶å‘˜qžæŽ¥æ•°ç›®æœ€å¤§ï¼Œ120 ­‘…过˜q™ä¸ªå€¼å°±ä¼šè‡ªåŠ¨æ¢å¤ï¼Œå‡ÞZº†é—®é¢˜èƒ½è‡ªåŠ¨è§£å†?

thread_cache

没找到具体说明,不过讄¡½®ä¸?2å?20天才创徏äº?00多个¾U¿ç¨‹ 而以前一天就创徏了上千个¾U¿ç¨‹ 所以还是有用的

thread_concurrency

#讄¡½®ä¸ÞZ½ çš„cpuæ•°ç›®x2,例如åQŒåªæœ‰ä¸€ä¸ªcpu,那么thread_concurrency=2
#�个cpu,那么thread_concurrency=4
skip-innodb
#åŽÀLމinnodb支持

代码:

# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /tmp/mysql.sock #socket = /var/lib/mysql/mysql.sock # Here follows entries for some specific programs
# The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock #socket = /var/lib/mysql/mysql.sock skip-locking key_buffer = 128M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 1M net_buffer_length = 16K myisam_sort_buffer_size = 1M max_connections=120 #addnew config wait_timeout =120 back_log=100 read_buffer_size = 1M thread_cache=32 skip-innodb skip-bdb skip-name-resolve join_buffer_size=512k query_cache_size = 32M interactive_timeout=120 long_query_time=10 log_slow_queries= /usr/local/mysql4/logs/slow_query.log query_cache_type= 1 # Try number of CPU's*2 for thread_concurrency thread_concurrency = 4
#end new config # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking
# Replication Master Server (default) # binary logging is required for replication #log-bin
# required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1
# Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, # MASTER_USER=, MASTER_PASSWORD= ; # # where you replace , , by quoted strings and # by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables' values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = # # The username the slave will use for authentication when connecting # to the master - required #master-user = # # The password the slave will authenticate with when connecting to # the master - required #master-password = # # The port the master is listening on. # optional - defaults to 3306 #master-port = # # binary logging - not required for slaves, but recommended #log-bin
# Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname
# Uncomment the following if you are using BDB tables #bdb_cache_size = 4M #bdb_max_lock = 10000
# Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50
[mysqldump] quick max_allowed_packet = 16M
[mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates
[isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M
[myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M
[mysqlhotcopy] interactive-timeout

补充

优化table_cachetable_cache指定表高速缓存的大小。每当MySQL讉K—®ä¸€ä¸ªè¡¨æ—Óž¼Œå¦‚果在表¾~“冲åŒÞZ¸­˜q˜æœ‰½Iºé—´åQŒè¯¥è¡¨å°±è¢«æ‰“å¼€òq¶æ”¾å…¥å…¶ä¸­ï¼Œ˜q™æ ·å¯ä»¥æ›´å¿«åœ°è®¿é—®è¡¨å†…容。通过‹‚€æŸ¥å³°å€¼æ—¶é—´çš„状态值Open_tableså’ŒOpened_tablesåQŒå¯ä»¥å†³å®šæ˜¯å¦éœ€è¦å¢žåŠ table_cache的倹{€‚如果你发现open_tables½{‰äºŽtable_cacheåQŒåƈ且opened_tables在不断增长,那么你就需要增加table_cacheçš„å€égº†åQˆä¸Š˜q°çŠ¶æ€å€¼å¯ä»¥ä‹É用SHOW STATUS LIKE ‘Open%tables’获得åQ‰ã€‚注意,不能盲目地把table_cache讄¡½®æˆå¾ˆå¤§çš„倹{€‚如果设¾|®å¾—太高åQŒå¯èƒ½ä¼šé€ æˆæ–‡äšg描述½W¦ä¸­‘»I¼Œä»Žè€Œé€ æˆæ€§èƒ½ä¸ç¨³å®šæˆ–者连接失败。对于有1G内存的机器,推荐值是128åQ?56ã€?

案例1åQšè¯¥æ¡ˆä¾‹æ¥è‡ªä¸€ä¸ªä¸æ˜¯ç‰¹åˆ«ç¹å¿™çš„æœåС噍table_cache – 512open_tables – 103opened_tables – 1273uptime – 4021421 (measured in seconds)该案例中table_cacheä¼ég¹Žè®„¡½®å¾—太高了。在峰值时é—ß_¼Œæ‰“开表的数目比table_cache要少得多ã€?

案例2åQšè¯¥æ¡ˆä¾‹æ¥è‡ªä¸€å°å¼€å‘服务器。table_cache – 64open_tables – 64opened-tables – 431uptime – 1662790 (measured in seconds)虽然open_tables已经½{‰äºŽtable_cacheåQŒä½†æ˜¯ç›¸å¯¹äºŽæœåŠ¡å™¨è¿è¡Œæ—¶é—´æ¥è¯ß_¼Œopened_tablesçš„å€ég¹Ÿéžå¸¸ä½Žã€‚因此,增加table_cache的值应该用处不大。案ä¾?åQšè¯¥æ¡ˆä¾‹æ¥è‡ªä¸€ä¸ªupderperforming的服务器table_cache – 64open_tables – 64opened_tables – 22423uptime – 19538该案例中table_cache讄¡½®å¾—太低了。虽然运行时间不åˆ?ž®æ—¶åQŒopen_tables辑ֈ°äº†æœ€å¤§å€û|¼Œopened_tablesçš„å€ég¹Ÿéžå¸¸é«˜ã€‚这样就需要增加table_cache的倹{€‚优化key_buffer_sizekey_buffer_size指定索引¾~“冲区的大小åQŒå®ƒå†›_®šç´¢å¼•处理的速度åQŒå°¤å…¶æ˜¯ç´¢å¼•è¯Èš„速度。通过‹‚€æŸ¥çŠ¶æ€å€¼Key_read_requestså’ŒKey_readsåQŒå¯ä»¥çŸ¥é“key_buffer_size讄¡½®æ˜¯å¦åˆç†ã€‚比例key_reads / key_read_requests应该ž®½å¯èƒ½çš„低,臛_°‘æ˜?:100åQ?:1000更好åQˆä¸Š˜q°çŠ¶æ€å€¼å¯ä»¥ä‹É用SHOW STATUS LIKE ‘key_read%’获得åQ‰ã€‚key_buffer_size只对MyISAM表è“v作用。即使你不ä‹É用MyISAM表,但是内部的äÍ时磁盘表是MyISAM表,也要使用该倹{€‚可以ä‹É用检查状态值created_tmp_disk_tables得知详情。对äº?G内存的机器,如果不ä‹É用MyISAM表,推荐值是16MåQ?-64MåQ‰ã€?

案例1åQšå¥åºïLж况key_buffer_size – 402649088 (384M)key_read_requests – 597579931key_reads - 56188案例2åQšè­¦æŠ¥çŠ¶æ€key_buffer_size – 16777216 (16M)key_read_requests – 597579931key_reads - 53832731案例1中比例低äº?:10000åQŒæ˜¯å¥åº·çš„æƒ…况;案例2中比例达åˆ?:11åQŒè­¦æŠ¥å·²¾læ‹‰å“ã€?



]]>
mysql bakuphttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123744.htmlå¼€å…?/dc:creator>å¼€å…?/author>Tue, 12 Jun 2007 18:45:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123744.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/123744.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2007/06/13/123744.html#Feedback1http://www.aygfsteel.com/OpenCloseD/comments/commentRss/123744.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/123744.htmlphpmyadminé‡Œè¾¹ä¸€çœ‹å…¨æ˜¯äØ•ç ?后重新看了mysql 5.0的手å†?发现加了几个character_set_%,不过改了N^2‹Æ¡è¿˜æ˜¯æ²¡èƒ½æžå®?但是用PHP½E‹åºselect出来的却又是正常çš?问题ž®±æ˜¯PHPMyadmin的问题了..

  åœ?strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">phpMyAdmin2.6ä»¥ä¸Šç‰ˆæœ¬å› äØ“æ”¯æŒå¤šè¯­­a€é›†ï¼Œå¼„得我们使用phpMyAdmin½Ž¡ç†æ•°æ®åº“çš„æ—¶å€™ï¼ŒæŸ¥è¯¢å‡ºæ¥çš„ä¸­æ–‡éƒ½æ˜¯äØ•ç ï¼Œä½†æ˜¯åœ¨æˆ‘ä»¬çš„PHP½E‹åºè°ƒç”¨æ—¶å´æ²¡æœ‰˜q™äº›é—®é¢˜ã€?
  看来æ˜?strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">phpMyAdmin2.6的配¾|®æœ‰é—®é¢˜äº†ï¼Œä¸ÞZº†è§£å†³˜q™ä¸ªé—®é¢˜åQŒæˆ‘上google上搜索了相关资料åQŒè¿™¾cȝš„问题很多åQŒä½†æ²¡ä¸€ä¸ªå¯ä»¥è§£å†³çš„åQŒçœŸæ˜¯æ²¡åŠžæ³•åQŒçœ‹æ¥åªæœ‰è‡ªå·±åŠ¨æ‰‹è§£å†³äº†ã€‚ã€‚ã€‚ã€‚ç”±äºŽæŸ¥æ‰¾æºä»£ç ˜q‡ç¨‹éžå¸¸çƒ¦çåQŒç•¥æœ€¾lˆèŠ±äº†åŠå¤©çš„æ—‰™—´åQŒæ€È®—扑ֈ°äº†ä¸€ä¸ªæ¯”较折è¡ïLš„æ–ÒŽ³•来解冟뀂去phpMyAdmin2.6的根目录下,打开以下˜q™ä¸ªæ–‡äšgåQšlibraries/select_lang.lib.php

  1、找到有"zh-gb2312"的那一行,æŠ?zh-gb2312' æ”ÒŽˆ 'zh-gb2312-utf-8'ä¸ÞZ»€ä¹ˆè¿™æ ·åŠ åQŸé‚£æ˜¯å› ä¸ºæœåŠ¡å™¨ä¼šæŠŠæ²¡æœ‰"-utf-8"的语­a€˜q‡æ×o掉,在libraries/database_interface.lib.php ½W?68行,æ ÒŽ®è‹±æ–‡è¯ß_¼š“ä¸ÞZº†é˜²æ­¢æ·äh·†”åQ?<或者如果不æŠ?zh-gb2312' æ”ÒŽˆ 'zh-gb2312-utf-8'åQŒå¯ä»¥åŽ»æŽ‰è¿‡æ»¤å§ã€‚æŠŠé‚£ä¸ªifåŽÀLމž®±OK了ã€?

  2、找åˆ?$mysql_charset_map = array("那一行把'gb2312' => 'gb2312',æ”ÒŽˆ 'gb2312' => 'latin1',保存åQŒOKåQŒåœ¨˜q›å…¥phpMyAdmin½Ž¡ç†åQŒé€‰æ‹©è¯­è¨€chinese simplified(zh-gb2312-utf-8)再看看你的那些中文数据ã€?

  所以说åQŒæˆ‘的这个解军_Šžæ³•å°±åªæ˜¯ä¿®æ”¹libraries/select_lang.lib.php˜q™ä¸€ä¸ªæ–‡ä»‰™‡Œçš„两个字ž®Þp¡ŒåQŒæ¯”è¾ƒæ–¹ä¾¿å¿«æøP¼Œå“ˆå“ˆã€?
ps:˜q™ä¸ªå¸–子的方法非常好用,推荐åQ?/div>

- 作者: FS8C 2006òq?2æœ?9æ—? 星期äº?15:37  回复åQ?åQ?/font> |  引用åQ?åQ?/font> 加入博采

MySQL 备䆾和恢�转脓)

MySQL 备䆾和恢�

MySQL 备䆾和恢�/h1>

作者:叉™‡‘荣(Email:åQ‰ï¼Œæ¥æºåQ?a >http://imysql.cnåQŒè{载请注明译者和出处åQŒåƈ且不能用于商业用途,˜qè€…å¿…½I¶ã€?/span>

日期åQ?006/10/01

本文讨论 MySQL 的备份和恢复机制åQŒä»¥åŠå¦‚何维护数据表åQŒåŒ…括最主要的两¿Uè¡¨¾cÕdž‹åQ?code> å’?åQŒæ–‡ä¸­è®¾è®¡çš„ MySQL 版本ä¸?5.0.22ã€?/p>

目前 MySQL 支持的免费备份工å…ähœ‰åQ?code>åQŒè¿˜å¯ä»¥ç”?SQL 语法˜q›è¡Œå¤‡ä†¾åQ?code> 或è€?åQŒåˆæˆ–者备ä»?code>åQŒè¿˜å¯ä»¥æ˜?code>。MyISAM 表是保存成文件的形式åQŒå› æ­¤ç›¸å¯Òޝ”较容易备份,上面提到的几¿Uæ–¹æ³•都可以使用ã€?code> 所有的表都保存在同一个数据文ä»? 中(也可能是多个文äšgåQŒæˆ–者是独立的表½Iºé—´æ–‡äšgåQ‰ï¼Œç›¸å¯¹æ¥è¯´æ¯”较不好备䆾åQŒå…è´¹çš„æ–ÒŽ¡ˆå¯ä»¥æ˜?code>ã€?code>åQŒæˆ–者用 ã€?/p>

1、mysqldump

1.1 备䆾

是采用SQL¾U§åˆ«çš„备份机åˆÓž¼Œå®ƒå°†æ•°æ®è¡¨å¯¼æˆ?SQL 脚本文äšgåQŒåœ¨ä¸åŒçš?MySQL 版本之间升çñ”时相å¯Òޝ”较合适,˜q™ä¹Ÿæ˜¯æœ€å¸¸ç”¨çš„备份方法ã€?br>现在来讲一ä¸? 的一些主要参敎ͼš

  • --compatible=name

    它告è¯?mysqldumpåQŒå¯¼å‡ºçš„æ•°æ®ž®†å’Œå“ªç§æ•°æ®åº“或哪个旧版本的 MySQL æœåŠ¡å™¨ç›¸å…¼å®¹ã€‚å€¼å¯ä»¥äØ“ ½{‰ï¼Œè¦ä‹É用几个å€û|¼Œç”¨é€—号ž®†å®ƒä»¬éš”开。当然了åQŒå®ƒòq¶ä¸ä¿è¯èƒ½å®Œå…¨å…¼å®¹ï¼Œè€Œæ˜¯ž®½é‡å…¼å®¹ã€?

  • --complete-insertåQ?c

    导出的数据采用包含字ŒDµåçš„完æ•? 方式åQŒä¹Ÿž®±æ˜¯æŠŠæ‰€æœ‰çš„值都写在一行。这么做能提高插入效率,但是可能会受åˆ? 参数的媄响而导致插入失败。因此,需要è°}æ…Žä‹É用该参数åQŒè‡³ž®‘我不推荐ã€?

  • --default-character-set=charset

    指定导出数据旉™‡‡ç”¨ä½•¿Uå­—½W¦é›†åQŒå¦‚果数据表不是采用默认çš? 字符集的话,那么导出时必™åÀLŒ‡å®šè¯¥é€‰é¡¹åQŒå¦åˆ™å†‹Æ¡å¯¼å…¥æ•°æ®åŽž®†äñ”ç”ŸäØ•ç é—®é¢˜ã€?/p>

  • --disable-keys

    告诉 åœ? 语句的开头和¾l“尾增加 å’? 语句åQŒè¿™èƒ½å¤§å¤§æé«˜æ’入语句的速度åQŒå› ä¸ºå®ƒæ˜¯åœ¨æ’入完所有数据后才重建烦引的。该选项只适合 表ã€?/p>

  • --extended-insert = true|false

    默认情况下, å¼€å? 模式åQŒå› æ­¤ä¸æƒ³ç”¨å®ƒçš„的话åQŒå°±ä½¿ç”¨æœ¬é€‰é¡¹åQŒè®¾å®šå®ƒçš„å€égØ“ 卛_¯ã€?

  • --hex-blob

    使用十六˜q›åˆ¶æ ¼å¼å¯¼å‡ºäºŒè¿›åˆ¶å­—½W¦ä¸²å­—段。如果有二进制数据就必须使用本选项。媄响到的字ŒD늱»åž‹æœ‰ ã€?/p>

  • --lock-all-tablesåQ?x

    在开始导å‡ÞZ¹‹å‰ï¼Œæäº¤è¯äh±‚锁定所有数据库中的所有表åQŒä»¥ä¿è¯æ•°æ®çš„一致性。这是一个全局读锁åQŒåƈ且自动关é—? å’? 选项ã€?/p>

  • --lock-tables

    它和 ¾cÖM¼¼åQŒä¸˜q‡æ˜¯é”å®šå½“前导出的数据表åQŒè€Œä¸æ˜¯ä¸€ä¸‹å­é”å®šå…¨éƒ¨åº“下的表。本选项只适用äº? 表,如果æ˜? 表可以用 选项ã€?/p>

  • --no-create-infoåQ?t

    只导出数据,而不æ·ÕdŠ  语句ã€?/p>

  • --no-dataåQ?d

    不导å‡ÞZ“Q何数据,只导出数据库表结构ã€?/p>

  • --opt

    ˜q™åªæ˜¯ä¸€ä¸ªå¿«æ·é€‰é¡¹åQŒç­‰åŒäºŽåŒæ—¶æ·ÕdŠ  选项。本选项能让 很快的导出数据,òq¶ä¸”导出的数据能很快导回。该选项默认开启,但可以用 ¼›ç”¨ã€‚注意,如果˜qè¡Œ 没有指定 æˆ? 选项åQŒåˆ™ä¼šå°†æ•´ä¸ª¾l“果集放在内存中。如果导出大数据库的话可能会出现问题ã€?/p>

  • --quickåQ?q

    该选项在导出大表时很有用,它强åˆ? 从服务器查询取得记录直接输出而不是取得所有记录后ž®†å®ƒä»¬ç¼“存到内存中ã€?/p>

  • --routinesåQ?R

    导出存储˜q‡ç¨‹ä»¥åŠè‡ªå®šä¹‰å‡½æ•°ã€?/p>

  • --single-transaction

    该选项在导出数据之前提交一ä¸? SQL语句åQ?code> 不会é˜Õd¡žä»ÖM½•应用½E‹åºä¸”能保证导出时数据库的一致性状态。它只适用于事务表åQŒä¾‹å¦? å’?ã€?br>本选项å’? 选项是互斥的åQŒå› ä¸? 会ä‹Éä»ÖM½•挂è“v的事务隐含提交ã€?br>要想导出大表的话åQŒåº”¾l“合使用 选项ã€?

  • --triggers

    同时导出触发器。该选项默认启用åQŒç”¨ ¼›ç”¨å®ƒã€?/p>

其他参数详情请参考手册,我通常使用以下 SQL 来备� 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql

使用以下 SQL 来备� 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql

 

1.2 ˜q˜åŽŸ

ç”? 备䆾出来的文件是一个可以直接倒入çš?SQL 脚本åQŒæœ‰ä¸¤ç§æ–ÒŽ³•可以ž®†æ•°æ®å¯¼å…¥ã€?/p>

  • 直接ç”? 客户ç«?

    例如åQ?/p>

    /usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
        

     

  • ç”?SOURCE 语法

    其实˜q™ä¸æ˜¯æ ‡å‡†çš„ SQL 语法åQŒè€Œæ˜¯ 客户端提供的功能åQŒä¾‹å¦‚:

    SOURCE /tmp/db_name.sql;
        

    ˜q™é‡Œéœ€è¦æŒ‡å®šæ–‡ä»¶çš„¾lå¯¹è·¯å¾„åQŒåƈ且必™åÀL˜¯ ˜qè¡Œç”¨æˆ·(例如 nobody)有权限读取的文äšgã€?/p>

2�mysqlhotcopy

2.1 备䆾

是一ä¸?PERL ½E‹åºåQŒæœ€åˆç”±Tim Bunce¾~–写。它使用 å’? æˆ? 来快速备份数据库。它是备份数据库或单个表的最快的途径åQŒä½†å®ƒåªèƒ½è¿è¡Œåœ¨æ•°æ®åº“æ–‡ä»Óž¼ˆåŒ…括数据表定义文件、数据文件、烦引文ä»Óž¼‰æ‰€åœ¨çš„æœºå™¨ä¸Šã€?code> 只能用于备䆾 åQŒåƈ且只能运行在 å’? ¾pȝ»Ÿä¸Šã€?/p>

支持一‹Æ¡æ€§æ‹·è´å¤šä¸ªæ•°æ®åº“åQŒåŒæ—¶è¿˜æ”¯æŒæ­£åˆ™è¡¨è¾¾ã€‚以下是几个例子åQ?/p>

root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp (把数据库目录 db_name 拯‚´åˆ?/tmp ä¸?
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name./regex/ /tmp

更详¾l†çš„使用æ–ÒŽ³•è¯ähŸ¥çœ‹æ‰‹å†Œï¼Œæˆ–者调用下面的命ä×o来查çœ? 的帮助:

perldoc /usr/local/mysql/bin/mysqlhotcopy

注意åQŒæƒ³è¦ä‹Éç”?åQŒå¿…™å»è¦æœ? 权限åQŒåƈ且还必须要能够有è¯Õd– 目录的权限ã€?

2.2 ˜q˜åŽŸ

备䆾出来的是整个数据库目录,使用时可以直接拷贝到 指定çš? (在这里是 )目录下即可,同时要注意权限的问题åQŒå¦‚下例åQ?/p>

root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (ž®?db_name 目录的属ä¸ÀL”¹æˆ?mysqld ˜qè¡Œç”¨æˆ·)

3�SQL 语法备䆾

3.1 备䆾

语法其实å’? 的工作原理差不多åQŒéƒ½æ˜¯é”è¡¨ï¼Œç„¶åŽæ‹¯‚´æ•°æ®æ–‡äšg。它能实现在¾U¿å¤‡ä»½ï¼Œä½†æ˜¯æ•ˆæžœä¸ç†æƒ»I¼Œå› æ­¤ä¸æŽ¨èä‹É用。它只拷贝表¾l“构文äšg和数据文ä»Óž¼Œä¸åŒæ—¶æ‹·è´çƒ¦å¼•æ–‡ä»Óž¼Œå› æ­¤æ¢å¤æ—¶æ¯”较慢ã€?br>例子åQ?/p>

BACK TABLE tbl_name TO '/tmp/db_name/';

注意åQŒå¿…™å»è¦æœ? 权限才能执行本SQLåQŒåƈ且目å½? 必须能被 用户可写åQŒå¯¼å‡ºçš„æ–‡äšg不能覆盖已经存在的文ä»Óž¼Œä»¥é¿å…å®‰å…¨é—®é¢˜ã€?

åˆ™æ˜¯æŠŠæ•°æ®å¯¼å‡ºæ¥æˆäØ“æ™®é€šçš„æ–‡æœ¬æ–‡äšgåQŒå¯ä»¥è‡ªå®šä¹‰å­—段间隔的方式,方便处理˜q™äº›æ•°æ®ã€?br>例子åQ?/p>

SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;

注意åQŒå¿…™å»è¦æœ? 权限才能执行本SQLåQŒåƈ且文ä»? 必须能被 用户可写åQŒå¯¼å‡ºçš„æ–‡äšg不能覆盖已经存在的文ä»Óž¼Œä»¥é¿å…å®‰å…¨é—®é¢˜ã€?

3.2 恢复

ç”? æ–ÒŽ³•备䆾出来的文ä»Óž¼Œå¯ä»¥˜qè¡Œ 语句来恢复数据表ã€?br>例子åQ?/p>

RESTORE TABLE FROM '/tmp/db_name/';

权限要求¾cÖM¼¼ä¸Šé¢æ‰€˜q°ã€?/p>

ç”? æ–ÒŽ³•备䆾出来的文ä»Óž¼Œå¯ä»¥˜qè¡Œ 语句来恢复数据表ã€?br>例子åQ?/p>

LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;

权限要求¾cÖM¼¼ä¸Šé¢æ‰€˜q°ã€‚倒入数据之前åQŒæ•°æ®è¡¨è¦å·²¾lå­˜åœ¨æ‰è¡Œã€‚如果担心数据会发生重复åQŒå¯ä»¥å¢žåŠ? 关键字来替换已有记录或者用 关键字来忽略他们ã€?/p>

4�启用二进制日�binlog)

采用 的方法相å¯ÒŽ¥è¯´æ›´ç‰|´»åQŒçœå¿ƒçœåŠ›ï¼Œè€Œä¸”˜q˜å¯ä»¥æ”¯æŒå¢žé‡å¤‡ä»½ã€?/p>

启用 æ—¶å¿…™å»è¦é‡å¯ 。首先,关闭 åQŒæ‰“å¼€ åQŒåŠ å…¥ä»¥ä¸‹å‡ è¡Œï¼š

server-id	= 1
log-bin		= binlog
log-bin-index	= binlog.index

然后启动 ž®±å¯ä»¥äº†ã€‚运行过½E‹ä¸­ä¼šäñ”ç”? 以及 åQŒå‰é¢çš„æ–‡äšgæ˜? 记录所有对数据的更新操作,后面的文件则是所æœ? 的烦引,都不能轻易删除。关äº? 的信息请查看手册ã€?/p>

需要备份时åQŒå¯ä»¥å…ˆæ‰§è¡Œä¸€ä¸?SQL 语句åQŒè®© ¾lˆæ­¢å¯¹å½“å‰? 的写入,ž®±å¯ä»¥æŠŠæ–‡äšg直接备䆾åQŒè¿™æ ïLš„话就能达到增量备份的目的了:

FLUSH LOGS;

如果是备份复制系¾lŸä¸­çš„从服务器,˜q˜åº”该备ä»? å’? æ–‡äšgã€?

备䆾出来çš? æ–‡äšg可以ç”?MySQL 提供的工å…? 来查看,如:

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001

è¯¥å·¥å…·å…è®æ€½ æ˜„¡¤ºæŒ‡å®šçš„æ•°æ®åº“下的所æœ?SQL 语句åQŒåƈ且还可以限定旉™—´èŒƒå›´åQŒç›¸å½“的方便åQŒè¯¦¾l†çš„è¯ähŸ¥çœ‹æ‰‹å†Œã€?/p>

恢复æ—Óž¼Œå¯ä»¥é‡‡ç”¨¾cÖM¼¼ä»¥ä¸‹è¯­å¥æ¥åšåˆŽÍ¼š

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name

æŠ? 输出çš?SQL è¯­å¥ç›´æŽ¥ä½œäØ“è¾“å…¥æ¥æ‰§è¡Œå®ƒã€?/p>

如果你有½Iºé—²çš„æœºå™¨ï¼Œä¸å¦¨é‡‡ç”¨˜q™ç§æ–¹å¼æ¥å¤‡ä»½ã€‚由于作ä¸? 的机器性能要求相对不是那么高,因此成本低,用低成本ž®Þpƒ½å®žçŽ°å¢žé‡å¤‡ä†¾è€Œä¸”˜q˜èƒ½åˆ†æ‹…一部分数据查询压力åQŒä½•乐而不为呢åQ?/p>

5ã€?直接备䆾数据文äšg

相较前几¿Uæ–¹æ³•,备䆾数据文äšg最为直接、快速、方便,¾~ºç‚¹æ˜¯åŸºæœ¬ä¸Šä¸èƒ½å®žçŽ°å¢žé‡å¤‡ä†¾ã€‚äØ“äº†ä¿è¯æ•°æ®çš„ä¸€è‡´æ€§ï¼Œéœ€è¦åœ¨é èƒŒæ–‡äšg前,执行以下 SQL 语句åQ?/p>

FLUSH TABLES WITH READ LOCK;

也就是把内存中的数据都刷新到¼‚ç›˜ä¸­ï¼ŒåŒæ—¶é”å®šæ•°æ®è¡¨ï¼Œä»¥ä¿è¯æ‹·è´è¿‡½E‹ä¸­ä¸ä¼šæœ‰æ–°çš„æ•°æ®å†™å…¥ã€‚è¿™¿Uæ–¹æ³•备份出来的数据恢复也很½Ž€å•,直接拯‚´å›žåŽŸæ¥çš„æ•°æ®åº“ç›®å½•ä¸‹å›_¯ã€?/p>

注意åQŒå¯¹äº? ¾cÕdž‹è¡¨æ¥è¯ß_¼Œ˜q˜éœ€è¦å¤‡ä»½å…¶æ—¥å¿—æ–‡äšgåQŒå³ æ–‡äšg。因为当 表损坏时åQŒå°±å¯ä»¥ä¾é ˜q™äº›æ—¥å¿—æ–‡äšg来恢复ã€?/p>

6ã€?备䆾½{–ç•¥

对于中等¾U§åˆ«ä¸šåŠ¡é‡çš„¾pȝ»Ÿæ¥è¯´åQŒå¤‡ä»½ç­–略可以这么定åQšç¬¬ä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œæ¯å¤©ä¸€‹Æ¡å¢žé‡å¤‡ä»½ï¼Œæ¯å‘¨å†åšä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œå¦‚此一直重复。而对于重要的且繁忙的¾pȝ»Ÿæ¥è¯´åQŒåˆ™å¯èƒ½éœ€è¦æ¯å¤©ä¸€‹Æ¡å…¨é‡å¤‡ä»½ï¼Œæ¯å°æ—¶ä¸€‹Æ¡å¢žé‡å¤‡ä»½ï¼Œç”šè‡³æ›´é¢‘¾Jã€‚äØ“äº†ä¸å½±å“¾U¿ä¸Šä¸šåŠ¡åQŒå®žçŽ°åœ¨¾U¿å¤‡ä»½ï¼Œòq¶ä¸”能增量备份,最好的办法ž®±æ˜¯é‡‡ç”¨ä¸ÖM»Žå¤åˆ¶æœºåˆ¶()åQŒåœ¨ 机器上做备䆾ã€?/p>

7ã€?数据¾l´æŠ¤å’Œç¾é𾿁¢å¤?/h3>

ä½œäØ“ä¸€åDBA(我目前还不是åQŒå‘µå‘?åQŒæœ€é‡è¦çš„工作内容之一是保证数据表能安全、稳定、高速ä‹É用。因此,需要定期维护你的数据表。以ä¸?SQL 语句ž®±å¾ˆæœ‰ç”¨åQ?/p>

CHECK TABLE æˆ?REPAIR TABLEåQŒæ£€æŸ¥æˆ–¾l´æŠ¤ MyISAM è¡?
OPTIMIZE TABLEåQŒä¼˜åŒ?MyISAM è¡?
ANALYZE TABLEåQŒåˆ†æž?MyISAM è¡?

当然了,上面˜q™äº›å‘½ä×o起始都可以通过工具 来完成,在这里不作详˜q°ã€?/p>

表则可以通过执行以下语句来整理碎片,提高索引速度åQ?/p>

ALTER TABLE tbl_name ENGINE = Innodb;

˜q™å…¶å®žæ˜¯ä¸€ä¸? 操作åQŒè¡¨é¢ä¸Šçœ‹ä»€ä¹ˆä¹Ÿä¸åšåQŒå®žé™…上重新整理¼„Žç‰‡äº†ã€?/p>

通常使用çš? 表可以用上面提到的恢复方法来完成。如果是索引坏了åQŒå¯ä»¥ç”¨ 工具来重建烦引。而对äº? 表来è¯ß_¼Œž®±æ²¡˜q™ä¹ˆç›´æŽ¥äº†ï¼Œå› äؓ它把所有的表都保存在一个表½Iºé—´äº†ã€‚不˜q? 有一个检查机制叫 åQŒåªè¦ä¿å­˜äº†æ—¥å¿—æ–‡äšgåQŒå°±èƒ½æ ¹æ®æ—¥å¿—文件来修复错误。可以在 æ–‡äšg中,增加以下参数åQŒè®© 在启动时自动‹‚€æŸ¥æ—¥å¿—æ–‡ä»Óž¼š

innodb_force_recovery	= 4

关于该参数的信息è¯ähŸ¥çœ‹æ‰‹å†Œã€?/p>

8ã€?æ€È»“

做好数据备䆾åQŒå®šåªå¥½åˆé€‚的备䆾½{–ç•¥åQŒè¿™æ˜¯ä¸€ä¸ªDBA所做事情的一ž®éƒ¨åˆ†ï¼Œä¸‡äº‹å¼€å¤´éš¾åQŒå°±ä»ŽçŽ°åœ¨å¼€å§‹å§åQ?/p>



]]>取一个字½W¦ä¸²çš„第一个字æ¯?/title><link>http://www.aygfsteel.com/OpenCloseD/archive/2007/06/08/122754.html</link><dc:creator>å¼€å…?/dc:creator><author>å¼€å…?/author><pubDate>Thu, 07 Jun 2007 17:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/OpenCloseD/archive/2007/06/08/122754.html</guid><wfw:comment>http://www.aygfsteel.com/OpenCloseD/comments/122754.html</wfw:comment><comments>http://www.aygfsteel.com/OpenCloseD/archive/2007/06/08/122754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/OpenCloseD/comments/commentRss/122754.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/OpenCloseD/services/trackbacks/122754.html</trackback:ping><description><![CDATA[<p style="COLOR: #ffcc00"> </p> public static void main(String[] args) {<br>  // TODO Auto-generated method stub<br>  String aa="%.,.,2xb1bfsdfasfaarytjetyjj.,,";<br>   int pos=isLetter(aa);<br>  aa=aa.substring(pos,pos+1);<br>        System.out.println(aa);<br> }<br> public   static   int   isLetter(String   validString){   <br>        byte[]   tempbyte=validString.getBytes(); <br>        int pos=0;<br>        for( int  i=0;i<validString.length();i++)  <br>        {   <br>              byte  by=tempbyte[i];   <br>                if((by>=65)&&(by<=90)||((by>=97)&&(by<=122)))   {   <br>                  <br>                 break;<br>                   <br>                }   <br>                pos++;  <br>        }  <br>       <br>        return   pos;   <br>    }<br> <br><br><br><br><br><br>判断是否为数字组成的字串   <br>    <br>      public   static   boolean   isNumber(String   validString){   <br>              byte[]   tempbyte=validString.getBytes();   <br>              for(int   i=0;i<validString.length();i++)   {   <br>                      //by=tempbyte[i];   <br>                      if((tempbyte[i]<48)||(tempbyte[i]>57)){   <br>                              return   false;   <br>                      }   <br>              }   <br>              return   true;   <br>      }   <br>    <br>  åˆ¤æ–­å­—ç¬¦ä¸²æ˜¯å¦äØ“åªåŒ…æ‹¬å­—æ¯å’Œæ•°å­—   <br>    <br>      public   static   boolean   isChar(String   validString){   <br>              byte[]   tempbyte=validString.getBytes();   <br>              for(int   i=0;i<validString.length();i++)   {   <br>                      //     by=tempbyte[i];   <br>                      if((tempbyte[i]<48)||((tempbyte[i]>57)&(tempbyte[i]<65))||(tempbyte[i]>122)||((tempbyte[i]>90)&(tempbyte[i]<97)))   {   <br>                              return   false;   <br>                      }   <br>              }   <br>              return   true;   <br>      }   <br>    <br>    <br>  判断字符串是否只包括字母   <br>    <br>      public   static   boolean   isLetter(String   validString){   <br>          byte[]   tempbyte=validString.getBytes();   <br>          for(int   i=0;i<validString.length();i++)   {   <br>                  //by=tempbyte[i];   <br>                  if((tempbyte[i]<65)||(tempbyte[i]>122)||((tempbyte[i]>90)&(tempbyte[i]<97)))   {   <br>                          return   false;   <br>                  }   <br>          }   <br>          return   true;   <br>      }<br><br>目前计算æœÞZ¸­ç”¨å¾—最òq¿æ³›çš„å­—½W¦é›†åŠå…¶¾~–码åQŒæ˜¯ç”Þq¾Žå›½å›½å®¶æ ‡å‡†å±€(ANSI)制定的ASCII码(American Standard Code for Information InterchangeåQŒç¾Žå›½æ ‡å‡†ä¿¡æ¯äº¤æ¢ç åQ‰ï¼Œå®ƒå·²è¢«å›½é™…标准化¾l„织åQˆISOåQ‰å®šä¸ºå›½é™…标准,¿UîCØ“ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码å’?位码两种形式ã€?<br><br>因䨓1位二˜q›åˆ¶æ•°å¯ä»¥è¡¨½Cºï¼ˆ21=åQ?¿UçŠ¶æ€ï¼š0ã€?åQ›è€?位二˜q›åˆ¶æ•°å¯ä»¥è¡¨½Cºï¼ˆ22åQ?4¿UçŠ¶æ€ï¼š00ã€?1ã€?0ã€?1åQ›ä¾‹Æ¡ç±»æŽ¨ï¼Œ7位二˜q›åˆ¶æ•°å¯ä»¥è¡¨½Cºï¼ˆ27=åQ?28¿UçŠ¶æ€ï¼Œæ¯ç§çŠ¶æ€éƒ½å”¯ä¸€åœ°ç¼–ä¸ÞZ¸€ä¸?位的二进制码åQŒå¯¹åº”一个字½W¦ï¼ˆæˆ–控制码åQ‰ï¼Œ˜q™äº›ç å¯ä»¥æŽ’列成一个十˜q›åˆ¶åºå·0ï½?27。所以,7位ASCII码是用七位二˜q›åˆ¶æ•°è¿›è¡Œç¼–码的åQŒå¯ä»¥è¡¨½C?28个字½W¦ã€?<br><br>½W?ï½?2号及½W?27å?å…?4ä¸?是控制字½W¦æˆ–通讯专用字符åQŒå¦‚控制½W¦ï¼šLFåQˆæ¢è¡Œï¼‰ã€CRåQˆå›žè½¦ï¼‰ã€FFåQˆæ¢™åµï¼‰ã€DELåQˆåˆ é™¤ï¼‰ã€BELåQˆæŒ¯é“ƒï¼‰½{‰ï¼› <br>通讯专用字符åQšSOHåQˆæ–‡å¤ß_¼‰ã€EOTåQˆæ–‡ž®¾ï¼‰ã€ACKåQˆç¡®è®¤ï¼‰½{‰ï¼› <br><br>½W?3ï½?26å?å…?4ä¸?是字½W¦ï¼Œå…¶ä¸­½W?8ï½?7å·äØ“0ï½?十个阿拉伯数字;65ï½?0å·äØ“26个大写英文字母,97ï½?22å·äØ“26个小写英文字母,其余ä¸ÞZ¸€äº›æ ‡ç‚¹ç¬¦å—÷€è¿½Ž—符åïL­‰ã€?<br><br>注意åQšåœ¨è®¡ç®—机的存储单元中,一个ASCII码值占一个字èŠ?8个二˜q›åˆ¶ä½?åQŒå…¶æœ€é«˜ä½(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过½E‹ä¸­ç”¨æ¥‹‚€éªŒæ˜¯å¦å‡ºçŽ°é”™è¯¯çš„ä¸€¿Uæ–¹æ³•,一般分奇校验和偶校验两¿Uã€‚奇校验规定åQšæ­£¼‹®çš„代码一个字节中1的个数必™åÀL˜¯å¥‡æ•°åQŒè‹¥éžå¥‡æ•ŽÍ¼Œåˆ™åœ¨æœ€é«˜ä½b7æ·?åQ›å¶æ ¡éªŒè§„定åQšæ­£¼‹®çš„代码一个字节中1的个数必™åÀL˜¯å¶æ•°åQŒè‹¥éžå¶æ•ŽÍ¼Œåˆ™åœ¨æœ€é«˜ä½b7æ·?ã€?<br><br><br>Unicode码:Unicode码也是一¿Uå›½é™…标准编码,采用二个字节¾~–码åQŒä¸ŽANSI码不兼容。目前,在网¾lœã€Windows¾pȝ»Ÿå’Œå¾ˆå¤šå¤§åž‹èÊY件中得到应用ã€?br> <img src ="http://www.aygfsteel.com/OpenCloseD/aggbug/122754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/OpenCloseD/" target="_blank">å¼€å…?/a> 2007-06-08 01:22 <a href="http://www.aygfsteel.com/OpenCloseD/archive/2007/06/08/122754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java打包发布http://www.aygfsteel.com/OpenCloseD/archive/2006/11/14/81065.htmlå¼€å…?/dc:creator>å¼€å…?/author>Tue, 14 Nov 2006 02:21:00 GMThttp://www.aygfsteel.com/OpenCloseD/archive/2006/11/14/81065.htmlhttp://www.aygfsteel.com/OpenCloseD/comments/81065.htmlhttp://www.aygfsteel.com/OpenCloseD/archive/2006/11/14/81065.html#Feedback0http://www.aygfsteel.com/OpenCloseD/comments/commentRss/81065.htmlhttp://www.aygfsteel.com/OpenCloseD/services/trackbacks/81065.html 打包发布

ä¸ÞZ»€ä¹ˆä¼šæœ‰è¿™ä¸ªçŽ©æ„å‘¢åQŒé¦–先,˜q™æ˜¯jar的全¿UŽÍ¼šJavaTM Archive (JAR) fileåQŒæ˜¯çš„,ž®±æ˜¯java存档文äšg。这有点¾cÖM¼¼zipæ–‡äšgåQŒæƒ³ä¸€æƒ›_®ƒæ˜¯å¹²ä»€ä¹ˆçš„用的呢,压羃åQï¼Ÿæ²¡é”™ž®±æ˜¯è¦åŽ‹¾~©ï¼Œž®†æˆ‘们原先零散的东西攑ֈ°ä¸€ä¸‹ï¼Œé‡æ–°¾l„织åQŒæ‰€æœ‰è¿™äº›ç›®çš„只有一个:方便åQå¥½äº†ï¼Œä¸ç”¨½Ž¡ä»–是怎么压羃的,我们的重ç‚ÒŽ˜¯å“ªäº›æ˜¯æˆ‘们要压羃çš?输入)åQŒè¿˜æœ‰åŽ‹¾~©æˆäº†ä»€ä¹?输出)åQŒè¿›è€Œå°†å®ƒå‘å¸?部çÖv)ã€?

那我们的输入(要压¾~©çš„东西)主要是classæ–‡äšgåQŒè¿˜æœ‰è¾…助的资源(˜q™å…¶ä¸­å¯èƒ½æœ‰å›„¡‰‡åQŒjspæ–‡äšgåQŒhtmlæ–‡äšg½{‰ç­‰)。Jar技术在jdk1.1版本中就已存在,åœ?.2中又有了增强。接下来说说jar的好处吧åQŒè¿™æ˜¯å®˜æ–¹çš„æè¿°åQšå®‰å…¨ï¼Œå¿«é€Ÿä¸‹è½½ï¼ŒåŽ‹ç¾ƒåQŒçŒŽå–包åQŒç‰ˆæœ¬åŒ–包,可携ã€?

说了˜q™ä¹ˆå¤šï¼Œæˆ‘们现在开始实施ã€?

先打开命ä×o提示½W?win2000或在˜qè¡Œ½{é‡Œæ‰§è¡Œcmd命ä×oåQŒwin98为DOS提示½W?åQŒè¾“å…¥jar –help,然后回èžR(如果你盘上已¾læœ‰äº†jdk1.1或以上版æœ?åQŒçœ‹åˆîC»€ä¹ˆï¼š

用法åQšjar {ctxu}[vfm0Mi] [jar-æ–‡äšg] [manifest-æ–‡äšg] [-C 目录] æ–‡äšgå?...

选项åQ?

-c 创徏新的存档
-t 列出存档内容的列�
-x 展开存档中的命名的(或所有的〕文ä»?
-u 更新已存在的存档
-v 生成详细输出到标准输å‡ÞZ¸Š
-f 指定存档文äšgå?
-m 包含来自标明文äšg的标明信æ?
-0 只存储方式;未用ZIP压羃格式
-M 不äñ”生所有项的清单(manifest〕文ä»?
-i 为指定的jaræ–‡äšg产生索引信息
-C 改变到指定的目录åQŒåƈ且包含下列文ä»Óž¼š

如果一个文件名是一个目录,它将被递归处理�

清单åQˆmanifest〕文件名和存档文件名都需要被指定åQŒæŒ‰'m' å’?'f'标志指定的相同顺序ã€?

½CÞZ¾‹1åQšå°†ä¸¤ä¸ªclassæ–‡äšg存档åˆîC¸€ä¸ªåä¸?'classes.jar' 的存档文件中åQ?
jar cvf classes.jar Foo.class Bar.class

½CÞZ¾‹2åQšç”¨ä¸€ä¸ªå­˜åœ¨çš„æ¸…单åQˆmanifeståQ‰æ–‡ä»?'mymanifest' ž®?foo/ 目录下的所有文件存档到一个名ä¸?'classes.jar' 的存档文件中åQ?
jar cvfm classes.jar mymanifest -C foo/ .

来个ž®ä¾‹å­è¯•试看åQ?
我们只有一个HelloWorldåQŒå¦‚下:

public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hi, Hello World!�;
}
}



我将˜q™ä¸ªjavaæ–‡äšg存到C盘跟目录下,okåQŒæŽ¥ä¸‹æ¥åQ?

在先前打开的命令提½Cºç¬¦ä¸?è·Œ™{到C盘提½Cºç¬¦ä¸?åQŒæˆ‘们输入javac HelloWorld.javaåQŒç„¶åŽç‘ô¾l­è¾“入:jar cvf hello.jar HelloWorld.classåQŒå›žè½¦åŽåŽÖM½ çš„C盘看看,多了什么,没错 hello.jar ã€?

基本的步骤我们现在都知道了,你可以自己去ž®è¯•一下随着jar后面的参数的不同åQŒç»“果有什么变化ã€?

紧接着我们看看如何˜qè¡Œæˆ‘们的jar包ã€?

在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢åQŒMETA-INF目录åQŸå†çœ‹çœ‹é‡Œé¢æ˜¯ä»€ä¹ˆï¼Œ˜q˜æœ‰ä¸€ä¸ªMANIFEST.MFæ–‡äšg是不是?用文本编辑器(我这里是UltraEdit)打开它看看:
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)

ž®±æ˜¯˜q™æ ·ã€‚这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类åQŒä¹Ÿž®±æ˜¯æˆ‘们的入口类。也卻I¼Œ
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Main-Class: HelloWorld

接下来,我们在命令提½Cºç¬¦é‡Œæ‰§è¡Œï¼š
jar umf MANIFEST.MF app.jar

˜q™æ ·æˆ‘们使用了我们自å·Þqš„MANIFEST.MFæ–‡äšg对原来默认的˜q›è¡Œäº†æ›´æ–°ã€‚你不妨可以再进åŽÈœ‹çœ‹æ˜¯ä¸æ˜¯æ·ÖM¸Šäº†Main-Class: HelloWorld˜q™ä¸€å¥ã€?

OkåQŒè¿™ä¸ªæœ€åŽçš„一步了åQŒæ¥éªŒè¯æˆ‘们做的一切,在命令提½Cºç¬¦ä¸­è¾“入:
java -jar hello.jar(执行)

出现了什么,――Hi, Hello World!
我们再来看看jaræ–‡äšg在tomcat中发布,注意åQšåœ¨tomcat中我们就不能再用jar˜q™ç§æ ¼å¼åQŒè€Œæ”¹war格式åQŒå®ƒæ˜¯ä¸“门用于web应用的,其实整个˜q‡ç¨‹ä¸‹æ¥åŸºæœ¬ä¸Šå’Œjar是类似的åQ?

先准备我们要打包的资源�

扑ֈ°å­˜æ”¾tomcatçš„webapps目录åQŒè¿›åˆ°å…¶ä¸­ï¼Œæ–°å¾ä¸€ä¸ªæ–‡ä»¶å¤¹åQŒè¿™é‡Œå‘½åäØ“helloåQŒå†˜q›åŽ»æ–°å¾WEB-INFæ–‡äšg夹,再进åŽÀL–°å»ºclassesæ–‡äšg夹,此时我们也将我们唯一的servletåQŒHelloWorld.java攑ֈ°˜q™é‡ŒåQŒåœ¨ä¸Žclasses目录同çñ”下徏立一文äšgweb.xml。OkåQŒç›®å‰æˆ‘们初步徏立了一个简单的web应用。Â?br />
在命令提½Cºç¬¦ä¸‹è¿›åˆ°å…ˆå‰åˆ›åˆ¶çš„hello目录下,执行 jar cvf hello.war * åQŒæˆ‘们便得到hello.war。将它拷贝至webapps目录下,okåQŒæ¥çœ‹æœ€åŽä¸€æ­¥ï¼Œæ‰“å¼€tomcat的目录conf中的server.xmlåQŒåŠ å…¥ï¼š
reloadable="true"/>
大功告成åQè¿è¡Œå®ƒåQŒå¯åЍtomcatåQŒåŽåœ¨æµè§ˆå™¨ä¸­è¾“å…¥http://localhost:8080/hello/HelloWorldåQŒæœ‰äº†å—åQ?

好了åQŒå°±˜q™ä¹ˆå¤šï¼Œå¸Œæœ›å¯¹ä½ æœ‰ç‚¹å¸®åŠ©ã€?/font>


补充åQ?
############

jar基本操作åQ?

############

1. 创徏jaræ–‡äšg
jar cf jar-file input-file(s)
c---want to Create a JAR file.
f---want the output to go to a file rather than to stdout.
eg: 1)jar cf myjar.jar query_maintain_insert.htm
2)jar cvf myjar.jar query_maintain_insert.htm
v---Produces verbose(详细� output.
3)jar cvf myjar.jar query_maintain_insert.htm mydirectory
4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory
0---don't want the JAR file to be compressed.
5)jar cmf MANIFEST.MF myjar.jar yahh.txt
m---Used to include manifest information from an existing manifest file.
6)jar cMf MANIFEST.MF myjar.jar yahh.txt
M---the default manifest file should not be produced.
7)jar cvf myjar.jar *
*---create all contents in current directory.
2. 察看jaræ–‡äšg
jar tf jar-file
t---want to view the Table of contents of the JAR file.
eg: 1)jar vft yahh.jar
v---Produces verbose(详细� output.
3. 提取jaræ–‡äšg
jar xf jar-file [archived-file(s)]
x---want to extract files from the JAR archive.
eg: 1)jar xf yahh.jar yahh.txt(仅提取文件yahh.txt)
2)jar xf yahh.jar alex/yahhalex.txt(仅提取目录alex下的文äšgyahhalex.txt)
3)jar xf yahh.jar(提取该jar包中的所有文件或目录)
4. 修改Manifestæ–‡äšg
jar cmf manifest-addition jar-file input-file(s)
m---Used to include manifest information from an existing manifest file.

5. æ›´æ–°jaræ–‡äšg

jar uf jar-file input-file(s)
u---want to update an existing JAR file.  



]]>
ORACLE触发å™?/title><link>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/16/75331.html</link><dc:creator>å¼€å…?/dc:creator><author>å¼€å…?/author><pubDate>Sun, 15 Oct 2006 17:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/16/75331.html</guid><wfw:comment>http://www.aygfsteel.com/OpenCloseD/comments/75331.html</wfw:comment><comments>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/16/75331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/OpenCloseD/comments/commentRss/75331.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/OpenCloseD/services/trackbacks/75331.html</trackback:ping><description><![CDATA[ <p> <font color="#deb887">触发器是一¿Uç‰¹ŒDŠçš„存储˜q‡ç¨‹åQŒå®ƒåœ¨æ’入,删除或修改特定表中的数据时触发执行,它比数据库本íw«æ ‡å‡†çš„功能有更¾_„¡»†å’Œæ›´å¤æ‚的数据控制能力。数据库触发器有以下的作用:</font> </p> <p> <font color="#deb887">* 安全性。可以基于数据库的å€ég‹É用户å…ähœ‰æ“ä½œæ•°æ®åº“的某种权利ã€?/font> </p> <p> <font color="#deb887"># 可以åŸÞZºŽæ—‰™—´é™åˆ¶ç”¨æˆ·çš„æ“ä½œï¼Œä¾‹å¦‚ä¸å…è®æ€¸‹ç­åŽå’ŒèŠ‚å‡æ—¥ä¿®æ”¹æ•°æ®åº“æ•°æ®ã€?/font> </p> <p> <font color="#deb887"># 可以åŸÞZºŽæ•°æ®åº“中的数据限制用æˆïLš„æ“ä½œåQŒä¾‹å¦‚不允许股票的ä­h格的升幅一‹Æ¡è¶…˜q?0%ã€?/font> </p> <p> <font color="#deb887">* 审计。可以跟ítªç”¨æˆ·å¯¹æ•°æ®åº“的操作ã€?/font> </p> <p> <font color="#deb887"># 审计用户操作数据库的语句ã€?/font> </p> <p> <font color="#deb887"># 把用户对数据库的更新写入审计表ã€?/font> </p> <p> <font color="#deb887">* 实现复杂的数据完整性规则ã€?/font> </p> <p> <font color="#deb887"># 实现非标准的数据完整性检查和¾U¦æŸã€‚触发器可äñ”ç”Ÿæ¯”è§„åˆ™æ›´äØ“å¤æ‚çš„é™åˆ¶ã€‚ä¸Žè§„åˆ™ä¸åŒåQŒè§¦å‘器可以引用列或数据库对象。例如,触发器可回退ä»ÖM½•企图吃进­‘…过自己保证金的期货ã€?/font> </p> <p> <font color="#deb887"># 提供可变的缺省倹{€?/font> </p> <p> <font color="#deb887">* 实现复杂的非标准的数据库相关完整性规则。触发器可以å¯ÒŽ•°æ®åº“中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行ã€?/font> </p> <p> <font color="#deb887"># 在修æ”ÒŽˆ–删除时çñ”联修æ”ÒŽˆ–删除其它表中的与之匹配的行ã€?/font> </p> <p> <font color="#deb887"># 在修æ”ÒŽˆ–删除时把其它表中的与之匹配的行设成NULL倹{€?/font> </p> <p> <font color="#deb887"># 在修æ”ÒŽˆ–删除时把其它表中的与之匹配的行çñ”联设成缺省倹{€?/font> </p> <p> <font color="#deb887"># 触发器能够拒¾læˆ–回退那些破坏相关完整性的变化åQŒå–消试图进行数据更新的事务。当插入一个与其主健不匚w…çš„外部键æ—Óž¼Œ˜q™ç§è§¦å‘器会起作用。例如,可以在books.author_code列上生成一个插入触发器åQŒå¦‚果新å€ég¸Žauths.author_code列中的某å€ég¸åŒšw…æ—Óž¼Œæ’入被回退ã€?/font> </p> <p> <font color="#deb887">* 同步实时地复制表中的数据ã€?/font> </p> <p> <font color="#deb887">* 自动计算数据å€û|¼Œå¦‚æžœæ•°æ®çš„å€ÆD¾¾åˆîCº†ä¸€å®šçš„要求åQŒåˆ™˜q›è¡Œç‰¹å®šçš„处理。例如,如果公司的帐号上的资金低äº?万元则立即给财务人员发送警告数据ã€?/font> </p> <p> <font color="#deb887">ORACLE与SYBASE数据库的触发器有一定的区别åQŒä¸‹é¢å°†åˆ†åˆ«è®²è¿°˜q™ä¸¤¿Uæ•°æ®åº“触发器的作用和写法ã€?/font> </p> <p> <font color="#deb887">äº?ORACLE 触发å™?/font> </p> <p> <font color="#deb887">ORACLEäº§ç”Ÿæ•°æ®åº“è§¦å‘å™¨çš„è¯­æ³•äØ“åQ?/font> </p> <p> <font color="#deb887">create [or replace] trigger 触发器名 触发旉™—´ 触发事äšg</font> </p> <p> <font color="#deb887">on 表名</font> </p> <p> <font color="#deb887">[for each row]</font> </p> <p> <font color="#deb887">pl/sql 语句</font> </p> <p> <font color="#deb887">其中åQ?/font> </p> <p> <font color="#deb887">触发器名åQšè§¦å‘器对象的名¿U°ã€‚由于触发器是数据库自动执行的,因此该名¿U°åªæ˜¯ä¸€ä¸ªå¿UŽÍ¼Œæ²¡æœ‰å®žè´¨çš„用途ã€?/font> </p> <p> <font color="#deb887">触发旉™—´åQšæŒ‡æ˜Žè§¦å‘å™¨ä½•æ—¶æ‰§è¡ŒåQŒè¯¥å€¼å¯å–:</font> </p> <p> <font color="#deb887">before---表示在数据库动作之前触发器执行;</font> </p> <p> <font color="#deb887">after---表示在数据库动作之后出发器执行ã€?/font> </p> <p> <font color="#deb887">触发事äšgåQšæŒ‡æ˜Žå“ªäº›æ•°æ®åº“åŠ¨ä½œä¼šè§¦å‘æ­¤è§¦å‘å™¨ï¼š</font> </p> <p> <font color="#deb887">insertåQšæ•°æ®åº“æ’å…¥ä¼šè§¦å‘æ­¤è§¦å‘å™¨ï¼›</font> </p> <p> <font color="#deb887">updateåQšæ•°æ®åº“ä¿®æ”¹ä¼šè§¦å‘æ­¤è§¦å‘å™¨ï¼›</font> </p> <p> <font color="#deb887">deleteåQšæ•°æ®åº“åˆ é™¤ä¼šè§¦å‘æ­¤è§¦å‘å™¨ã€?/font> </p> <p> <font color="#deb887">è¡?名:数据库触发器所在的表ã€?/font> </p> <p> <font color="#deb887">for each rowåQšå¯¹è¡¨çš„æ¯ä¸€è¡Œè§¦å‘器执行一‹Æ¡ã€‚如果没有这一选项åQŒåˆ™åªå¯¹æ•´ä¸ªè¡¨æ‰§è¡Œä¸€‹Æ¡ã€?/font> </p> <p> <font color="#deb887">举例åQšä¸‹é¢çš„触发器在更新表auths之前触发åQŒç›®çš„æ˜¯ä¸å…è®¸åœ¨å‘¨æœ«ä¿®æ”¹è¡¨ï¼š</font> </p> <p> <font color="#deb887">create trigger auth_secure</font> </p> <p> <font color="#deb887">before insert or update or delete //å¯ÒŽ•´è¡¨æ›´æ–°å‰è§¦å‘</font> </p> <p> <font color="#deb887">on auths</font> </p> <p> <font color="#deb887">begin</font> </p> <p> <font color="#deb887">if(to_char(sysdate,'DY')='SUN'</font> </p> <p> <font color="#deb887">RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');</font> </p> <p> <font color="#deb887">end if;</font> </p> <p> <font color="#deb887">end</font> </p> <p> <font color="#deb887">ä¸?SYBASE数据库触发器</font> </p> <p> <font color="#deb887">SYBASE数据库触发器的作用与ORACLE非常¾cÖM¼¼åQŒä»…有较ž®çš„差异ã€?/font> </p> <p> <font color="#deb887">SYBASE产生触发器的语法为:</font> </p> <p> <font color="#deb887">CREATE TRIGGER 触发器名</font> </p> <p> <font color="#deb887">ON 表名</font> </p> <p> <font color="#deb887">FOR INSERTåQŒUPDATEåQŒDELETE</font> </p> <p> <font color="#deb887">AS</font> </p> <p> <font color="#deb887">SQL_statement |</font> </p> <p> <font color="#deb887">FOR INSERTåQŒUPDATE</font> </p> <p> <font color="#deb887">AS</font> </p> <p> <font color="#deb887">IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...</font> </p> <p> <font color="#deb887">SQL_statements</font> </p> <p> <font color="#deb887">上面FOR子句用来指定在触发器上的哪些数据更新命ä×o可激‹z»è¯¥è§¦å‘器。IF UPDATE子句‹‚€æŸ¥å¯¹æŒ‡å®šåˆ—的操作¾cÕdž‹åQŒåœ¨IF UPDATE子句中可指定多个列ã€?/font> </p> <p> <font color="#deb887">与ORACLE不同åQŒå¯¹äºŽæ¯æ¡SQL语句åQŒè§¦å‘器只执行一‹Æ¡ã€‚触发器在数据更新语句完成以后立åÏx‰§è¡Œã€‚触发器和启动它的语句被当作一个事务处理,事务可以在触发器中回退ã€?/font> </p> <p> <font color="#deb887">下面举例说明SYBASE触发器的写法ã€?/font> </p> <p> <font color="#deb887">create trigger forinsert_books</font> </p> <p> <font color="#deb887">on books</font> </p> <p> <font color="#deb887">for insert</font> </p> <p> <font color="#deb887">as</font> </p> <p> <font color="#deb887">if(select count(*) from auths,inserted</font> </p> <p> <font color="#deb887">where auths.author_code=insert.author_code)!=@@rowcount</font> </p> <p> <font color="#deb887">begin</font> </p> <p> <font color="#deb887">rollback transaction</font> </p> <p> <font color="#deb887">print "books 表中 author_code 列的值在auths 表中不存在ã€?</font> </p> <p> <font color="#deb887">end</font> </p> <img src ="http://www.aygfsteel.com/OpenCloseD/aggbug/75331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/OpenCloseD/" target="_blank">å¼€å…?/a> 2006-10-16 01:03 <a href="http://www.aygfsteel.com/OpenCloseD/archive/2006/10/16/75331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于dom4j的解æž?/title><link>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/06/73497.html</link><dc:creator>å¼€å…?/dc:creator><author>å¼€å…?/author><pubDate>Thu, 05 Oct 2006 16:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/06/73497.html</guid><wfw:comment>http://www.aygfsteel.com/OpenCloseD/comments/73497.html</wfw:comment><comments>http://www.aygfsteel.com/OpenCloseD/archive/2006/10/06/73497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/OpenCloseD/comments/commentRss/73497.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/OpenCloseD/services/trackbacks/73497.html</trackback:ping><description><![CDATA[ <p> <font color="#deb887"> <strong>实际跟jdom 有相似的地方 主要æ˜?br />JDOM用SAXBuilder<br />DOM4J用SAXReader<br />形成doc 然后<br />输出的方式也不太一æ ?br />jdom用XMLOutput<br />生成格式<br />然后又xop.setput(doc,os)<br />把输入流和doc当作参数<br />è€?br />dom4j则是<br />创徏一ä¸?XMLWriter(os,format)<br />format是格å¼?br />然后ç”׃¹¦å†™å™¨ä¹¦å†™(doc)<br />writer.writer(doc)</strong> <br /> <br />例如åQšdom4jçš„code 为:<br /><br />import java.io.File;<br />import java.io.FileNotFoundException;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.OutputStream;<br />import java.io.UnsupportedEncodingException;<br />import java.net.MalformedURLException;<br />import java.util.Iterator;<br />import java.util.List;</font> </p> <p> <font color="#deb887">import org.dom4j.Document;<br />import org.dom4j.DocumentException;<br />import org.dom4j.Element;<br />import org.dom4j.io.OutputFormat;<br />import org.dom4j.io.SAXReader;<br />import org.dom4j.io.XMLWriter;</font> </p> <p> <font color="#deb887">public class parsedom4j {</font> </p> <p> <font color="#deb887"> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO 自动生成æ–ÒŽ³•存根<br />  parsedom4j j=new parsedom4j();<br />  j.delete();<br />  <br /> }<br /> public void update(){<br />   SAXReader parser=new SAXReader();<br />   String path="D:/Example10.xml";<br />   File file=new File(path);<br />         try {<br />    Document doc=parser.read(path);<br />   Element root=doc.getRootElement();<br />   Iterator iter=root.elementIterator();<br />   while(iter.hasNext()){<br />    Element child=(Element)iter.next();<br />    Iterator childchilds=child.elementIterator();<br />    boolean isCorrect=false;<br />    while(childchilds.hasNext()){<br />     Element childchild=(Element)childchilds.next();<br />     if(childchild.getName().equalsIgnoreCase("title")&&childchild.getTextTrim().equalsIgnoreCase("b")){<br />       isCorrect=true;<br />     }if(childchild.getName().equalsIgnoreCase("email")&&isCorrect)<br />     {<br />        childchild.setText("西安@163.com"); <br />      }<br />    }<br />   }<br />   OutputFormat format=new OutputFormat();<br />   format.setEncoding("gb3212");<br />   format.setNewlines(true);<br />         OutputStream os=new FileOutputStream(path);<br />   XMLWriter writer=new XMLWriter(os,format);<br />   writer.write(doc);<br />   os.close();<br />   writer.close();<br />   <br />   <br />  } catch (MalformedURLException e) {<br />   // TODO 自动生成 catch å?br />   e.printStackTrace();<br />  } catch (Exception e) {<br />   // TODO 自动生成 catch å?br />   e.printStackTrace();<br />  }<br /> }<br /> <br /> public void delete(){<br />  Element de=null;<br />  SAXReader reader=new SAXReader();<br />  String path="D:/Example10.xml";<br />  Document doc;<br /> try {<br />  doc = reader.read(path);<br />  Element root=doc.getRootElement();<br />  List children=root.elements();<br />  for(int i=0;i<children.size();i++){<br />   Element child=(Element)children.get(i);<br />   List childchilds=child.elements();<br />   for(int j=0;i<childchilds.size();j++){<br />   Element e=(Element)childchilds.get(i);<br />   if(e.getName().equalsIgnoreCase("email")){<br />    de=e;<br />    childchilds.remove(j);<br />   }<br />   }<br />  }<br /> } catch (DocumentException e) {<br />  // TODO 自动生成 catch å?br />  e.printStackTrace();<br /> }<br />     <br />  <br />    <br />      <br />     <br />  <br /> }</font> </p> <p> <font color="#deb887">   <br />   <br />   <br /> </font> </p> <p> <font color="#deb887"> public parsedom4j() {<br />  super();<br />  // TODO 自动生成构造函数存æ ?br /> }</font> </p> <p> <font color="#deb887">}<br /></font> </p> <img src ="http://www.aygfsteel.com/OpenCloseD/aggbug/73497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/OpenCloseD/" target="_blank">å¼€å…?/a> 2006-10-06 00:16 <a href="http://www.aygfsteel.com/OpenCloseD/archive/2006/10/06/73497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">Âú³ÇÏØ</a>| <a href="http://" target="_blank">¹±¸ÂÏØ</a>| <a href="http://" target="_blank">ËïÎâÏØ</a>| <a href="http://" target="_blank">ÁúÖÝÏØ</a>| <a href="http://" target="_blank">Ë³Æ½ÏØ</a>| <a href="http://" target="_blank">ÏØ¼¶ÊÐ</a>| <a href="http://" target="_blank">Ò³ÓÎ</a>| <a href="http://" target="_blank">ÔúêãÌØÆì</a>| <a href="http://" target="_blank">ºâÑôÊÐ</a>| <a href="http://" target="_blank">ʯºÓ×ÓÊÐ</a>| <a href="http://" target="_blank">Á¬Æ½ÏØ</a>| <a href="http://" target="_blank">ºôͼ±ÚÏØ</a>| <a href="http://" target="_blank">ÖØÇìÊÐ</a>| <a href="http://" target="_blank">º£ÄÏÊ¡</a>| <a href="http://" target="_blank">¿¦À®</a>| <a href="http://" target="_blank">¸§Ë³ÏØ</a>| <a href="http://" target="_blank">ÈÀÌÁÏØ</a>| <a href="http://" target="_blank">Á½µ±ÏØ</a>| <a href="http://" target="_blank">¹ÝÌÕÏØ</a>| <a href="http://" target="_blank">ÀëµºÇø</a>| <a href="http://" target="_blank">ɯ³µÏØ</a>| <a href="http://" target="_blank">¸»ÄþÏØ</a>| <a href="http://" target="_blank">Î÷ºÍÏØ</a>| <a href="http://" target="_blank">Ò˲ýÊÐ</a>| <a href="http://" target="_blank">¹«°²ÏØ</a>| <a href="http://" target="_blank">ÂúÖÞÀïÊÐ</a>| <a href="http://" target="_blank">Öг¬</a>| <a href="http://" target="_blank">ÉÛ¶«ÏØ</a>| <a href="http://" target="_blank">ÁÙÏÄÊÐ</a>| <a href="http://" target="_blank">æÄÔ´ÏØ</a>| <a href="http://" target="_blank">ĵµ¤½­ÊÐ</a>| <a href="http://" target="_blank">³£ÊìÊÐ</a>| <a href="http://" target="_blank">ÎäÃùÏØ</a>| <a href="http://" target="_blank">ÐĮ̈ÊÐ</a>| <a href="http://" target="_blank">µÂÇìÏØ</a>| <a href="http://" target="_blank">ÀÖ¶¼ÏØ</a>| <a href="http://" target="_blank">²Æ¾­</a>| <a href="http://" target="_blank">ÀæÊ÷ÏØ</a>| <a href="http://" target="_blank">Çຣʡ</a>| <a href="http://" target="_blank">¶ë±ß</a>| <a href="http://" target="_blank">ʯÁÖ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>