Archive for the ‘mysql’ Category
星期日, 11月 2nd, 2008 322 次访问
昨天有个朋友谈起复合索引,之前对复合索引只是大概了解没有专门的总结也不敢多言复合索引使用方法的优劣.查阅相关资料后把例子贴出与大家分享,希望可以抛砖引玉.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。下面用几个例子对比查询条件的不同对性能影响.
create table test(
a int,
b int,
c int,
KEY a(a,b,c)
);
优: select * from test where a=10 and b>50
差: select * from test where a50
优: select * from test where order by a
差: select * from ...
Posted in mysql, 技术 | 11 Comments »
星期二, 10月 21st, 2008 256 次访问
数据完整性的原则:应用程序内部的数据是有用的,换句话说就是引入的数据在边界处被过滤,以过滤后的结果存储,在输出数据的时不再需要做任何处理。在过滤数据时要分清好的,有效的,无效的数据的处理。基于以上原则在做web程序设计是要注意以下几点:1.过滤不支持的编码格式 如果你的整个体系里面用的是utf-8编码,那么你就在数据输入的时候过滤或者转化掉其他编码的字符. 相关php方法: utf8_encode($input), iconv("utf-8","utf-8",$str);注后者要装iconv扩展2.过滤控制字符 很多时候输入中含有控制字符,这此控制字符虽然是有效的数据,但不是良好的数据。这时候最好把控制字符给过滤掉,可以简单的把小于0x20的 ascii字符过滤之。 相关方法: 1. preg_replace('!\p{C}!u','',$data)//清除所有控制字符 2.preg_replace('!\r\n?','\n',$input) //统一所有平台的回车,还省空间3.过滤html html的过滤比较头痛,可以用strip_tags()进行过滤,所有的html标签,但是想有选择的过滤html就比较惨了。这时个可以要你写比较复杂的正则表达式。 注:把所有的外部来源的数据当成是感染过的数据是重要的,只有你自己消除感染的数据才是安全的。 有时间 可以看一下lib_filter(http://code.iamcal.com/php/lib_filter) 4.防止sql注入攻击:
Posted in mysql, php, 技巧, 技术 | 3 Comments »
星期六, 10月 11th, 2008 389 次访问
常在河边走,哪有不湿鞋。当服务器运行时间为无限时,挂机也将会成为常态。所以宕机后的灾后处理也成为运维人员的必修课。为了纪念此次宕机事件,以切身的经验与来分享如何简单的做数据库恢复。 众所周知,机器因故断电重启对web server的影响是很少的,但是对data server的危害却巨大的。这些倒来个彻底,由于机房原因所有的服务器全部重启了。不出所料,所有的服务重新开启后网站正常工作,很高兴数据库还能跑起来,看来伤害还不是特别大,不过还是很小心确认一下数据库的运转情况,首先进入一台mysql,从服务器1.show processlist 查看了一下当前运行进程功能: 显示mysql当前运行的进程.目的: 因为数据库做了主从,所以我想看看主从的工作正常与否.扩展: show full processlist显示完整的当前运行进程.数据显示:*************************** 2. row *************************** Id: 919176 User: system user Host: db: NULLCommand: Connect Time: 25507 State: Waiting for master to send event Info: NULL*************************** 3. row ***************************好家伙,time怎么达到2W多秒呢。可能从服务器备份出问题了,先看状态再说:注:time显示主从机器的备份时间差2. show slave status 功能:查看当前从服务器的运行情况:目的:查看slave是否没有开同步进程。扩展: 还有show master status:使用对像是master服务器显示数据片断:*************************** 1. row *************************** Slave_IO_State: Waiting ...
Posted in linux, mysql, 技术 | 2 Comments »
星期日, 9月 7th, 2008 339 次访问
1.mysql库中的几个表的简介: user: 决定是否允许或拒绝到来的连接,对于允许的连接,user表授予的权限指出用户的全局权限。这些权限适用于服务器上的all数据库。 db: 决定用户能从哪个主机存取哪个数据库,权限列决定允许哪个操作,授予的数据库级别的权限适用于数据库和它的表。 当你想要一个给定的db表行应用于若干主机时,db和host表一起使用. tables_priv和columus_priv表类似于db表,但是更精致它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列,授予列级别的权限只适用于专用列. procs_priv表适用于保存的程序。授予程序级别的权限只适用于单个程序。2.当mysqld服务器启动时,将授权表的内容读入到内存中,你可以通过flush privileges语句或执行mysqladmin flush-privileges或mysqladmin reload命令让它重新读取表.3.一些mysql权限系统做不到的。 1.你不能明显地指定给定的用户应该被拒绝访问,即,你不能明显地匹配用户然后拒绝连接。 2.你不能指定用户有权建立或删除数据库中的表,但不能创建或删除数据本身。
Posted in linux, mysql, 技术 | 2 Comments »
星期三, 9月 3rd, 2008 319 次访问
1.如果在创建了任何数据库表之后改变字符集,必须对每个表运行:myisamchk -r -q --set-character-set=charset2. mysql 4.0以上版本默认innoDB包括在所有二进制分发版中,不需要用mysql-max服务器只是用来获取innoDB支持.3.在编译mysql时,建议不要使用libg++或者libstdc++,因为只会增加二进制空间而不会有任何好处。编译时修改以下环境变量CC=gccCFLAGS=-03CXX=gccCXXFLAGS=-03export CC CFLAGS CXX CXXFLAGS4.查看数据库支持的引擎 show engines;
Posted in linux, mysql, 技术 | No Comments »