配置全世界最小的 MySQL 服务器——如何在一块 Intel Edison 为控制板上安装一个 MySQL 服务器。
在我最近的一篇博文中, 物联网,消息以及 MySQL ,我展示了如果 Particle Photon 的板子开始构建你自己的物联网。那个实现很棒,不过因为 Particle Photon 板子没有任何本地的存储,所以需要稳定的互联网(wi-fi)接入。如果你没有一个可靠的网络访问 (例如在一些边远的地方) 或者需要某些很小的东西来存储数据,现在就可以使用 Intel Edison 了。我甚至在 Edison 安装过 MySQL,这使其成为了世界上(在体积上)最小的 MySQL 服务器! 其它的选择包括:
Raspberry Pi (我的大学同学 在 Raspberry PI 上面安装了 Percona 服务端 )
基于 Android 的系统 (例如 Nexus 7: Vadim 在 Nexus 7 上安装了 Percona 服务端 )
Intel Edison 是一个小巧的计算机,基于 22 nm 的 Silvermont 双核 Intel Atom CPU, 主频 500MHz,运行 Linux (叫做 Yocto 的基于 Ubuntu 的发布版)。为了对 Edison 进行编程,我们需要一块 接口板 。可以选择的板子包括兼容 Arduino 的接口板 (包含了 SD 卡) 还有 Intel 接口板。
安装和配置是直观的。我使用了 在 Intel Edison 板子上开启 Yocto 项目 的指南来对板子进行安装和配置。 首先我们需要通过串口来连接 Edison,并对 sshd 和 Wi-Fi 进行配置;完成后我们就可以使用 SSH 连接到 Edison 了。
因为 Linux 通用的二进制文件是兼容 Yocto Linux 的(因而你无需编译任何东西),所以 MySQL 的安装相对比较简单. 有两个坑:
Yocto linux (还有官方的资源库) 默认并没有包含 MySQL 所需要的库: libaio1, libcrypto, libssl
内部存储比较小,而 MySQL 5.7 二进制文件不适合放到任何分区。我必须删除一些 “tests”以及其它我并不需要的东西。真正安装的时候可以使用 SD 卡 (SD 插叙在一些板子上是有的)。
为了安装库文件,我遵照这份优秀的指南: Edison 包 repo 配置 ,使用了非官方的 Edison 资源库。设置很简单:
要配置你的 Edison 从这个 repo 获取包,请用下面这些东西替换掉 /etc/opkg/base-feeds.conf 中的东西(其它 opkg 配置文件不需要改变):
src/gz all http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
之后我们需要对库进行安装:
# opkg install libaio1_0.3 libcrypto1.0.0 libssl1.0.0
最后我们可以下载 Percona Server 5.6 并将其放到某个地方 (使用 my.cnf 中的 basedir 指向安装路径):
# wget https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-5.6.25-73.1/binary/tarball/Percona-Server-5.6.25-rel73.1-Linux.i686.ssl100.tar.gz
请注意最新的 Percona Server 5.6 依赖于 Numa 库,而对于 Yocto 没有这样的库 (对 Edison不影响)。因此 5.6.25 是你可以在这里安装的最新的 Percona 服务端。
下面在 Intel Edison 上所进行的简单(并且相当无用 )的基准测试:
root@edison:/usr/local/mysql# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 74 model name : Genuine Intel(R) CPU 4000 @ 500MHz ... mysql> SELECT BENCHMARK(10000000,ENCODE('hello','goodbye')); +-----------------------------------------------+ | BENCHMARK(10000000,ENCODE('hello','goodbye')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (18.77 sec)
著名的 MySQL Bug#2 , 提交于 2002 年 9 月12 号,并说明“MySQL Connector/J 并不能烤面包”。使用 Intel Edison 和 Arduino 兼容的接口板现在就可以修复这个 bug 了: 现在不仅 MySQL Connector/J , MySQL 服务端本身也可以为你烤面包了 ! 这可以借助于 UDF,或者在 MySQL 5.7中使用 Query Rewrite 插件 ,因此你可以执行 MySQL 查询:
mysql> make toast;
对于实际的实现,你既可以”黑“掉一个手头的烤面包机来接入接口板的针脚,或者使用兼容 Arduino 的 Robotic Arm 。好了, MySQL,为我烤面包吧!