??xml version="1.0" encoding="utf-8" standalone="yes"?>
Establishing connection failed.
无法q接q程服务?/font>
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
CSLIB Message: - L0/O0/S0/N36/1/0:
导入表对应的列数量不正确
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
导入数据存在自增长列Q但数据源不存在自增长列
blk_rowxfer(): blk layer: internal BLK-Library error: Data truncated while doing local character set conversion. col = 3
导入表对应的字段长度不
ct_sendpassthru(): network packet layer: internal net library error: Net-Library operation terminated due to disconnect
CTLIB Message: - L5/O3/S5/N5/5/0:
1、备份数据库Q包?master 和你要分L据与日志的应用库,最好是备䆾所有数据库Q?/p>
2、检查数据库的日志是否有单独的存放设备,如有Q则直接到第Q步Q?/p>
3、如没有单独的日志设备,则增加一个设备:disk init .....Q?/p>
4、alter database db_name log on new_log_device=xxxQ?/p>
5、sp_logdevice dbname,new_logdev (Ud日志讑֤)Q?/p>
6、sp_dropsegment logsegment, db_name, device_name (如果数据库有多个讑֤既放数据又放日志Q则要相应的q行几次Q?/p>
7、创Z个时表Q然后往里面插入_的数据,然后截断日志Q?/p>
use db_name go create table t1 (id int)
go declare @loop int select @loop = 1
while(@loop<500)
begin
insert t1 values(@loop)
select @loop = @loop + 1
end
go
dump tran db_name with truncate_only
go
8、到此,数据与日志的分离已经完成Q用sp_helpdb db_name或sp_helplog查看是否已分R?/p>
增加和删?segment q不Ud当前的已分配I间。日志至有一个扩充(extendQ位于以前的 segment 上(q记得吗Qؓ对象分配存贮单元Ӟ实际是以 extend 为单位的。)。如果当?extend 被填满,需要再为日志分配时QASE会在新的 segment 上分配(segment U束它不得不q么做)。此Ӟ截断日志可以回收以前分配的 extend 了。最后,q是要备份所有数据库.
1.sybase 的登录用户与数据库用?
刚开始用sybase的时候感觉到很纳?l常使这两者?但是后来发现,它们q两个是有很大区别的.
Sybase必须在创建登录用户后,q用户以一个合法的w䆾q入了sybase server,同时该登录用户信息会?/p>
qmaster数据库的syslogins表中.
但是只有注册用户成ؓ某一数据库用?q且对该用户赋予某些权限?该注册用h能在限制条g下
用数据库当中的表.
通常我都是这L解的:
首先我们需要在Sybase当中注册d:
sp_addlogin loginame,password,defaultdb
接下?我们首先要打开你要d的数据库,然后q行l或者是用户的注?/p>
use dbname
sp_addgroup grpname
sp_adduser loginame,name-in-db,grpname
q样该用户就可以讉K某一数据库了?同时我们可以通过grant对其q行权限或者是角色的给?
2.Sybase 数据库用户分c?
一般在sybase当中可以分ؓ如下四种用户: sa用户,数据库属?数据库对象属?数据库普通用?
sa用户在sybase 中ؓ最高等U用?所有命令都可以执行.
数据库属?dbo):用户可以Ҏ数据库中所有对??视图,存储q程{?q行操作,一般有三种途径创徏
一是系l管理员的用?br /> 二是pȝ理的用户将创徏数据库的权限赋予某个d用户,p用户q行数据库的创徏?自然形成
Ҏ据库属主.
三是pȝ理员的用户创徏数据库后,某个sybase中登录用户变为数据库的属?
数据库对象属Mؓ创徏该对象的用户,在实际的数据库的理?一般ؓ数据库属?数据库普通用户必
d数据库属d本数据库中某些对??视图,q程)赋予某些权限?才可以对本数据库中某些对象进?/p>
允许的操?几者的关系是相互包含的.数据库管理员的用户在q入某个数据库后,自然成ؓ该数据库的属?/p>
,数据 属主可看作ؓҎ的数据库普通用?
3.别名 与?l?/p>
别名 与组在数据库理中是l常用到?它能化数据库用户理.方便对用L监控.
别名卛_sybase中的d用户以同一个数据库用户的n份来讉K数据?q且h与该用户相同的权?
也就是说,在数据库中只要徏立一个数据库用户,对该数据库用户各U操作定义好,qsybase中已l定?/p>
好注册用h数据库用L别名用户?x有与该用L同的权限.q样一来,注册用户不必成ؓ?/p>
据库的用户即可访问数据库Q对所有别名用L权限的控制只需通过对一个数据库用户的控制达?/p>
.如:有一SQL SERVER名ؓTEST.SERQ有一名ؓEXAMPLE的数据库Q其中有一名ؓOK的表Q当pȝ?/p>
理员为TEST.SER创徏名ؓJOHN和KATE的注册用PEXAMPLE的数据库中有一名ؓOK_SELECT的数?/p>
库用P该数据库用户有对OK表的查询权限。将JOHN和KATEq两个注册用户变为OK_SELECT的别名后
QJOHN和KATE卛_q入数据库,q拥有与OK_SELECT的数据库用户相同的权限。组QgroupQؓ数据?/p>
用户的集合,即通过对组(group)的权限的控制辑ֈ对该l中数据库用L控制Q但也可对该l中数据?/p>
某些用户q行格外的权限控制。在上例中的EXAMPLE的数据库中有一OK_INSERT的组Q它对OK的表有插
入的权限Q数据库中有两个用户QMARRY和KITYQ当q两个用户加入到OK_INSERTl后QMARRY?/p>
KITY有对OK表的插入的权限。对MARRY和KITY相同的权限操作可通过对OK_SELECTl的控制可得?/p>
而MARRY对OK表有查询权限Q仅对MARRY用户赋权卛_。而别名则不行。?
四、SYBASE SQL SERVER的角色?
一般在理分工较细的数据库pȝ中,sa用户往往被分ZU角Ԍpȝ理员角?SA role)pȝ安全?/p>
角色(SSO role)、操作员角色QOPER roleQ。sa用户往往被锁住,其权力被以上三种角色所瓜分。这三种
角色分别用不同的数据库注册用户承担。因三种角色d较多Q所以不一一介绍。?
SYBASE SQL SERVER 的用L理是很复杂的Q但首先掌握以上的内容,便对掌握SYBASE SQL SERVER
的用L理有了一定的基础?/p>
2.cpu
sp_configure "max online engines",2 讄使用的CPU数量
sp_configure "number of engines at startup",2 启动时用CPU数量
3. |络
sp_configure "default network packet size",2048 讄|络传送包的大?重启动生?
sp_configure "max network packet size",2048
4. 其他资源使用
sp_configure "number of locks",100000 锁用数?br />sp_configure "number of open indexes",5000 打开索引
sp_configure "number of open objects",5000 打开对象
sp_configure "number of user connections",1000 用户q接?br />sp_configure "number of device",100 新徏讑֤最大数?/p>
? sybase 讑֤调整
数据讑֤与日志设备必d开Q添加时数据库讑֤
1. 数据讑֤
sp_deviceattr devname,"dsync",true
2. 日志讑֤
sp_deviceattr devname,"dsync",false
3. 临时数据库设?br />sp_deviceattr devname,"dsync",false
? sybase 数据l构调整
1. 数据库对象表、烦引。?br />(1)对表新徏合理的烦引,定期分析?br />update statistics tabname (不锁?
(2)整理数据库空?(锁表Q剩余空间必Mؓ最大表?.2?
reorg rebuild tabname
recreate clustered index
(3)重新~译存储q程与触发器
sp_recompile usertable (与表相关联的存储q程和触发器)
? sybase 数据库监?/p>
1. 数据库死q程
select * from master..syslogshold
? sybase 数据库启动参?/p>
-T3607 master
-T3608 其他数据
-m ?/p>
一.字符操作
1.替换指定字符
str_replace(string1,需要替换字W,替换成字W?
SUBSTRING(string1,,)
?数值操?/p>
?日期操作
getdate()
得到当前旉,可以讄得到各种旉格式.
datepart(日期部分,日期)
取指定时间的某一个部?q月天时分秒.
datediff(日期部分,日期1,日期2)
计算指定的日?和日?的时间差多少.
dateadd(日期部分,数D辑ּ,日期)
计算指定旉,再加上表辑ּ指定的时间长?
--取前几天
'dataadd(day,-10,getdate())'
--取时间的某一个部?
select datepart(yy,getdate()) --year
select datepart(mm,getdate()) --month
select datepart(dd,getdate()) --day
select datepart(hh,getdate()) --hour
select datepart(mi,getdate()) --min
select datepart(ss,getdate()) --sec
--取星期几
set datefirst 1
select datepart(weekday,getdate()) --weekday
--字符串时?
select getdate() -- '03/11/12'
select convert(char,getdate(),101) -- '09/27/2003'
select convert(char,getdate(),102) -- '2003.11.12'
select convert(char,getdate(),103) -- '27/09/2003'
select convert(char,getdate(),104) -- '27.09.2003'
select convert(char,getdate(),105) -- '27-09-2003'
select convert(char,getdate(),106) -- '27 Sep 2003'
select convert(char,getdate(),107) --'Sep 27, 2003'
select convert(char,getdate(),108) --'11:16:06'
select convert(char,getdate(),109) --'Sep 27 2003 11:16:28:746AM'
select convert(char,getdate(),110) --'09-27-2003'
select convert(char,getdate(),111) --'2003/09/27'
select convert(char,getdate(),112) --'20030927'
select rtrim(convert(char,getdate(),102))+' '+(convert(char,getdate(),108)) -- '2003.11.12 11:03:41'
--整数旉
select convert(int,convert(char(10),getdate(),112)) -- 20031112
select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate()) -- 110646
--旉格式 "YYYY.MM.DD HH:MI:SS" 转换?"YYYYMMDDHHMISS"
declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)
select @a=convert(datetime,'2004.08.03 12:12:12')
select @tmp=convert(char(10),@a,112)
select @tmp
select @tmp1=convert(char(10),datepart(hh,@a)*10000 + datepart(mi,@a)*100 + datepart(ss,@a))
select @tmp1
select @tmp=@tmp+@tmp1
select @tmp
--当月最后一?
declare
@tmpstr varchar(10)
@mm int,
@premm int,
@curmmlastday varchar(10)
begin
select @mm=datepart(month,getdate())--当月
select @premm=datepart(month,dateadd(month,-1,getdate())) --上个?
if (@mm>=1 and @mm<=8)
select @tmpstr=convert(char(4),datepart(year,getdate()))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
else if (@mm>=9 and @mm<=11)
select @tmpstr=convert(char(4),datepart(year,getdate()))+'.'+convert(char(2),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
else
select @tmpstr=convert(char(4),datepart(year,dateadd(year,1,getdate())))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
select @curmmlastday=convert(char(10),dateadd(day,-1,@tmpstr),102) --当月最后一?
end
SELECT *
FROM page where url like '%baidu%' or title like '%baidu%' or like ''
ORDER BY CHARINDEX('baidu', url) DESC, CHARINDEX('baidu', title) DESC,
CHARINDEX('baidu', body) DESC
但我感觉q种Ҏq不是最单的Q后来把q个Ҏ发给面试的hQ他l我了一U更单方法,只要用基本的Sql语句可以实现。代码如?br />
select a.[id],a.mark from
(
select [page].[id],100 as mark from [page] where [page].[url] like '%baidu%'
union
select [page].[id],50 as mark from [page] where [page].[title] like '%baidu%'
union
select [page].[id],10 as mark from [page] where [page].[body] like '%baidu%'
) as a order by mark desc
用union 实现联合查询Q在每个查询语句中定义一个时变量mark q给mark赋|在最后的输出旉用mark来排序,q样实现真的好简单。其实这都考验我们对Sql的编成思想?/p>
购物人 ?商品名称 数量
A 甲 ?2
B 乙 ?4
C 丙 ?1
A 丁 ?2
B 丙 ?5
l出所有购入商品ؓ两种或两U以上的购物?br />
一、SYBASE SQL Server 如何记录和读取日志信?/strong>
SYBASE SQL Server是先记Log的机制。每当用h行将修改数据库的语句ӞSQL Server׃自动地把变化写入日志。一条语句所产生的所有变化都被记录到日志后,它们p写到数据在~冲区的拯里。该数据保存在~冲ZQ直到别的数据页需要该内存Ӟ该数据页才被写到盘上。若事务中的某条语句没能完成QSQL Server回滚事务生的所有变化。这样就保证了整个数据库pȝ的一致性和完整性?/p>
二、日志设?/b>
通常删除事务日志中不z跃的部分可使用“dump transaction with trancate_only”命令,q条命o写进事务日志Ӟq要做必要的q发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用q条命o有很大的危险性,SQL Server会弹Z条警告信息。ؓ了尽量确保数据库的一致性,你应它作ؓ“最后一招”?br />
q样Q一个大的事务就被分成两个较的事务?br />
Log和数据库的Data一P需要存攑֜数据库设备上Q可以将Log和Data存放在同一讑֤上,也可以分开存放。一般来_应该一个数据库的Data和Log存放在不同的数据库设备上。这样做有如下好处:一是可以单独地备䆾Backup事务日志;二是防止数据库溢满;三是可以看到Log的空间用情c?br />
所建Log讑֤的大,没有十分_的方法来定。一般来_对于新徏的数据库QLog的大应为数据库大小?0%左右。Log的大还取决于数据库修改的频J程度。如果数据库修改频繁Q则Log的增长十分迅速。所以说LogI间大小依赖于用h如何使用数据库的。此外,q有其它因素影响Log大小Q我们应该根据实际操作情况估计Log大小Qƈ间隔一D|间就对Logq行备䆾和清除?
三、日志的清除
随着数据库的使用Q数据库的Log是不断增长的Q必d它占满空间之前将它们清除掉。清除Log有两U方法:
1.自动清除?br />
开放数据库选项 Trunc Log on ChkptQ数据库系l每隔一D|间自动清除Log。此Ҏ的优Ҏ无须人工q预Q由SQL Server自动执行Qƈ且一般不会出现Log溢满的情况;~点是只清除Log而不做备份?br />
2.手动清除?/strong>
执行命o“dump transaction”来清除Log。以下两条命令都可以清除日志Q?/p>
dump transaction with truncate_only
dump transaction with no_log
以上两种Ҏ只是清除日志Q而不做日志备份,若想备䆾日志Q应执行“dump transaction database_name to dumpdevice”命令?br />
四、管理庞大的事务
有些操作会大扚wCҎ据,如大量数据的修改QUpdateQ、删除一个表的所有数据(DeleteQ、大量数据的插入QInsertQ,q样会Log增长速度很快Q有溢满的危险。下面笔者给大家介绍一下如何拆分大事务Q以避免日志的溢满?br />
例如执行“update tab_a set col_a=0”命令时Q若表tab_a很大Q则此Update动作在未完成之前可能Log溢满Q引?105错误QLog FullQ,而且执行q种大的事务所产生的独占锁QExclusive Table LockQ,会阻止其他用户在执行Update操作期间修改q个表,q就有可能引h锁。ؓ避免q些情况发生Q我们可以把q个大的事务分成几个的事务Qƈ执行“dump transaction”动作?
上例中的情况可以分成两个或多个的事务Q?br />
update tab_a set col_a=0 where col_b>x
go
dump transaction database_name with truncate_only
go
update tab_a set col_a=0 where col_b <=x
go
dump transaction database_name with truncate_only
go
按照上述Ҏ可以Ҏ需要Q意拆分大的事务。若q个事务需要备份到介质上,则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令,应该先执行“dump database”。以此类推,我们可以对表删除、表插入{大事务做相应的拆分?/p>
Sybase数据库品自?987q问世以来,它的客户?服务?client/server)工作模式、分布处理的基础体系l构、完善的安全保密性能、高速快Lq行方式、多q_跨操作系l的q泛应用{优点,q速被IT界接受ƈ推广应用。我们作为金融业的用P也在1995q开始用Sybase10版本。在具体的用中Q发现集中式的数据管理有其优点,是数据风险范围大ؓ~小Q但是作为Sybase的服务器一端,数据风险比较集中Q如何做好数据库的数据备份,成ؓ臛_重要的问题?br />
在实际应用中Q我们ȝZ两种全量备䆾ҎQ?br />
一、用Sybase的Backup ServerQ备份服务器Q,做Dump备䆾
转储数据库(Dump databaseQ,是为整个数据库Q包括数据、表l构、触发器、游标、存储过E、事务日志等Q做一ơ物理备份。{储数据库Ӟpȝ自动执行一ơcheckpointQ即日志和数据从缓冲区拯到硬盘(只拷贝脏)Q把已被分配的页Q日志和数据Q{储到讑֤?br />
命o格式为:
dump database 数据库名 to 讑֤文g?with 参数
如果备䆾到硬盘的文g上,可以不预先估备份文件的大小Q只要硬盘有_的存储空间就可以。如果是备䆾到dds带上,那么p估算一下备份后的大,90c的dds带压羃存储I间?G,120c的带压羃存储I间?GQ如果数据库的备份文件超q了q个寸Q就要考虑多文件{储,使用stripe参数?br />
命o格式为:
dump database 数据库名 to 讑֤文g?
stripe on 讑֤文g?
stripe on 讑֤文g?…?br />
with 参数
q种数据备䆾方式是将整个数据库的q行环境完整的复制一份,包括数据库的脏页和碎片,在用load命o恢复Ӟ只能恢复到同样大的数据库中Q数据和日志的大都只能和原来完全一_Q适用于在每天的日l营业网点下班后的日常备份。优Ҏ数据库完整无误,~点是不能直接查看备份内宏V?br />
二、分数据l构和数据记录做两次备䆾
在一般情况下Q生产机的数据库都比较庞大,而实验机则相对较,难以在实验环境中以load命o恢复工作机的内容。所以,在工作实践中Q我们摸索出了第二种全量备䆾Ҏ?br />
1、数据结构备?/strong>
在windowsq_的Sybase SQL Server ManagerQ数据库理Q^C选择ServeràGenerate ddl则生整个数据库服务器的所有信息,如果选择databaseàgenerate ddl则生所选定数据库的信息Q以master库ؓ例,产生的文件主要包括:config.ddlQ配|)、devices.ddlQ设备)、database.ddlQ数据库Q、logins.ddlQ用P、remote.ddlQ远E)、cache.ddlQ缓Ԍ、segment.ddlQ)、group.ddlQ用LQ、user.ddlQ用P、default.ddlQ确省)、rule.ddlQ规则)、udt.ddl、table.ddlQ表Q、view.ddlQ视图)、proc.ddlQ存储过E)、triger.ddlQ触发器Q?br />
2、数据记录备?/strong>
数据库各表以Sybase自代的bcpQbulk copyQ工L方式导成一定格式的文本文gQ命令格式:
bcp 表名 out 路径?文g?-c -t 分隔W?-u Q用户名Q?pQ密码)-SQ服务器名)
如果一个数据库中的所有表都做一个bcp备䆾Q就需要针Ҏ一个表都做一ơbcpQ在一般情况下Q一个数据库?00多个表,工作量比较大。可以利用数据库中的pȝ表信息做一个bcp备䆾脚本。原理是每一个用戯在系l表中都有信息记载,可以通过isql语句查询得到。现举一例说明:
1Q、先~辑一个名为mkbcpout.sql的文Ӟ内容如下Q?br />
select "echo bcp "+name+" out …………………?br />
"+"bcp "+name+" out ./+"name+".table -c -t | -Uuser -Ppassword -S SERVER" from sysobjects where type=U
go
2Q、执行isql命oQ以此文件作入,执行l果输出到另外一个文仉Q?/p>
isql -Uuser -Ppassword -S server -I mkbcpout.sql -O bcpout
3Q、对bcppout文gE微修改Q增加可执行权限
chmod +x bcpout
4Q、执行bcpoutQ导出数据文本:
./bcpout
3、数据库恢复
业务生机可能ؓ型机,而实验开发环境的g环境为PC serverQ安装好win nt或SCO unix下的Sybase服务器后Q根据需要创建空间够大的数据库和tempdbQ系l时数据库Q,创徏数据库用Pq将其更改ؓ此数据库的所有者,要注意两点:1Q此数据库允许bcp拯Q?Q此数据库自动清除log。命令格式ؓQ?br />
1> sp_dboption databasedbname ,"select into/bulkcopy",true
2> go
1> sp_dboption databasename,"trunc log on chkpt",true
2> go
上述两个配置可能与生产机的配|不同?br />
然后以新创徏的数据库用户dQ导入数据结构,注意要首先导入表l构Q然后才是存储过E、触发器{等。命令格式:
1?isql -Uusername -Ppassword -I table.ddl -o error.log.table
2?isql -Uusername -Ppassword -I proc.ddl -o error.log.proc
…?br />
Z提高bcp导入数据的速度Q需要将比较大的表的索引和主键删除,否则的话Q每bcpq一条数据,数据库都自动写一条log日志Q记载此数据的上一条和下一条记录,定本记录在此表中的准确位置Q一是媄响bcp速度Q二是数据库的log飞速膨胀。数据库的自动清除log功能只有在一个事务结束后才v作用?/p>
准备工作做完后,开始倒入数据记录。用类似做bcpout的方法做一个bcpin的脚本,然后执行Q?/p>
./bcpin |tee error.bcpin
使用tee道输出的目的是让计机完整记录下倒入q程Q自动存入error.bcpin文g中,待倒入l束后,我们只需要检查日志文Ӟ不需要一直紧盯着计算机屏q?br />
所有工作做完之后,不要忘记重新删除的主键和烦引徏上?br />
如果有现成的数据库,只需要单U地导入数据记录Q则首先数据库中所有用戯Q也是所有type="U"的表Q清I,命o格式Q?br />
1> truncate table tablename
2> go
当然最好也是利用做bcpout脚本的做一个truncate脚本Q通过执行此脚本将所有用戯清空。然后的数据导入、处理烦引和主键的过E与上面cM?br />
三、利用做bcp备䆾脚本的方法做数据库碎片整?/strong>
Sybase数据库作Z务处理应用服务器Q每天应用程序都Ҏ据库做大量的插入、修改和删除{操作,不可避免的在数据库的物理存储介质上留下页片和扩展单元碎片,从而媄响数据库的存储效率和q行速度。具体表CؓQ业务繁忙时出现死锁Qdead lockQ,数据库的输入/输出资源被大量占用,业务处理速度慢。其解决办法是:
1?清空数据库中的所有表Q命令格式:isql -Uusername -Ppassword -I truncate.sql -o error.truncate
2?删除所有表的烦引和主键Qisql -Uusername -Ppassword -I dropindex.sql -o error.dropindex
3?导入数据Q?/bcpin
4?d索引和主键:isql -Uusername -Ppassword -I addindex.sql -o error.addindex
5?更新数据库状?br />
1> update statistics tablename
2> go
上述操作都是针对数据库中的所有用戯q行的,利用做bcp备䆾脚本的方法做出相应的脚本QɾJ琐的数据库l护变得便易行,q克服了直接使用isql语句操作风险大、没有操作日志的毛病?br />
W者在实际工作中,使用W一U方法对生机做日常全量备䆾Q日l通过unix的crontab定时扚w作业Q具体做法请参考《中国金融电脑?001q第10期有关crontab的文章)bcp出全部数据。用高档PC server 搭徏模拟q行环境Q在需要的情况下导入生产机数据Q处理运行中后台server的各U问题,待研I出解决办法后再在生产机上做相应调整Q这样做风险,效果好?/p>
也许我们刚装上mysql,无论是在linuxQ还是在windows下,它的权限pȝ问题是我们首先应该接触的
MySQL权限pȝ的主要功能是证实q接C台给定主机的一个用Pq且赋予该用户在一个数据库?strong>select?insert?strong>update?strong>delete的权限?
附加的功能包括有一个匿名的用户和对?strong>MySQL特定的功能例?code>LOAD DATA INFILEq行授权及管理操作的能力?br />
Mysql在安装成功后Q默认的用户名是rootQ没有密码,当然了你自己可以在以后的学习q程中改掉它?br />
不过我还是先看了一下mysql与服务器的连接部分,如果安装完成Q当然要试着q行一下连接了Q?br />
当你惌存取一?strong>MySQL服务器时Q?strong>MySQL客户E序一般要求你指定q接参数Q你惌联接的主机、你的用户名和你的口?br />
shell>mysql [-h hostname] [-u username] [-ppassword]
其中-h, -u
?code>-p选项的另一UŞ式是--host=host_name
?code>--user=user_name?code>--password=your_pass。注意在-p
?code>--password=与跟随它后面的口令之?em>没有I格?br />
在命令行上指定一个口令是不安全的Q随后在你系l上的Q何用户可以通过打类DL命o发现你的口oQ?code>ps auxww
对于命o行没有的联接参数Q?code>mysql
使用~省|
localhost
?
-p
Q则没有提供口o?/li>
在Unixpȝ上,当你q行一个连接时Q你可以指定要用的不同的缺省|q样你不必每ơ在你调用一个客L序是在命令行上输入他们。这可以有很多方法做刎ͼ
[client]
节里指定连接参数。文件的相关节看上d能像q样Q?[client] host=host_name user=user_name password=your_pass
口o的安全性问题:以一U暴露的可被其他用户发现的方式指定你的口令是不妥当的。当你运行客L序时Q你可以使用下列Ҏ指定你的口oQ还有每个方法的风险评估Q?
-pyour_pass
?code>--password=your_pass的选项。这很方便但是不安全Q因Z的口令对pȝ状态程?例如ps
)变得可见Q它可以被其他的用户调用来显C命令行?一?strong>MySQL客户在他们的初始化顺序期间用零覆盖命令行参数Q但是仍然有一个短暂间隔时间内参数值可见的。) ?p
?code>--password选项(没有指定your_pass
?。在q种情况下,客户E序h来自l端的口令: shell>mysql - u user_name - p Enter password: ********
客户回应??/samp>字符C入你的口令的l端使得旁观者不能看见它。因为它对其他用户不可见Q与在命令行上指定它相比Q这栯入你的口令更安全。然而,q个输入一个口令的Ҏ仅仅Z交互式运行程序是合适的。如果你惌从非交互式运行的一个脚本调用一个客P没有从l端输入入口令的Z?
[client]
节列Z的口令: [client] password=your_pass
如果你在?my.cnf?/tt>里面存储口oQ文件应该不是组或世界可L可写的。保证文件的存取模式?code>400?code>600。见4.15.4 选项文g?
MYSQL_PWD
Q你的口令将Ҏ有h是显而易见的Q甚臛_没有q样一个版本的ps
pȝ上,假设没有其他Ҏ观察到进E环境是不明智的?MQ最安全的方法是让客L序提C口令或在一个适当保护的?my.cnf?/tt>文g中指定口?/p>
shell>mysql -u root -p mysql
mysql>update user set Password=PASSWORD('new_password') where User='root';
mysql>flush previliges;
mysql>set password for root=PASSWORD('new_password');
此处我们只是在update语句和set password里面用PASSWORD()函数来对密码q行加密Q而mysqladmin没有用,mysqladmin不必用password(),pȝ会自动为其加密.
在用grant命o增加用户或者是修改权限时在指定密码时也不必使用PASSWORD()函数加密?/p>
[drive:][path][filename]
指定要列出的驱动器、目录和/或文件?/p>
/A 昄h指定属性的文g?br /> attributes D 目录 R 只读文g
H 隐藏文g A 准备存档的文?br /> S pȝ文g - 表示“否”的前缀
/B 使用I格?没有标题信息或摘??br /> /C 在文件大中昄千位数分隔符。这是默认倹{用 /-C ?br /> 停用分隔W显C?br /> /D 跟宽式相同,但文件是按栏分类列出的?br /> /L 用小写?br /> /N 新的长列表格式,其中文g名在最双?br /> /O 用分c顺序列出文件?br /> sortorder N 按名U?字母序) S 按大?从小到大)
E 按扩展名(字母序) D 按日?旉(从先到后)
G l目录优先 ?- 颠倒顺序的前缀
/P 在每个信息屏q后暂停?br /> /Q 昄文g所有者?br /> /S 昄指定目录和所有子目录中的文g?br /> /T 控制昄或用来分cȝ旉字符域?br /> timefield C 创徏旉
A 上次讉K旉
W 上次写入的时?br /> /W 用宽列表格式?br /> /X 昄为非 8dot3 文g名生的短名U。格式是 /N 的格式,
短名U插在长名称前面。如果没有短名称Q在其位|则
昄I白?br /> /4 用四位数字显C年
可以?DIRCMD 环境变量中预先设定开兟뀂通过d前缀 - (破折?
来替代预先设定的开兟뀂例如,/-W?/p>