MySQL的开源热备份工具Xtrabackup发布了1.0正式版,Windows下可用

03月 10th, 2010

    Xtrabackup 是 percona公司(mysqlperformanceblog)的开源项目,目的是实现类似 innodb 官方的热备份工具 InnoDB Hot Backup 的功能,可以帮助我们对 MySQL InnoDB 类型的数据库表进行在线热备份。

    Xtrabackup中包含两个工具:

    * xtrabackup - 用于热备份innodb、xtradb表的工具,不能备份其他表。
    * innobackupex - 对 xtrabackup 封装的 perl 脚本,提供了 myisam 表备份的能力。

    Xtrabackup可以做什么:

    * 在线(热)备份整个库的InnoDB, XtraDB表
    * 在xtrabackup的上一次整库备份基础上做增量备份(innodb only)
    * 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

    Xtrabackup 最新的版本是 1.0正式版本,不仅仅包括了Linux平台的二进制版本和源代码版本,还提供Windows平台的安装版本,当前仅仅支持32bit的Windows操作系统。

    使用Xtrabackup对MySQL进行热备份是非常简单的,例如我们使用Xtrabackup自带的innobackupex脚本对整个数据库进行热备份,将数据库拷贝到本地的/db_backup目录:

    innobackupex –user=root –password=password –defaults-file=/etc/my.cnf /db_backup

    在备份的同时,将备份文件打包:

    innobackupex –user=root –password=password –defaults-file=/etc/my.cnf –stream=tar /db_backup | gzip >  /db_backup/db.tar.gz

    将备份文件直接通过网络备份到一台远程服务器:

    innobackupex –user=root –password=password –defaults-file=/etc/my.cnf –stream=tar /db_backup | ssh dbbackup@remote_host cat > backup.tar

    直接通过ssh端口,将数据库热备份到一台远程的服务器上面去。

    总之 Xtrabackup 为 MySQL 带来了企业级的数据备份机制,让 MySQL 在大容量存储方面扫除了后顾之忧。

李毅中:整顿矫枉过正 并非封杀个人网站

03月 9th, 2010

    3月7日报道:在凤凰网的两会报道专题中,凤凰卫视主持人吴小莉邀请了工信部部长李毅中参与网友问答,针对是否全面封杀个人网站一问,李毅中说:整顿矫枉过正并非封杀个人网站。李毅中表示,在整治过程中,确实存在着矫枉过正的办法,但并非全面封杀个人网站,并且这一整治还将持续下去。

    在视频中,凤凰卫视主持人吴小莉邀请了工信部部长李毅中回答网友提问,有网友问到,目前中国互联网是否在全面封杀个人网站,请问李毅中部长如何看待这个问题,李毅中表示,这个问题存在误解,最近网上较为敏感的问题就是反映互联网与手机Wap网站存在不少黄色淫秽信息,工信部针对这个问题采取了相应的措施,及时地发现、排除、删堵,在这几条措施里,牵扯了针对个人网站采取了矫枉过正的办法,就是先将网站全部先停掉,停掉以后,先进行清理,再一个一个的恢复,可能就会出现这样的情况,这个网民原来上的这个网站现在无法访问了,因此产生了相应的意见,李毅中表示,这确实是整顿中可能出现的一些问题,希望广大网民理解,李毅中说,其实工信部并不是针对个人网站进行全面封杀。

    在对话中,吴小莉问到,在发现一个网站有问题的时候,先停掉它的访问,没有问题然后慢慢的再恢复,这个过程要持续多久?

    李毅中表示,在今年第一季度里,还是要加大工作力度,这样才能够在专项整治上,能够起到一定的效果,因此整治还将持续一段时间。

20100309-pic.jpg

    工信部部长李毅中表示并不存在全面封杀个人网站的行为。李毅中表示,在整治过程确实有一些矫枉过正的办法。

    来自:2010-03-09 站长之家

精彩的敏捷开发建议

