Category: Free software

  • 几个 Linux 小工具

    最近很忙, 有几个月没写 blog 了. 顺便写一下最近用到的很顺手的几个小工具, 当然, 都是跟 Linux 相关的. Mutt 是个 CLI 界面的邮件工具, 我主要用它从程序里发邮件. 安装 mutt 很简单, 直接 apt-get install mutt 即可. mutt 的设置可以写在当前用户的”家”里: cat ~/.mutt/muttrc set smtp=”smtp://my.server.com:25/” set from=”No reply <[email protected]>” 发送邮件的命令相当简单, 很容易和其他软件”串”到一起: echo “This is the message” |mutt -s “This is the subject” -c “[email protected]” -a /tmp/attachment.txt /tmp/att2.txt — [email protected] Httpie 是手工调试 HTTP…

  • Distribute cron jobs to hours/minutes with Ansible

    This is a handy trick to run a batch of cron jobs on different hour/minute combination so they won’t collide with each other and cause some pressure on the server. The key is to use `with_indexed_items` and Jinja2 math: – name: ansible daily cronjob {{ item.1 }}   cron: user=ansible name=ansible-daily-{{ item.1 }} hour={{ item.0…

  • Change Ganeti's Network Configuration

    “Ganeti is a cluster virtual server management software tool built on top of existing virtualization technologies such as Xen or KVM and other open source software. ” This is how I changed the secondary network configuration using Ganeti command line tools. 1, First, say I need to change the network from 10.0.0.0/24 to 10.1.0.0/16, I…

  • MySQL VS. MariaDB 之日期格式差异

    MariaDB Foundation 号称 MariaDB 是 MySQL 的替代品, 但我发现它们之间还是有些不兼容的地方(而且不在已列出的清单里). MariaDB 似乎对日期格式要求更为严格. 以下 SQL 的执行结果就很有不同, 在 MySQL 中 changed_at 是正常的 datetime, 但是在 MariaDB 中 changed_at 完全是 ‘0000-00-00 00:00:00’ 的样子. INSERT INTO … SELECT … GREATEST( COALESCE(`inspection`.`ts`, 0), COALESCE(`inspection_details`.`ts`, 0), COALESCE(`open_time_reason`.`ts`, 0) ) AS `changed_at` ON DUPLICATE KEY UPDATE … `changed_at` = VALUES(`changed_at`) 解决方法是添加一个明确的格式转换: CONVERT(… , DATETIME) CONVERT(…

  • 关于 mysql2 gem 和 MariaDB

    MariaDB 可以被看作是 MySQL 的增强版, 在绝大多数情况下用 MariaDB 替代 MySQL 都能取得不错的效果. 只是一些接口程序依旧把 MariaDB 当作 MySQL (这也没什么错吧), 例如安装 mysql2 gem 的时候, 我不得不如此才能把这个 gem 正常安装: sudo apt-get install libmariadb-client-lgpl-dev libmariadb-client-lgpl-dev-compat gem install mysql2 -v ‘0.3.14’ — –with-mysql-include=/usr/include/mariadb/ 🙂

  • 土法制造 DDNS

    自从上次我用树莓派(raspberry pi)做了个家用服务器后, 动态域名解析(DDNS)就从一种懒得过问的技术变成必须的解决方案了, 因为家里的 ADSL 的 IP 地址不是固定的, 偶尔会变化. 我看了若干现成的 DDNS 服务, 虽然有免费选项, 但限制颇多, 甚至有的要插播广告… 其实 DDNS 没啥技术含量的东西, 基本逻辑就是在客户端发送请求到服务端, 一旦发现客户端的外部 IP 地址已变, 就更新对应的 DNS 记录. 首先来写客户端, 使用的是我擅长的 Shell Script: #!/bin/bash url=’http://direct.raynix.info/ip.php’ last=’/tmp/extip’ rcpt=’[email protected]’ extip=`curl $url` echo $extip |diff $last – if [ $? == 0 ]; then exit 0 else logger ‘last IP: ‘ `cat…

  • 小试 MariaDB Galera Cluster

    前些时, 难得老板关注新技术, 哈哈, 我于是有机会尝试一下数据库服务器集群. 什么是 Galera Cluster? 简单的说就是3个或以上的 MariaDB 服务器相互作为镜像. 详细介绍在这里. 我按照 Digital Ocean 的指点, 用 AWS 上 3 个虚拟机做了个最小的集群, 下面是我的一些心得(针对 MariaDB 10.0.17): 首先集群的成员个数一定是奇数, 也就3, 5, 7… 因为有的时候个别成员的数据出现异样的时候, 整个集群会以”少数服从多数”的方式修正数据. 虽然集群是 master – master 方式进行数据同步的, 但如果多个成员同时更新相同的数据集合时, 集群内就很容易出现冲突, 这也就降低了性能以及可靠度. 目前我觉得可行的应用方式, 就是将所有的数据更新(insert, update, delete)都集中到一个成员上, 然后所有的查询(select)可以由所有成员分担. 就好像传统的 master – slave 方式, 嗯, 比较失望, 不过至少倚靠 HAProxy, 当一个成员挂了会自动有另一个来接替, 也不会耽误太多的事情. 估计还有一段距离才能把 Galera…

  • 利用 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 在目标服务器上运行即可. 记得把<…