标签:
首先在menuconfig中配置mysql,具体是在Utilities->database->mysql-server。这样直接编译就可以了,不过这样默认是不支持innodb存储引擎的,估计是考虑openwrt一般是运行的硬件有关,不需要这么复杂的存储引擎(占用空间也比MyISAM存储引擎大)。但是,如果需要支持innodb存储引擎该怎么办?这类型的网上帖子不多,我是之前参照国外的论坛加自己测试得出的。
Openwrt支持innodb存储引擎
修改feeds/oldpackages/libs/mysql/Makefile
在--with-server之前加--with-innodb
修改feeds/oldpackages/libs/mysql/conf/my.cnf
在[mysqld]中加default-storage-engine=INNODB
在bind-address = 127.0.0.1下载添加
innodb
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
/etc/init.d/mysqld脚本start函数中添加
start() { local datadir=$(sed -n -e "s/^[[:space:]]*datadir[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" /etc/my.cnf) local mysqldatadir="/mnt/data/mysql/" local mysqltmpdir="/mnt/data/tmp/" local mysqlsrvdir="/srv/mysql/" if [ ! -d "$mysqldatadir" ]; then echo "create dir /mnt/data/mysql/..." mkdir -p "$mysqldatadir" fi if [ ! -d "$mysqltmpdir" ]; then echo "create dir /mnt/data/tmp/..." mkdir -p "$mysqltmpdir" fi if [ ! -d "$mysqlsrvdir" ]; then echo "create dir /srv/mysql/..." mkdir -p "$mysqlsrvdir" fi if [ ! -d "$datadir" ]; then error "Error: datadir '$datadir' in /etc/my.cnf doesn't exist" return 1 fi if [ ! -f "$datadir/mysql/tables_priv.MYD" ]; then mysql_install_db --force service_stop /usr/bin/mysqld #error "Error: I didn't detect a privileges table, you might need to run mysql_install_db --force to initialize the system tables" #return 1 fi service_start /usr/bin/mysqld }至此,基于innodb的MySQL就可以正常运行了。
上述这个莫名其妙的问题经过验证确实是由于flash空间不够引起的。解决的办法是,在路由器上挂载一个U盘。挂载U盘的配置项为:
kernel modules ->filesystems->kmod-fs-vfat
kernel modules->native language support->kmod-nls-cp437/kmod-nls-iso8859-1/kmod-nls-utf-8
kernel modules->usb support->kmod-usb-core/kmod-usb-ohci/kmod-usb-storage/kmod-usb-usb2
。
还有,在init初始化脚本中如果顺序执行多个mysql操作的时候,如mysql_install_db --force命令之后接着mysqladmin -u root password ‘123456‘则可能会失败,因为还没等mysql_install_db执行完成就会执行mysqladmin命令。解决此问题的办法是加sleep时间,具体多长时间可以视情况而定。
Openwrt上mysql innodb的使用及相关异常情况
标签:
原文地址:http://blog.csdn.net/cblou/article/details/43489837