mysql5.5禁用innodb引擎方法

[| 不指定 2012/05/30 13:44]
    今天发现有一个备份的mysql数据文件夹异常变大,一查发现是多了三个文件:ibdata1      ib_logfile0  ib_logfile1,前者18m,后两个各5m,原来是迁移的时候从mysql5.0迁移到了5.5,而5.5关闭innodb启动不起来,于是我就开启了innodb,由于innodb会默认增加这几个数据文件和日志文件,导致变大。尝试设置数据文件的大小,结果告诉我最小10m,还是太大,于是探索关闭innodb的方法。
    看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句:

default-storage-engine=MYISAM
innodb=OFF

重启mysql,然后删掉那三个讨厌的文件即可。





Tags:
    一直对内存操作的速度没有数值概念,只泛泛的知道memset影响效率,反复分配释放内存影响效率,具体速度如何,从来没试过,今天试验了一下。

    写了个程序,分配一个指针数组,挨个分配内存,然后挨个释放。使用的是一台2核16g内存的虚拟机。gcc版本3.4.2

    先是分配了1w个100字节块,发现5ms以内即可完成。
    然后扩大到500字节块,速度没什么变化。

    然后分配100w个字节块,平均需要270ms左右。
    字节块扩大的2k左右,大概5s完成。
    扩大到5k左右,大概12s左右。
    以上数据均为malloc+memset数据和calloc数据,两者不相上下。

    只malloc不memset,大概能缩短20%左右,可见memset对速度还是有一定影响的,不过对于性能要求不是那么严苛的程序,设置一下提高程序稳定性也是值得的。避免某变量忘记初始化出现野值的问题。



Tags:
    wp的速度慢是出了名的,主要是因为php的执行速度比较慢,页面间require的层数比较多,除了关闭不必要的插件外,在php端做字节码缓存也有不错的效果,开启字节码缓存很简单,相关的php扩展也有很多个,在这里选了apc扩展,直接apt-get install php-apc然后重启php即可。经试验发现wp的执行时间缩短了一半以上,效果相当的不错。


    然后发现mysql信息里提示慢查询的数量比较多,可惜之前没有开启记录,在my.cnf里加上如下三条即可。

log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

记录执行时间超过2秒的和没有用到索引的查询日志到mysql-slow.log中,这样就可以对sql语句进行调优了。



Tags: ,
    对于wordpress开启静态化url时如何在nginx下配置重写rewrite规则,网上一大抄的一个方式是说这样配置:

    if (!-e $request_filename)
    {
       rewrite ^(.+)$ /index.php?q=$1 last;
    }

    看起来没什么错误,但实际使用中总发现静态文件也被rewrite走了,去nginx官网发现有了新参数:

    在location /段里加上一句:try_files $uri $uri/ /index.php?q=$uri&$args;


    ok了,轻松愉快。


Tags: ,
    现在数据定期备份,使用的命令是mysqldump -uabc -pabc --lock-all-tables --all-databases > db.sql

    那么备份用的账号需要哪些权限才能进行这些操作呢?

    首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。

    这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。


