mysql 嵌入式_MySql移植到嵌入式Linux平台
最近在做考勤机系统,硬件采用的cortex-A8,哈哈,其实是有点浪费的,2410就可以的。所以就要考虑到考勤数据的存储问题,本来是打算用sqlite数据库存储的,可是后来发现,这个数据库只是一个本地数据库,无法进行联网访问,这样的话,服务器上的数据客户端是不能通过远程连接数据库的方法连接访问的,但是还可以通过其他方法,比如socket的方法,服务器把客户端请求的数据发送给客户端,不过感觉这样比较麻烦,所有后面采样MySql数据库,这样就涉及到MySql数据库的移植了。
在网上搜索了下,找到一篇文章,我就是按照该方法一步步的成功移植了MySql-5.1.51版本,以下是原文
MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档:
http://blog.chinaunix.net/space.php?uid=9701860&do=blog&id=285428,因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。
进行如下步骤完成移植:
1) 下载mysql5.1.51:
http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/mysql-5.1.51.tar.gz
2) 安装编译器:用的是EmbedSky提供的4.3.3的编译器。gcc之类的都是Fedora14自带的。
3) 编译PC版本的mysql备用
a) 解压mysql-5.1.51到/opt/mysql-5.1.51: tar zxvf mysql-5.1.51.tar.gz
b) cd mysql-5.1.51
c) ./configure -prefix=/usr/local/mysql
d) make 注意,这里无需运行make install,以为主要是为了用pc版本里的gen_lex_hash库。
e) 将文件夹mysql-5.1.51改名为mysql-5.1.51-pc备用。(将gen_lex_hash单独备份保存一下)
f) 文档上说这里会出错,但我在编译的过程中没有碰到,唯一的问题是编译了arm版本的,重新通过改文件夹的名字回头编译pc版本的时候会报错。
4) 编译arm版本的ncurses
a) 下载ncurses-5.9.tar.gz:ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz
b) 解压到/opt/中:tar zxvf ncurses-5.9.tar.gz c) cd ncurses-5.6
d) ./configure –host=arm-linux -prefix=/usr/local/ncurse –enable-static
e) make
f) make install
之所以安装这个,是因为对mysql的交叉编译过程需要该库的支持
5) 编译arm版本的mysql
a) tar zxvf mysql-5.1.51.tar.gz
b) cd mysql-5.1.51
c) 修改配置文件:打开configure,可以使用gedit configure
分别在第26453行、 48175行、 48282行、 48485行附近有类似代码:
if test "$cross_compiling" = yes; then
{ { $as_echo "$as_me:$LINENO: error: in `$ac_pwd':" >&5 $as_echo "$as_me: error: in `$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross
compiling See `config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling See `config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }; } Else 将这些代码改为:
if test "$cross_compiling" = yes; then echo “skip …..!”
#{ { $as_echo "$as_me:$LINENO: error: in `$ac_pwd':" >&5 #$as_echo "$as_me: error: in `$ac_pwd':" >&2;}
#{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See `config.log' for more details." >&5
#$as_echo "$as_me: error: cannot run test program while cross compiling See `config.log' for more details." >&2;}
#{ (exit 1); exit 1; }; }; } Else 一定注意,这样的代码有4部分,要全部改掉。
d) 配置,直接套用了人家的配置方式:
configure ./configure --host=arm-linux –-enable-static --with-named-curses-libs=/usr/local/ncurse/lib/libncurses.a --prefix=/usr/local/mysql --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8
e) 修改opt/mysql-5.1.51/sql/sql_parse.cc:在5646行之前添加#define STACK_DIRECTION 1
如果修改该语句,则会出现如下错误:sql_parse.cc:5646:21: operator '
注意:这里的“#define STACK_DIRECTION 1”一句,不能随便加在sql_parse.cc的开头处,而应该根据出错信息的提示添加在相应的行上,我所遇到的行号和别人文档上所遇到的行号并不相同。
f) 复制PC版本的gen_lex_hash文件到当前文件夹: cp /opt/mysql-5.1.51-pc/sql/gen_lex_hash sql/ touch –m sql/gen_lex_hash
cp /opt/mysql-5.1.51-pc/sql/ lex_hash.h sql/ touch –m sql/ lex_hash.h
否则会出现错误:
make[2]: Leaving directory `/opt/mysql-5.5.3-m3/sql' ./gen_lex_hash > lex_hash.h-t
/bin/sh: ./gen_lex_hash: cannot execute binary file 因为arm版的无法在pc上运行。
注意:别人的文档上说只要拷贝gen_lex_hash即可,但我试了好多次,都仍然会出现上面的报错信息,把lex_hash.h也拷贝过来后,就不再报错了。另外,touch一定要做,原因就是让编译器不要再编译覆盖拷贝过来的文件了。
g) Make
h) Make install
6) 移植相应文件到ARM平台
a) 拷贝pc的/usr/local/mysql到开发板的相同目录 我使用了nfs调试,所以需要使用如下指令:
cp -r /usr/local/mysql /opt/EmbedSky/root_nfs/usr/local/mysql
b) 把编译出的arm的mysql库打包备份一下,考到主机的目录里:
tar –zcvf mysql-arm-5.1.51.tar.gz mysql
c) 到源码中拷贝配置文件模版 Copies files from one location to another. 配置文件模版)
cp /opt/mysql-5.1.51/support-files/my-medium.cnf /opt/EmbedSky/root_nfs/etc/my.cnf
(这里的目录指的是nfs调试的路径设置),这里的my.cnf存放的路径是按照手册上的建议,前面编译pc版本的MySQL中所述的路径并非全局配置。
该文档的注释中说:
“# You can copy this file to /etc/my.cnf to set global options, mysql-data-dir/my.cnf to set server-specific options (in this installation this directory is /usr/local/mysql/var) or ~/.my.cnf to set user-specific options.”
该配置文件的修改详见mysql5.1的英文手册的4.2.3.3. Using Option Files节中的叙述。
数据目录是在:/var/lib/mysql 安装目录是在:/usr/local/mysql
试图反注释了关于InnoDB的一些配置,其它没有动。但是修改了这些设置后,报错,于是又改了回来。
d) 运行mysql_install_db(参见手册的2.13. Post-Installation Setup and Testing)
cd /usr/local/mysql/bin(开发板路径),运行mysql_install_db -u root 结果出现了如下错误:Neither host 'EmbedSky' nor 'localhost' could be looked up with /usr/local/mysql/bin/resolveip Please configure the 'hostname' command to return a correct hostname.
If you want to solve this at a later stage, restart this script with the --force option 这主要的原因是开发板环境中的hostname是EmbedSky,而不是通常的Federa14等,所以mysql自动认为可能在该操作系统中的运行会不兼容,有两种办法解决:
第一种,运行hostname fedora14,就是欺骗一下hostname;
第二种,运行mysql_install_db -u root –force
我使用了第二种方式: bin/mysql_install_db --user=root --force --basedir=/usr/local/mysql -- datadir=/var/lib/mysql
中间出现过一次错误:150713 21:06:39 [ERROR] /usr/local/mysql/libexec/mysqld: unknown variable 'innodb_data_home_dir=/usr/local/mysql/var/',查明原因是my.cnf中反注释了和InnoDB相关的配置。
e) 手动建立mysqld/mysqld.pid,手工建立:
mkdir /var/run/mysqld
touch /var/run/mysqld/mysqld.pid
这一步不知道是不是必须的。但我这样做了。
f) 到源码中拷贝启动文件
cp /opt/mysql-5.1.51/support-files/mysql.server /opt/EmbedSky/root_nfs/etc/init.d/mysqld 修改该mysqld
详见手册中4.3.1. mysqld — The MySQL Server的叙述
加上了basedir和datadir,还有pid-file=/var/run/mysqld/mysqld.pid 修改完后,要给新的mysqld附以足够的权限: Chmod +x mysqld
g) 在开发板开启MySQL服务
开发板不支持service指令,所以service mysql start无效。采用的方法是运行./etc/init.d/mysqld start
但最初运行该指令后出现下面的错误:
Starting MySQL... ERROR! Manager of pid-file quit without updating file.
困扰我好久,到开发板目录/var/lib/mysql下查阅错误日志文件[hostname].err,在我的系统中该错误日志文件为EmbedSky.err,从中看到下面的记录:
150713 21:04:49 [ERROR] Fatal error: Can't change to run as user 'mysql' ; Please check that the user exists!
可能的原因是:在arm的linux上无法执行groupadd mysql,因此需要采用如下方法解决该问题: cd /var/lib/mysql
ls –la可以看到里面的属性中没有mysql,于是使用下面的命令: adduser mysql
chown mysql:mysql -R /var/lib/mysql
然后开启mysql服务,还是出现了ERROR! Manager of pid-file quit without updating file.又查看EmbedSky.err日志,其中多了一条:
150714 2:48:04 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
150714 2:48:04 [ERROR] Do you already have another mysqld server running on port: 3306 ?
很显然是因为已经有mysql的进程尝试打开3306端口,因此就被占用了,需要杀进程,索性重启开发板,然后运行./etc/init.d/mysqld start,可以完美打开。
h) 设置软连接使mysql, mysqldump, mysqladmin这三个命令能在开发板的shell中直接运行
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysqldump /usr/bin ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
7) 测试ARM平台下的MySQL
a) mysqladmin -u root password hahaha 最后一项为我的密码 (设置密码)
b) mysql -h 127.0.0.1 -u root -p 或mysql -h localhost -u root -p 这样便可以
进入mysql环境。
c) mysql>show databases
按照上面的方法基本可以完成交叉编译,但是在后面运行的时候,可能会有些问题,提示Permission denied,造成这个错误的主要原因就是开发部启动后默认是root账户,但是你添加的mysql账户是不具备root账户权限的,所以没有权限执行,解决办法就是给你的账户加入到root用户组,修改用户组时要注意usermod命令可能文件系统中没有提供,这个时候你需要用vi打开开发板文件系统下面的/etc/passwd文件,把你创建的mysql账户修改为root用户组,这样就可以运行了,再次运行提示mysql sucess...
恭喜你mysql终于移植成功了,但是如果你在开发板上面想用Qt开发时还需要移植嵌入式的mysql Qt驱动,即交叉编译生成libqsqlmysql.so文件。
mysql 嵌入式_MySql移植到嵌入式Linux平台相关推荐
- .tar.gz mysql 安装_mysql tar.gz 版本 linux系统的安装-Go语言中文社区
mysql下载地址: https://dev.mysql.com/downloads/mysql/ 1. 上传下载的tar.gz文件发送到linux 上传的路径: /usr/local/mysql/ ...
- 嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤
在嵌入式系统移植中重要的一部分是操作系统的移植,与其它操作系统相比,Linux大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用.修改.和扩展它.正是由于这一特色,嵌入式系统移植过程中Linu ...
- 主要Linux 平台高可用集群软件(High Availability Cluster- HA)简介
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 高可用集群( High Availability Cluster) 负载均衡集群(Load Balance Cluster) ...
- zynq7000系列移植—JRE移植到嵌入式ARM平台(java运行在嵌入式linux)
转载:https://blog.csdn.net/weixin_39827918/article/details/78806642 前言 因公司项目需求,需要在zynq 7000平台下运行 java ...
- linux mkfs 源码,mkfs工具怎么移植到嵌入式平台下面
找到了e2fsprogs-1.41.3的源码,怎么修改编译后才能移植到嵌入式平台? 有交叉编译工具.但是不知道怎么修改Makefile文件 刚开始e2fsprogs的源码里没有Makefile文件 但 ...
- 锐捷认证客户端在嵌入式linux平台上的移植
一.TCP/IP协议简介 IP协议用于将多个包交换网络连接起来,IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流 ...
- arm ubuntu 编译boost_Ubuntu交叉编译tslib并移植到嵌入式Linux
一.交叉编译器 交叉编译器用于在Linux PC上编译嵌入式Linux平台上的项目(tslib),此处采用交叉工具链压缩包(gcc-4.4.4-glibc-2.11.1-multilib-1.0_Ea ...
- linux算法设计,嵌入式Linux平台下随机序列算法设计.doc
嵌入式Linux平台下随机序列算法设计 嵌入式Linux平台下随机序列算法设计 [摘 要]本文以多媒体播放器的随机不重复播放机能为切入点,针对嵌入式平台实时性要求高,处理速度不够快,但系统存储歌曲量大 ...
- 嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf
2012--2013 学年第 二 学期 物电 学院期末考试卷 嵌入式系统与应用 学号 : 姓名 : 班级 : 成绩: 评语: 装 订 (考试题目及要求) 嵌入式大作: 采用实验箱上的电位器作为信号输入 ...
最新文章
- Eclipse 3.6 更新中文语言包的方法
- 分布式ActiveMQ集群--转载
- KMP算法--深入浅出
- qs.stringify和JSON.stringify的使用和区别
- 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
- SAP ABAP DDICSAP ABAP DDIC table runtime object table runtime object
- ActiveRecord学习笔记(四):处理Many-To-Many映射
- ai电磁组属于什么组_飞思卡尔智能车电磁组分区算法介绍
- 微软提供的数据访问组件SqlHelper
- 【响应式布局】理解设备像素、设备独立像素和css像素
- linux抓包工具分析工具下载,Linux下抓包工具tcpdump以及分析包的工具wireshark
- win7 内存补丁_封装Win7系统定制私人GHO包必须要做的55个优化步骤
- PS安装失败解决方法
- json数据循环左侧三级导航菜单
- xmapp 终端数据库问题记录 已解决
- MFC—显示NX图标或透明背景图标
- 软件实施过程、软件实施工程师职责
- [安卓按键精灵]彩色图片转黑白图(二值化)
- 加班、加人、延期是糟糕的办法
- Android错误日志分析