03月 9th, 2010

    网络上流传了很多关于敏捷开发的具体建议,加起来可能超过上百条,有些内容很精彩,而有些说法比较片面,值得商榷。收集和整理这些至理名言是我的一项工作。

    下面是我作为一名具有近 20 年编程经验的“编程达人”对这些建议的分析和评论,供大家参考、拍砖。

    * 完整地做完第一件事后再开始第二件。软件开发的一个大问题就是同时做几件事情,这将不可避免地使得某些工作被废弃从而造成浪费。用厨房来比喻就是:“先上这道菜,再开始烧下一个。”

    不一定。并行工作还是必要的,但是要有限度。

    * 不要害怕做决定;不要害怕改变先前的决定。最大可能地延迟决策,直到必须做决定的时候。一旦有新的信息了,不要害怕改变先前的决定。

    不错,这是敏捷精神所在。

    * 度量、度量、度量。敏捷开发帮助处理了未来不确定性的问题。但是对于过去,应该没有不确定的事。

    说得非常好!

    想一想 NBA 梦之队的实时技术统计,就可以知道度量的最高境界了。

    * 设计是为了人,而不是系统。太多的程序员偏离了设计的目的,而更关注技术本身。软件最终的成功取决于让人们有效合作并增加商业价值。

    说得太好了!

    提供业务价值的业务建模绝对重要。

    * 过早地进行优化是万恶之源。仅仅基于对代码的静态理解就直觉地判断什么对整体性能最为重要,结论几乎总是错误的。相反,应该衡量整个系统的行为,随后来识别性能问题。

    很好的建议!

    * 决不过度强调功能的通用性。这也就是著名的“YAGNI——你不会需要它的(You Aren’t Going to Need It)。”

    对!

    * 不要用代码行数来度量代码。完成特定任务所需的代码行数,不同的程序员之间和编码风格之间差异很大。应该去统计功能用例的数目。

    绝对正确!

    * 软件是可塑的。不像实体制造业,软件可以很容易地获得显著改变。

    不全对,虽然是很容易,但可能也是高成本的。

    * 不要去发明新的语言。XML的出现引领了无休止的专门订制“脚本语言”的潮流,想来应该会让软件开发更加趋同。这种推理的缺陷在于,离开某个特定实施的环境,几乎从来都没能很好地精确定义操作行为。

    片面。可以去发明新的语言,比如 DSL。

PHP 编码转换实验