Tags:
    今天下载一个资料,直接下载下不了,挂ssh代理拖又太慢了,着急睡觉,用vps下载发现这个地址还做了防盗链,要支持js,运行一下才能对ip进行授权,进而下下来,否则直接返回503错误。虽然模拟一下js运行的网络协议可行,但时间代价太大,那个搞出来都早下完了。于是搞了一个最简单方法。

     挂代理下载,这样代理vps的ip得到了授权,然后在vps上直接wget即可。

     但两台vps,一台实验可行,一台无效。纠结,可行的那个空间不足了。不过只要有一个行就ok,在有空间的那台vps上运行ssh -N can@canvps.com -D 127.0.0.1:9001,建立隧道。然后curl --socks5-hostname 127.0.0.1:9001 -o file http://addr/file

      搞定,可以睡觉了。等明天下完了再拖下来。



    从sendmail迁移到postfix,由于在服务器上有邮件转发服务,之前对于任意目标邮件地址都转发到固定账户,然后由一个分拣程序根据规则分发。sendmail在/etc/mail/sendmail.mc里添加:define(`LUSER_RELAY',`local:default_account')dnl,然后make -C /etc/mail重新编译一下即可。

    对于postfix就复杂很多了,参数有本地alias,virtual alias等等很多概念,刚开始尝试virtual alias,用virtual_alias_maps指定对应的正则文件,同时需调用postmap编译一下正则文件成db。设置了几条正则,发现总是命中第一条,奇怪,后来在正则表达式都加了^和$进一步限定了一下才好,比较奇怪。但后来发现针对用户名做alias不可行,因为向外发出的邮件也会做alias,导致无法发邮件出去。
    然后尝试alias_maps和alias_database,这两个参数的区别没看出来,看文档说是都是针对本地邮件的规则,默认都是/etc/aliases文件,但这个文件不支持正则,因为用的是:alias_maps = hash:/etc/aliases,尝试了一下alias_maps = regexp:/etc/postfix/aliases,发现会死循环。也比较恶心。当然,这个aliases文件也需要调用newaliases编译。

    最后又回到使用virtual_alias_maps方式,因为找到了一个方法,原来可以对域设置默认值,这样只要在/etc/postfix/virtual设置:@domain.com default_account 就ok了。然后使用virtual_alias_maps = hash:/etc/postfix/virtual,重启postfix即可。



    postfix功能强大,配置也复杂不少,文档不是很丰富。配置坑很多,有待研究。


Tags:
    今天在一台新机器上调用mutt时发现一个问题,报找不到dst@example.com这个文件,而dst@example.com是邮件的目的地址,命令在centos上运行正常,在ubuntu上就不行了,查了下,原因是我用了管道向mutt传送正文,并且用-s指定了标题,目标邮件地址跟在标题后面,导致新版mutt认为目标邮件地址也是一个标题。在地址前加上两个减号就ok了。

    echo ‘my comment" | mutt -a file -s SUBJECT -- dst@dst.com


    这时还是发现报错,说邮件过大,原来postfix默认邮件大小是10m,而我发送的备份邮件单封是20m,所以需要在/etc/postfix/main.cf中添加配置:message_size_limit = 0  不限制大小。ok了。



Tags: ,
    前几天百度快照和流量都恢复了,心情很好,但今天看收录时突然发现迁移前服务器绑定的那个临时域名居然也在收录之列,这个不是一个好的现象,因为如果爬虫同时对两个域名同时抓取,会得到相同的内容,对于重复内容是很不利于收录的。查了下快照,发现百度依旧动作很慢,收录只有一页,还是迁移前的那个测试页,google则全都收录了,怪不得迁移时google非常活跃,现在回想应该不是爬主域名,很可能是发现那个临时域名指向的站点大更新,在爬那个。

   纠结的是nginx默认配置居然不打印请求的host域名,无法考证之前爬虫爬取情况,亡羊补牢,幸亏nginx默认留空了日志第二个字段,打印的是“-”,正好用来打印域名,将-修改为$host,重启后就打印了。


   对于已经收录的临时域名,需要将流量都导入到主域,在nginx里配置了一下301跳转:

    if ($host = 'tmpdomain.com' )
    {  
        rewrite  ^/(.*)$  http://maindomain.com/$1  permanent;
    }



   ok
Tags: ,

printf空指针NULL的问题

[| 不指定 2012/05/16 17:52]
    今天发现程序中有几个地方在没有校验指针为NULL的时候进行了打印日志操作,在字符串处理函数中使用NULL指针不是什么好事,研究了一下,发现在一些的linux发行版中,printf("%s",NULL)会打印一个“(NULL)”,而在solaris中则会出core,windows下也没有问题。

    可见不同的c库对于这个行为的实现不太一致。

    使用中还是要尽量避免这种用法,不过每次打日志前都要判断指针情况确实比较恶。




分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]