-
利用 bash 命令做 SQL 数据修补
如果是把一个 DB 或者一个 table 从一个服务器送到另一个, 那么使用 mysqldump 命令就可以了. 但有的时候, 需要的数据可能只是若干条记录, 就不能用 mysqldump 了. 奇怪的是我 google 了一番居然也没找到很方便的方法. 求人不如求自己吧, 下面是用 bash 命令的解决方法: mysql <database> -uroot -e “select * from <table> where <condition>…” |tail -n +2 |sed -e ‘s/^/(“/g’ -e ‘s/$/”)/g’ -e ‘s/\t/”,”/g’ |while read values; do echo “insert into <table> values $values”; done 然后把输出的 SQL 在目标服务器上运行即可. 记得把<…
-
开始用 Arch Linux
用 Linux 的好处是选择多多, 但有的时候确实很难选, 俗称”挑花了眼”. 我基本上的要求有: 相对新潮, 各个模块的版本都是最新的才好(当然, 不是说服务器上的系统) 桌面是(或者可以是) Gnome Shell. 很多人恨 GS 恨得牙龈都发炎了, 但我对 GS 情有独钟 社区活跃, 有问题多半能 Google 到结果 没有商业气味, 没有大公司在背后控制 这样筛选下来 Ubuntu 太商业化了, 奔着下一个 WindowsXP 的路子去了; Fedora 社区不给力; Debian 太保守… 唯有 Arch Linux 几乎完美. 唯一麻烦的是, AL 相对高端, 没有”一直点 Next”类安装界面, 安装 AL 是从 fdisk, mkfs, mount, chroot 这样的命令开始的(当然比起 Gentoo 的 gcc, make,…
-
在 Debian Wheezy 上用 Discourse 搭建论坛
以新建的 VM 为例, 下面是安装直到运行 的一些必要步骤 1, 首先是系统必须的软件包, 这里我用nginx作为HTTP服务器, 其他的也可以的: sudo apt-get install build-essential nginx imagemagick 2, Discourse 需要的数据库和缓存. Wheezy 缺省的 postgresql 是 9.1 的, 可以参考这个来装 9.3: sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-contrib-9.3 sudo apt-get install redis-server 3, 添加 discourse 系统/数据库用户, 建DB, Discourse 将以此用户的身份运行(git clone 部分就省略了). sudo adduser discourse –home /var/www/discourse sudo su – postgres -c…
-
LVM 快照(snapshot)的第二种用法
之前我已总结了 LVM 快照的第一种用法: 利用 LVM 在线抓取 MySQL 数据库快照, 也可以扩展到任何需要在线生成磁盘快照的应用. 自 LVM 2.0 以来, 镜像分区不只是只读的, 而且可写. 而写入快照分区的一种应用就是造”沙盒(sandbox)”, 在 Xen VM 环境的具体步骤如下: 1, 假设供测试的虚拟机 test, 分区是 /dev/vm/test-disk, 为其生成 10GB 快照分区 test-ss: lvcreate -s -n test-ss -L10G /dev/vm/test-disk 2, 将 test 虚拟机关机, 可以 ssh root@test “shutdown -h now” 或者 xm shutdown test 3, 复制 /etc/xen/test.conf 到 test-s1.conf, 并将磁盘分区…
-
读后: 大教堂与市集
这本书完美的解答了若干关于开源(open source)的问题. 作为一名开源软件的死忠, 我只能遗憾没早些读完它. 书中的很多观点和论据我就不重复了, 只说说我曾经赞同的错误论点吧. 首先, 我曾经以为, 开源软件的存在是离不开闭源的商业软件的, 因为给开源软件做志愿者是没有收入的, 所以这些”志愿者”们其实是靠商业软件的销售来养活的. 这是错误的. 首先, 不是所有的软件开发人员都是以开发商业软件为工作的. 举个最简单的例子, 淘宝网这类电子商务企业雇佣了很大一批开发人员, 但是淘宝有卖什么”淘宝”牌的软件么? 貌似没有. 他们卖的是服务. 类似还有众多为大企业例如金融/电信工作的开发人员们.因此为软件供应商例如微软工作的开发人员只是一个小部分而已. 那么大企业为何乐于使用并回馈开源软件? 淘宝使用开源的 MySQL 数据库, 并将自己的一些改进回馈到开源社区. 那么这样做淘宝有损失么? 基本没有, 因为淘宝的优势绝对不是使用了一个开源的谁都可以使用的数据库软件. 而如果淘宝拒绝交出对 MySQL 的改进, 那么 MySQL 升级版本就没有这些改进, 那么淘宝每次升级(因为升级版本可能有其他人提交的改进)就不得不自己打补丁, 自己再测试了. 所以开源是互利的开发方式. 我从前以为某某公司为开源贡献就是因为有某种途径获利的阴谋论是不可靠的. 要为商业软件付费是因为要保护知识产权? 当然我是反对盗版的, 但保护知识产权绝对不是以 CD-KEY + 激活等等给用户添麻烦的理由. 而软件的生命在于用户群, 没人用的软件就是死掉的软件, 它的知识产权也就成了笑话. 这样的例子就是 UNIX. 曾经百花齐放的 UNIX 系统, 因为各家厂商为了”保护各自的知识产权”, 各自的改进没有相互共享, 后来导致…
-
Linux 命令行上的文字处理
总是有些用户, 明明是自己手抖点错了, 却偏偏要怪服务器出问题. 如果让我选择相信一个人还是一台机器, 那… 还是选机器比较放心. 当然也不能冤枉好人, 于是如何从若干 GB 的服务器日志里找到线索就成为解决问题的关键了. 首先是 grep. grep 就好像是个过滤器, 将无关的内容滤掉, 却从不漏下真相. 假设服务器日志是 server.log, 其中包含时间, 地点, 人物: 1, 找出所有含 beijing 的记录 grep beijing server.log 2, 包含 2013-12-01 当天, 在 beijing 关于 user 的记录 grep -E -e ‘2013-12-01.*beijing.*user’ server.log 3, 也可以将 grep 串联起来, 逐步缩小包围圈, 这样如果个别记录不符合时间, 地点, 人物的顺序, 也不会被漏掉. 当然我觉得日志还是规矩一点的好. grep ‘2013-12-01’ server.log…
-
用 MariaDB 替换 MySQL
自从 MySQL 被邪恶的 Oracle 收购后, 貌似就到了后娘手里, 基本没什么发展. 不过还好, 原创班子已另起炉灶, 在 MySQL 5.5 的基础上做出很多改良, 发布了 MariaDB 5.5. 另外一个好消息就是终于看到了国人在开源圈子里的贡献: MariaDB 10.x 分支就包含了来自淘宝的两处贡献: https://mariadb.com/kb/en/what-is-mariadb-100/ <–在这页上找 taobao 即可. 希望这样的案例越来越多吧. 免费使用开源软件, 在事业成功之后回馈开源社区, 这是个良性循环. 目前我试用了 MariaDB 5.5, 是 MySQL 5.5 的完美替代品. 安装方法在此: https://downloads.mariadb.org/mariadb/repositories/#mirror=aarnet_pty_ltd&distro=Debian&distro_release=squeeze&version=5.5 另外如果用 Ruby 的 mysql2 gem 的话, 需要安装 libmariadbclient-dev(debian/ubuntu). 而如果 innotop 这个小工具不灵的话, 很可能需要安装 libterm-readkey-perl. 🙂
-
在 Linux 中充分利用多核 CPU 来转码
上回写的<听美剧, 练英语听力>之后, 发现忘了放个批量处理的脚本. 下面补上, 顺便练习一下多核心协同处理. 嗯, 手机都4核了不是? 用到的命令类似: avconv -i your.mkv -vn -acodec libmp3lame -ac 2 -f mp3 your.mp3 简单的 bash 单循环写法: ls *.mkv |while read i; do avconv -i $i -vn -acodec libmp3lame -ac 2 -f mp3 $i.mp3; done 这就只用到了一个 CPU 核心. 如果将 avconv 放到后台执行就可以做到多进程, 但又不方便控制进程数, 当进程数远远大于 CPU 核心数时就可以体验一下一台服务器快被烤熟时的感觉了. 后来发现 xargs 支持指定数目的进程, 简直是无法要求更多了: ls *.mkv…