Category Archives: 技术

linux/macOS下解压中文乱码的zip包

从 windows 下压缩的zip包如果文件或者目录名有中文,在典型的 linux 环境(如ubuntu)和 macOS 下按照正常zip解压都会乱码。google一下搜到的答案有两种,一种是hack一下unzip的代码重新编译,还有一种是另外写一个解压的工具代替unzip。 其实这是一个困扰了linuxer很多年的老问题了,能搜到好多人问和答,但至少在半年前(6月份)我遇到的时候,没有让我满意的简单的解决通用的方案。 当时我是,遇到产品的同事给了一个做好的交互原型,输出一个zip包,而基本上公司里其它技术都是用linux或者macOS。参考了搜到的解决方案,用 php 的 zip 扩展来解压,并转换 GBK 为 UTF-8 即可。 存到自己home目录下的bin里面, 比如放到 ~/bin/punzip,然后 chmod +x ~/bin/punzip,以后就可以比较自由的直接调用 punzip foo.zip 来解压了。 依赖了 php 的 zip 扩展,如果执行时提示“php zip extension is needed.”(比如默认macOS就没有加载zip扩展,ubuntu有),需要修改 php.ini 添加 extension=zip.so,具体按照提示中的手册页面做就好。 <?php/** * 解压含有文件名为gbk编码的zip包,到当前目录 */if (!extension_loaded(‘zip’)) {    printf(“php zip extension is needed. See http://www.php.net/manual/en/zip.installation.php\n”, $argv[0]);    die;}if (!isset($argv[1])) {    printf(“Usage: php %s filename\n\n”, $argv[0]);    die;}$f = zip_open($argv[1]);while ($e = zip_read($f)) {    $filesize = zip_entry_filesize($e);    $filename = iconv(‘GBK’, ‘UTF-8’, zip_entry_name($e));    if (!$filesize) {        mkdir($filename);         continue;    } else if (!zip_entry_open($f, $e)) {        continue;    }       file_put_contents($filename, zip_entry_read($e, $filesize));    echo “$filesize\t$filename\n”;     zip_entry_close($e);}   zip_close($f);

Posted in 技术 | 2 Comments

Thrift – 开源多语言RPC框架

RPC (wiki) 在大规模的互联网应用后端技术中非常常见,我们熟悉的搜索引擎、门户、网游服务器等,后端实现中都有涉及。主要原理是基于内网 socket 解决多机多模块之间的数据通讯问题。或者可以简单理解为,将单机的进程间通讯 (IPC) (wiki),扩展到多机通讯,解决可扩展性问题。 Thrift 是由 Facebook 开源的一个 RPC 框架,现在已经挂在 apache.org 下了。主要的几个好处: 支持非常多语言,包括在 WEB 开发中很常用的 PHP,以及最重要的 C++/Python/Java 等 WEB后端常用语言,当然,还包括很 cool 的 Ruby、Erlang。 完整的 RPC 框架实现,用脚本生成通讯相关的框架代码,开发者只需要集中精力处理好业务逻辑。比如搭建一个 Hello World Service 只需要几分钟。 拥有被 Facebook、Last.fm 等不少大规模互联网应用验证过的性能和可用性。 在 PRC 通讯方面,其实已经成熟多年。比如百度内部是自己定制的二进制协议,比如C++下使用较多的 ACE 框架。而 … Continue reading

Posted in 技术 | 6 Comments

单机启动多个MySQL Server

有时候我们需要在一台服务器启动多个 MySql Server。有一个方法是使用官方的多server管理工具 mysqld_multi ,适合多server运行时的管理,有专用的配置项方便日常管理维护。或者如果不想用 mysqld_multi,我们看看幕后都做了什么,简单的自己动手配置一下。 这篇来讲讲怎么通过自己配置,启动多个mysqld。 无论是发行版包管理工具安装的,还是自己编译安装的,都会默认读取 my.cnf 文件,位置一般是 /etc/my.cnf 、$MYSQL_HOME/my.cnf 等。发行版包管理工具一般只会安装在固定的位置,不方便同时装两个 mysql server。自己编译的话,也不方便临时再 install 到其他位置和读取另外的 my.cnf 文件。 参考 MySQL 官方手册的内容,使用现有的mysql系列可执行程序,在启动server和client时,指定 –defaults-file 参数,即刻达到效果。 1、编辑一个新的 my.cnf 文件用于新的server sudo cp /etc/my.cnf /etc/my.2.cnf sudo vim /etc/my.2.cnf 修改配置,防止和原有配置冲突。主要需要修改的有: 端口(port)、socket 文件路径 (socket)、数据文件路径 (datadir); 如果用到 … Continue reading

Posted in 技术 | Tagged | Leave a comment

读《MySQL性能调优与架构设计》

《MySQL性能调优与架构设计》(豆瓣链接)(卓越链接)是阿里巴巴的DBA 简朝阳的书。 前段时间读了一下,综合来说还不错,少有的几次读的很畅快的书之一了。作者对MySQL的各部分知识掌握扎实全面,有不少内容是需要深入了解MySQL运行机制后才有的结论。 书分基础、优化、架构三部分。 基础篇 各种介绍,属于初步了解MySQL的程序员和DBA入门需要掌握的基础知识。 性能优化篇 展开讲了MySQL常遇到的各种锁机制、Server参数调优、存储引擎调优、Query优化等等。对MySQL性能调优相关内容有兴趣的话,读起来会比较有兴趣。这里涉及的知识是有一两年经验的LAMP程序员和DBA应当了解的相对高级一些的技巧和内部实现原理。 架构设计篇 展开讲了Replication复制原理、Cluster、大型系统的DB切分方案、监控。其中Cluster因为之前一直生产环境下可行性不高,我不太熟悉。Replication部分是比较基本需要了解的。数据切分虽然篇幅比较长,但介绍的比较泛,可能因为面向DBA有关,在与应用程序的结合上表述不多,实际应用时还有许多细节需要考虑。监控方面值得参考,结合附录Server status和variables参数含义一起理解,是目前不多的对监控介绍比较全面的资料。 此外,有一个小遗憾是第一版笔误和文字错误较多,以及部分内容因为篇幅所限略显不够严谨,虽然这些都不影响这是一本对MySQL爱好者不错的书。好消息是第一次印刷因为卖的好,基本上已经卖完了。作者在blog上更新了勘误表,部分勘误已经交付第二次印刷,新买到的应该会好不少。

Posted in 技术 | Leave a comment