前些日子使用LEDE自带的opkg包管理器安装了一个mysql,一直使用的挺正常的,今天突然心血来潮,想看一下这个自带的mysql的版本,果不其然啊,5.1,感觉应该算是比较早的版本了,而且只支持少数的编码方式。于是打算移植MariaDB到LEDE上。
首先想到的是通过源码编译,因为我现在已经有了CMake,但是考虑到树莓派的性能,最终放弃了这个想法。我记得当时用PI编译Node花了一整个下午的时间= =
最终我采取了一种投机取巧的方式来安装MariaDB,硕士安装,起始就是一个文件的移植。
具体步骤:
1、到http://fr.rpmfind.net/linux/RPM/Distribs.html下载MariaDB Server和errmsg。
下载地址:
ftp://fr2.rpmfind.net/linux/opensuse/ports/update/leap/42.3/oss/armv7hl/mariadb-10.0.31-23.1.armv7hl.rpm
ftp://fr.rpmfind.net/linux/opensuse/ports/update/42.2/armv7hl/mariadb-errormessages-10.0.31-20.7.1.armv7hl.rpm
2、紧接着按照http://fr.rpmfind.net/linux/RPM/opensuse/updates/leap/42.3/oss/armv7hl/mariadb-10.0.31-23.1.armv7hl.html中的指示安装所有缺少的库。(我只缺少libaio,装一下就好了)
3、解包刚刚下载的两个rpm包,Windows用户可以使用7z解包。
4、合并解包出来的文件
5、复制到LEDE系统的相应位置(这点我不在详细说了,我只复制了/usr目录,像etc目录本来就与LEDE不兼容,我就没有复制)
6、修复二进制程序的权限
7、mysql_install_db (之前需要配置my.cnf,别忘记咯,我以前配置好了,直接用以前mysql的就好)
8、通过--skip-grant-tables修复root密码和主机访问权限,我这里直接开放了%主机。
9、编写/etc/init.d/mysqld这个启动文件
#!/bin/sh /etc/rc.common
# Copyright (C) 2010-2011 OpenWrt.org
START=95
STOP=10
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
SERVICE_STOP_TIME=9
PROG='/usr/sbin/mysqld'
start() {
local conf='/etc/my.cnf'
local datadir="$( sed -nE "s/^\s*datadir\s*=\s*('([^']*)'|\x22([^\x22]*)\x22|(.*\S))\s*$/\2\3\4/p" "$conf" )"
[ -d "$datadir" ] || {
logger -s "[ERROR] datadir '$datadir' in '$conf' does not exist"
return 1
}
[ -f "$datadir/mysql/tables_priv.MYD" ] || {
logger -s "[ERROR] can not detect privileges table, you might need to"
logger -s "run 'mysql_install_db --force' to initialize the system tables"
return 1
}
service_start "$PROG"
}
stop() {
service_stop "$PROG"
}
10、启动
killall mysqld
/etc/init.d/mysqld restart
总结:移植过来的MariaDB的确有着以前mysql不具备的太多太多特性与功能了,包括全字符集的支持、log pool等等。