全部博文(685)
分类: 嵌入式
2014-10-14 10:14:45
今天Windows上的MySQL突然不能运行了,正好有一个项目需要使用MySQL数据库,于是想试试将MySQL Server部署到OpenWrt上解决一下燃眉之急。
OpenWrt的软件源上有编译好的mysql-server软件包的,可以直接安装,总共需要安装以下几个包:
上面这些软件包的体积加起来大约有3M,加上数据库文件,普通的路由器肯定是没有这么大的空间的,所以需要使用extroot将系统扩展到U盘上。
我使用的是pivot-root方式扩展,即整个系统都在U盘里,从U盘启动后直接安装就可以了:
opkg update && opkg install libreadline libncursesw uclibcxx libmysqlclient mysql-server
安装完成之后先更改一下配置文件/etc/my.conf, 主要修改datadir和tmpdir配置项, 这两个目录需要放在U盘上,最好手动建立这两个目录。
############ Don't put this on the NAND ############# # Figure out where you are going to put the databases # And run mysql_install_db --force datadir = /home/db/mysql/ ######### This should also not go on the NAND ####### tmpdir = /home/db/tmp/
mysql_install_db --force
初始化完成之后就可以启动了:
/etc/init.d/mysqld start
mysqladmin -u root password 'new-password'
mysql -u root -p
首先需要更改一下绑定的ip,修改my.conf文件的bind-address为0.0.0.0.
授权用户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
config redirect option target 'DNAT' option src 'wan' option dest 'lan' option proto 'tcp udp' option src_dport '3306' option dest_ip '10.2.2.1' option dest_port '3306' option name 'mysql'
测试
在Windows下可以通过telnet命令检测是否可远程访问MySQL服务器:
如telnet 10.1.1.238 3306, 如果成功将可以看到类似下面的输出:
配置完成之后就可以通过程序连接了:
运行mysql_install_db --force命令时提示错误,检查了一下配置文件是没问题的,后来发现是配置文件里的tmpdir目录不存在,而MySQL不会自动创建(datadir如果不存在会自动创建),手动创建这个目录后再次执行就正常了。
在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。
因为软件需要兼容SQL Server和MySQL,项目组的成员大小写习惯也不一样,所以需要将表名的大小写敏感去掉,在my.conf文件的mysqld配置项中加一行配置:
lower_case_table_names=1
由于使用了latin1字符集,使用mysql命令行客户端进行查询时,中文显示乱码。
修改/etc/my.cnf文件指定编码:
重启一下mysqld就可以看到默认的编码了:
Warning: World-writable config file '/etc/my.cnf' is ignored 140817 22:21:06 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 140817 22:21:06 [ERROR] Aborting 140817 22:21:06 [Note] mysqld: Shutdown complete
将/etc/my.cnf文件的权限改成644即可。
OpenWrt的MySQL编译时没有添加InnoDB引擎支持,而默认的MyISAM不支持事务处理。如果需要支持事务需要自己编译并添加InnoDB引擎。
这里提供一个带InnoDB引擎的MySQL下载,是编译的,版本为5.1.53,适用于ar71xx平台,下载地址:
mysql> SHOW ENGINES; +------------+---------+-------------------------------------------------------- ----+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+-------------------------------------------------------- ----+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tabl es | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign k eys | YES | YES | YES | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | +------------+---------+-------------------------------------------------------- ----+--------------+------+------------+ 5 rows in set (0.01 sec)
MySQL的默认引擎为MyISAM,如果需要改成InnoDB的话需要在my.cnf配置文件的mysqld段添加一行default-storage-engine=innodb。
如果想自己编译其它平台的可以参考他博客上的教程: