• 2009-07-16

    Mysql用户访问权限设置 - [mysql]

    1.权限查看
    mysql> show grants for 'root'@'localhost' ;
    +-----------------------------------------------------------------------------------------------------+
    | Grants for root@localhost                                                                                         |
    +-----------------------------------------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    +------------------------------------------------------------------------------------------------------+
    1 row in set (0.06 sec)

    2.权限设置

    mysql-> GRANT ALL PRIVILEGES ON BD_name.T_name TO 'user'@'localhost'   IDENTIFIED BY 'passwrod';
    mysql-> GRANT ALL PRIVILEGES ON BD_name.* TO 'user'@'%' IDENTIFIED BY 'passwrod' WITH GRANT OPTION;
    两个账户均为超级用户账户,一个账户 ('user'@'localhost')只用于从本机连接时,只能操作,DB_name的库里的T_table表,另一个账户('user'@'%')可用于从其它主机连接,只操作DB_name库。

    3.具体用户操作语句的权限设置

    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        ->     ON bankaccount.*
        ->     TO 'custom'@'localhost'
        ->     IDENTIFIED BY 'obscure';

    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        ->     ON expenses.*
        ->     TO 'custom'@'whitehouse.gov'
        ->     IDENTIFIED BY 'obscure';

    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        ->     ON customer.*
        ->     TO 'custom'@'server.domain'
        ->     IDENTIFIED BY 'obscure';

    这3个账户可以用于:
    ·         第1个账户可以访问bankaccount数据库,但只能从本机访问。
    ·         第2个账户可以访问expenses数据库,但只能从主机whitehouse.gov访问。
    ·         第3个账户可以访问customer数据库,但只能从主机server.domain访问。

    Tag:Mysql
  • 2009-07-14

    linux下修改php.ini,重启apache - [linux]

    公司php安装居然没有配置error_display为Off,导致报错时用户清晰看到服务器路径,还贴在了BBS上,太乐了。

    PHP本来安装在/usr/bin/下,但是公司统一安装的时候,是在/Apps/下,找了半天找不到,最后干脆用了php_info(),发现在/Apps/PHP5/zend/php.ini,然后修改,之后,要重启apache,找了下,就在/Apps/apache/bin/下,ls发现,有一堆,如:

    -rwxr-xr-x  1 root root  100399 Nov 26  2008 ab
    -rwxr-xr-x  1 root root    3428 Nov 26  2008 apachectl
    -rwxr-xr-x  1 root root    7001 Nov 26  2008 apr-1-config
    -rwxr-xr-x  1 root root    6201 Nov 26  2008 apu-1-config
    -rwxr-xr-x  1 root root   22597 Nov 26  2008 apxs
    -rwxr-xr-x  1 root root    9562 Nov 26  2008 checkgid
    -rwxr-xr-x  1 root root    8876 Nov 26  2008 dbmmanage
    -rw-r--r--  1 root root     978 Nov 17  2008 envvars
    -rw-r--r--  1 root root     978 Nov 26  2008 envvars-std
    -rwxr-xr-x  1 root root   35852 Nov 26  2008 htcacheclean
    -rwxr-xr-x  1 root root   23529 Nov 26  2008 htdbm
    -rwxr-xr-x  1 root root   16962 Nov 26  2008 htdigest
    -rwxr-xr-x  1 root root   23686 Nov 26  2008 htpasswd
    -rwxr-xr-x  1 root root 1156959 Nov 26  2008 httpd
    -rwxr-xr-x  1 root root   16311 Nov 26  2008 httxt2dbm
    -rwxr-xr-x  1 root root   15869 Nov 26  2008 logresolve
    -rwxr-xr-x  1 root root   20441 Nov 26  2008 rotatelogs

    最后,运行:#./apachectl restart  搞定

    Tag:php linux
  • 2009-07-09

    mysql性能调试,不断总结! - [mysql]

    mysql在遇到严重性能问题时,一般都有这么几种可能:
    1、索引没有建好;
    2、sql写法过于复杂;
    3、配置错误;
    4、机器实在负荷不了;

     

    1.索引没建好,一个办法,后台执行脚本,show processlist 实时查看Mysql的工作情况,记录,锁死Mysql的语句。然后,desc(explain)语句,查看用到了什么索引,然后看情况建立合适的索引。(这个索引比较麻烦,有时候这里解决了,其他地方又慢了,所以要通盘考虑)

    2.检查查询效率慢的SQL语句,看怎么优化,也是用desc或者explain来看。

    3.配置:

    配置里主要参数是key_buffer,sort_buffer_size,myisam_sort_buffer_size,
    key_buffer=128M:全部表的索引都会尽可能放在这块内存区域内,索引比较大的话就开稍大点都可以,我一般设为128M,有个好的建议是把很少用到并且比较大的表想办法移到别的地方去,这样可以显著减少mysql的内存占用。
    sort_buffer_size=1M:单个线程使用的用于排序的内存,查询结果集都会放进这内存里,如果比较小,mysql会多放几次,所以稍微开大一点就可以了,重要是优化好索引和查询语句,让他们不要生成太大的结果集。
    另外一些配置:
    thread_concurrency=8:这个配置标配=cpu数量x2
    interactive_timeout=30
    wait_timeout=30:这两个配置使用10-30秒就可以了,这样会尽快地释放内存资源,注意:一直在使用的连接是不会断掉的,这个配置只是断掉了长时间不动的连接。
    query_cache:这个功能不要使用,现在很多人看到cache这几个字母就像看到了宝贝,这是不唯物主义的。mysql的query_cache 在每次表数据有变化的时候都会重新清理连至该表的所有缓存,如果更新比较频繁,query_cache不但帮不上忙,而且还会对效率影响很大。这个参数只 适合只读型的数据库,如果非要用,也只能用query_cache_type=2自行用SQL_CACHE指定一些sql进行缓存。
    max_connections:默认为100,一般情况下是足够用的,但是一般要开大一点,开到400-600就可以了,能超过600的话一般就有效率问题,得另找对策,光靠增加这个数字不是办法。
    其它配置可以按默认就可以了,个人觉得问题还不是那么的大,提醒一下:1、配置虽然很重要,但是在绝大部分情况下都不是效率问题的罪魁祸首。2、mysql是一个数据库,对于数据库最重要考究的不应是效率,而是稳定性和数据准确性。

    注意:这里wait_timeout,会kill超过这个时间sleep的语句,还需要改:interactive_timeout

    其他一些:

     back_log           指定到来的TCP/IP连接的侦听队列大小     因操作系统不同而不同,LINUX系统推荐小于512的整数,一般设置成300    
    key_buffer_size     索引缓存大小     优化索引的缓冲区大小     根据*.MYI的文件大小进行设置,没有MYISAM表的情况下保留16-32M提供磁盘临时表索引用      
    max_connections     最大连接数     优化MYSQL的最大连接数     500    
    innodb_buffer_pool_size     INNODB缓冲池大小     用于缓存表的数据与索引     内存的80%    
    innodb_additional_mem_pool_size     INNODB附加内存缓存池大小     用于存放数据目录信息和其他内部数据结构     20M左右    
    innodb_log_file_size     每个日志文件大小     用于存放日志     64-512M     5242880  (5M)32位机器小于4G
    innodb_log_buffer_size     每个日志文件缓存大小     优化高强度写入与短事务处理能力     8-16M   
    innodb_flush_log_at_trx_commit     提交事务日志刷新方式     0.不刷新事务提交1.刷新到磁盘2.刷新到操作系统缓存     2.刷新到操作系统缓存.后果:除非操作系统崩溃或停电会损失1秒的事务提交记录      
    table_cache     表缓存     缓存已打开的表     1024   
    thread_cache_size     线程缓存大小     它的目的是在通常的操作中无需创建新线程。     至少16 
    query_cache_size     查询缓存大小     提高缓存命中率     32-512M    
    sort_buffer_size     查询排序缓存大小     优化排序缓存空间     6M    
    read_buffer_size     读查询缓存大小     优化读查询操作缓存空间     4M    
    join_buffer_size     联合查询操作缓存大小     优化联合查询操作缓存空间     8M    
     

    4.Mysql负载不了

    A:通过mysql同步功能将数据同步到数台从数据库,由主数据库写入,从数据库提供读取。

    B:最靠谱的,使用memcachedb

    C:加入缓存(网上看到的,并没有研究)
    加入缓存之后,就可以解决并发的问题,效果很明显。如果是实时系统,可以考虑用刷新缓存方式使缓存保持最新。
    在前端加入squid的架构比较提倡使用,在命中率比较高的应用中,基本上可以解决问题。
    如果是在程序逻辑层里面进行缓存,会增加很多复杂性,问题会比较多而且难解决,不建议在这一层面进行调整。

    Tag:Mysql
  • 2009-07-09

    连击党的噩梦!! - [JQuery]

    最近老有连击党,修改input,onclick事件,点击后,submit变灰

    <form name=form1 method="POST" action="http://www.baidu.com" target=_blank>
    <p><input type="text" name="T1" size="20">

    <input type="button" value="提交" onclick="javascript:{this.disabled=true;document.form1.submit();}">
    <input type="reset" value="重置" name="B2"></p>
    </form>

    Tag:JS