03月 9th, 2010

    一、utf-8 转换为 gb2312
    <?php
      //header(”Content-Type:text/html; charset=utf-8″);
    ?>
    <html xmlns=”http://www.w3.org/1999/xhtml“>
    <head>
      <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
    </head>
    <body>
      本页面编码是:utf-8 BOM<br>
    <?php
      $str = ‘陶喆’;

      echo ‘utf-8:’. $str;
      echo ‘<br>’;

      $str = iconv(’utf-8′, ‘gb2312//IGNORE’, $str);  //convert to gb2312
                      //这是iconv函数的一个bug。iconv在转换字符到gb2312时会出错。
                      //解决方法很简单,就是在需要转成的编码后加 “//IGNORE”。
      echo ‘gb2312:’. $str;
      echo ‘<br>’;

      $str = iconv(’gb2312′, ‘utf-8′, $str);  //再还原回来
             //”喆”字没有了,是因为gb2312编码里没有这个字
             //本身语法是正确的。变成 gbk 编码就可以了
      echo ‘utf-8:’. $str;
    ?>

    二、utf-8 转换为 gbk

    <?php
      //header(”Content-Type:text/html; charset=utf-8″);
    ?>
    <html xmlns=”http://www.w3.org/1999/xhtml“>
    <head>
      <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
    </head>
    <body>
      本页面编码是:utf-8 BOM<br>
    <?php
      $str = ‘陶喆’;

      echo ‘utf-8:’. $str;
      echo ‘<br>’;

      $str = iconv(’utf-8′, ‘gbk’, $str);  //convert to gbk
      echo ‘gb2312:’. $str;
      echo ‘<br>’;

      $str = iconv(’gbk’, ‘utf-8′, $str);  //再还原回来
      echo ‘utf-8:’. $str;
    ?>

    </body>

让 Apache 支持中文 Directory 的最简方法

03月 9th, 2010

    问题描述:

    我打开httpd.conf,将网站根目录设置为一个带中文的路径。设置完成以后保存配置文件,重启Apache服务,出现错误提示。

    打开logs/error.log 查看,找到错误原因是:要求文档根目录必需是一个目录。

    也就是不认识这个中文命名的文件夹。Apache 默认不支持中文目录。

    要让 Apache 支持中文目录名,最简的解决方法:将配置文件的字符编码转换成UTF-8即可。

    转换方法也很简单,在记事本中打开httpd.conf,选择“文件”->“另存为…”,弹出的窗口中选择编码为UTF-8即可。

    重新启动 Apache 服务,应该可以了。

    但还是不建议使用中文目录名,以免出现其它不可预知的兼容性问题。

    作者:张庆(网眼) 2009-3-9
    来自“网眼视界”:http://blog.why100000.com
    “十万个为什么”电脑学习网:http://www.why100000.com

校园歌曲《校园的早晨》歌词

03月 8th, 2010
  沿着校园熟悉的小路
  清晨来到树下读书
  初升的太阳照在脸上
  也照着身旁这棵小树

  亲爱的伙伴 亲爱的小树
  和我共享阳光雨露
  让我们记住这美好时光
  直到长成参天大树
  让我们记住这美好时光
  直到长成参天大树

  城里的月光
 
每颗心上某一个地方 总有个记忆挥不散
  每个深夜某一个地方 总有个最深的思量
  世间万千的变幻 爱把有情的人分两端
  心若知道灵犀的方向 哪怕不能夠朝夕相伴

  城里的月光把梦照亮 请温暖他心房
  看透了人间聚散 能不能多点快乐片段
  城里的月光把梦照亮 请守候他身旁
  若有一天能重逢 让幸福撒满整个夜晚

MySQL的SQL 语句:根据从表记录个数对主表排序

03月 8th, 2010

MySQL的SQL 语句:根据从表记录个数对主表排序

    一个主表 news,有字段 nId(自动增长),sName。
    记录:
    10 name10
    13 name13
    20 name20
    21 name20
    21 name20
    30 name20

    从表 reply,字段 nId(自动增长),pId,sReply。
    记录:
    20 aaaaa
    13 bbbbb
    10 ccccccc
    20 vvvvvv
    20 hhhhhh
    10 sssss

    从表以字段 pId 与主表字段 nId 关联。

    目的:由主表取若干记录,排序依据:根据从表中与主表关联的记录的个数来排序。

    以上述的记录为例,主表的记录顺序应该为:
    20 name20
    10 name10
    13 name13

    答案1:
    select *, count(*) as iReply from
      (SELECT a.nId, a.sName, b.sReply FROM news a, reply b WHERE a.nId=b.pId) as T
      group by nId order by iReply limit 0,3
    答案2:
      SELECT a.nId, a.sName, count(b.sReply) as iReply from FROM news a, reply b WHERE a.nId=b.pId
      group by a.nId order by iReply limit 0,3

    注:
    1,以上两例中形如 group by a.nId 的字段 nId 的值应该保持唯一性,最好是建有唯一性索引。
    2,第一例似乎比较容易理解,即从联合查表的结果中再次查表。联合查表的结果作为一个“表”,再操作它 - 注意这里的 SQL 语句的语法值得借鉴。
    3,好的解决方法应该是第二例。
    4,但以上两例的做法的最大缺点是,效率太低!联合查表是最表的笛卡尔乘积,查询数量是两个表记录数的乘积。这对于大表查询将是致命的。
       好的做法是,在主表中建一个字段表示从表的记录个数,每次向从表插入记录和删除记录时都同时修改该字段的值。则达到题目的目的,只要查主表、排序就可以了。

    作者:张庆(网眼) 2009-3-8
    来自“网眼视界”:http://blog.why100000.com
    “十万个为什么”电脑学习网:http://www.why100000.com

MySQL 的触发器、存储过程、函数、视图实验

03月 7th, 2010

    本实验完成如下结果:

    0. test数据库,userinfo 用户信息表 和 userinfolog 用户信息日志表
    1. 建立一个userinfo表新增记录时的触发器,将新增日志加入到userinfolog
    2. 建立一个向userinfo表新增记录的存储过程
    3. 根据userinfo表的出生日期字段,我们将建立一个简单算得年龄的自定义函数
    4. 创建一个userinfo的视图,调用年龄函数

阅读其余内容 »

陕西没啥好NB的(网摘)

03月 6th, 2010

    我们陕西人是没啥文化,也就出几个白居易、王昌龄、杜牧、杜甫、司马迁、玄奘、陈忠实、贾平凹、路遥、张艺谋、孙思邈,特别是那个姓张的更没文化,2008年北京奥运会的总导演而已……
    我们陕西是没啥美女,也就出几个褒姒(只过是历史上第一个美女嘛,也没什么)、貂蝉,西施,王昭君和杨贵妃  中国古代四大美女 ,也只占了四个……
    我们陕西是没啥军事人才,也就出几个张骞、吕布、李靖、郭子仪、卫青、霍去病、蒙恬、杨虎城、……
    我们陕西人是没啥政治人才,也就出了几个黄帝、炎帝、李世民、魏征、李治、于佑任、习仲勋……

阅读其余内容 »

MySQL 行锁一个问题的深入研究

03月 6th, 2010

    做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统。假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为

    Select restnum from book where id =1 ;
    — 如果 restnum 大于 0 ,执行 update
    Update book set restnum=restnum-1 where id=1 ;

    Select restnum from book where id =1 ;
    — 如果 restnum 大于 0 ,执行 update
    Update book set restnum=restnum-1 where id=1 ;

阅读其余内容 »