mysql在单片机移植_移植MySQL到嵌入式ARM平台

因为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) 安装编译器:用的是4.3.2的交叉编译器。gcc之类的都是ubuntu10.10自带的。

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库。(注意一定要先make后,再去修改文件夹名称)

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的交叉编译过程需要该库的支持

(此步在用sudo make install时出错,原因是环境变量和原来不同了,解决办法:sudo -i;make install)

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 --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=/usr/local/mysql/var/lib/mysql (我修改了datadir的路径)

中间出现过一次错误: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,手工建立: (这一步不需要,制定到/tmp/mysqld.pid就行)

mkdir /usr/local/mysql/var/run/mysqld

touch /usr/local/mysql/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=/tmp/mysqld.pid

还有service-pid-file=/tmp/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 /usr/local/mysql/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,可以完美打开。

(我使用的时候,还有另外的一个问题,由于客户端和服务器都要访问/tmp目录,所以每次开机都要chmod 777 /tmp  ,以便于都能访问)

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

其他的还有:链接库文件

ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /lib

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;

mysql>create databases at91;

mysql>use at91;

mysql>create table node (id int(5) auto_increment not null primary key, node_ID char (40), param_ID_values varchar(900));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql镜像压缩包使用_如何连接docker的mysql镜像

展开全部推荐使用Dockerfile方式。服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想62616964757a686964616fe58685e5aeb931333361326332通过ssh去管理容器还要有mysql服务的启动起来 cmd的方式就无法实现,当然容器不需要以sshd的方式去管…

mysql导出数据 程序_mysql导出数据

导出某库全表为SQL语句直接导出某库全表(包括表设计和表数据)为SQL语句mysqldump -h172.16.*.* -uroot -p somedatabase sometable > somewhere/table.sql导出某个表为特定文件格式导出某个表为特定文件格式(txt, xls)(只是数据)可以通过sql自行过滤某些数据mysql -h172.16.…

mysql通用日志不打印_解决logback不打印mybatis的SQL日志的问题

工作这么多年,今天还是因为Logback的这个问题稍微卡了一下,惭愧。问题描述:logback配置了如下信息:...此处省略File Appender内容${logbase}sql.%d{yyyy-MM-dd}.log30[%d{yyyy-MM-dd HH:mm:ss} [%t] [%X{traceId}] %5p %c:%L] %m%…

alibaba 实体转json_com.alibaba.fastjson 转换List Map等对象

原文:http://www.cnblogs.com/goody9807/p/4244862.html本文讲解2点:1. fastjson生成和解析json数据(举例:4种常用类型:JavaBean,List,List,List)2.通过一个android程序测试fastjson的用法。fastjson简介:Fastjson是一个Java语言编…

centos mysql rpm re_centos7和centos6.5环境rpm方式安装mysql5.7和mysql5.6详解

centos环境安装mysql5.7其实不建议安装mysql5.7 语法和配置可能和以前的版本区别较大,多坑,慎入1.yum方式安装(不推荐)a.安装mysql5.7 yum源centos6:wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpmyum localinstall mysql-community-…

mysql galera haproxy_安装配置Haproxy代理MySQL Galera集群

这篇文章,我讲介绍如何为MariaDB Galera 集群添加负载均衡,大致步骤如下:确认所有Galera节点作为一个单一集群运行(所有节点都是主节点而且相互同步)安装Haproxy(你可以安装到独立的服务器或者应用服务器)配置集群监控检测脚本,用…

nvme固态硬盘开机慢_为何我使用了固态硬盘开机速度还是需要20-30秒

1、加速网上邻居在Windows XP中访问网上邻居是相当恼人的,系统会搜索自己的共享目录和可作为网络共享的打印机以及计划任务中和网络相关的计划任务,然后才显示出来,显然这样速度就会比Windows 9x中慢很多。其实这些功能我们并没有使用上&…

高性能mysql看不懂_高性能mysql笔记1

转载请注明&#xff1a;TheViper http://www.cnblogs.com/TheViper<>这本书写的真的很好&#xff0c;只可惜本屌不才&#xff0c;大部分都看不懂&#xff0c;暂且记下与mysql优化有关&#xff0c;对自己有用的东西。测试指标吞吐量吞吐量指的是单位时间内的事务处理数&am…

python 热词分析_Python笔记:热词分析2020-01-01

热词分析在公众趋势分析、舆情分析有很宽广的应用&#xff0c;我们来看看怎么从一个TXT文件中分析出文章的热词出来&#xff0c;我们采用流行的第三方“结巴”包来实现。首先安装第三方包(matplotlib&#xff0c;jieba&#xff0c;wordcloud&#xff0c;numpy)mmatplotlib主要来…

子进程会继承父进程的哪些内容_【学习教程】Node.js创建子进程方法

来源 | https://github.com/CommanderXL/biu-blog/issues/25exec其中exec可用于在指定的shell当中执行命令。不同参数间使用空格隔开&#xff0c;可用于复杂的命令。const { exec } require(child_process)exec(cat *.js bad_file | wc -l)exec方法用于异步创建一个新的子进程…

python元编程运用_Python 中的元编程

就像元数据是有关数据的数据一样&#xff0c;元编程就是编写用于操纵程序的某些程序。人们普遍认为&#xff0c;元程序就是生成其他程序的某些程序&#xff0c;但范式更加广泛。所有旨在自我读取、分析、转换或修改的程序都是元编程的范例。例如&#xff1a;领域特定语言 (DSL)…

wamp怎么安装mysql服务器_用wamp的mysq安装pythonmysql

(我不确定这是应该在这里问还是在苏。。但是看到this question就这样&#xff0c;我在这里要求它…)我在我的vista机器上安装了wamp(mysql-5.1.33)服务器&#xff0c;我正试图安装pythonmysql 1.2.3c1&#xff0c;以使用wamp提供的mysql版本。在起初&#xff0c;当我运行python…

mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据

展开全部 1、创建测试表; create table test_col_1(id number, var varchar2(200)); create table test_col_2(id number, var varchar2(200)); 2、插入测试数据, insert into test_col_1 select level*8, var||32313133353236313431303231363533e59b9ee7ad9431333431373839l…

MySQL建表添加乐观锁字段_Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化...

Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化项目介绍基于SpringBootMybatis搭建的秒杀系统&#xff0c;并且针对高并发场景进行了优化&#xff0c;保证线程安全的同时极大地提高了服务器的吞吐量&#xff0c;主要优化手段有页面静态化、Redis缓存(页…

叶金荣mysql教程_mysql优化--叶金荣老师讲座笔记

copy to tmp table执行ALTER TABLE修改表结构时建议&#xff1a;凌晨执行Copying to tmp table拷贝数据到内存中的临时表&#xff0c;常见于GROUP BY操作时建议&#xff1a;创建索引Copying to tmp table on disk临时结果集太大&#xff0c;内存中放不下&#xff0c;需要将内存…

mysql tpcc 测试结果分析_mysql 数据库TPCC测试

创建数据库tpcc&#xff0c;导入测试表格mysql -h 192.168.0.202 -P15002 -utest -ptest -e "drop database tpcc;"mysql -h 192.168.0.202 -P15002 -utest -ptest -e "create database tpcc;"mysql -h192.168.0.202 -P15002 -utest -ptest --databasetpcc…

mysql 变量生命周期_Go: 延长变量的生命周期

![Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191002-Go-Keeping-a-Variable-Alive/00.png)本文基于 Go 1.13。在 Go 中&#xff0…

python qqbot实现qq聊天机器人_Python QQBot库的QQ聊天机器人

本文实例为大家分享了Python QQBot库的QQ聊天机器人的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下1.安装pip install qqbot2.主动发出消息from qqbot import _bot as bot# 登录QQbot.Login([-q, 2816626661])buddy 获取指定名称/备注的好友group 获取群buddy bot…

tp5 mysql实现消息队列_TP5系列 | Queue消息队列

消费信息如下ThinkPHP5 Queue消息队列优点1、Queue内置了 Redis&#xff0c;Database&#xff0c;Topthink &#xff0c;Sync这四种驱动&#xff0c;本文使用Redis驱动2、Queue消息队列适用于大并发或者返回结果 时间有点长并需要批量操作的第三方接口&#xff0c;可用于短信发…

mysql表里插不进去数据_Oracle数据中表值插不进去问题(转)

相信我们在进行测试的时候&#xff0c;有的时候会遇上数据库表的值插不进去的情况&#xff0c;在执行&#xff33;&#xff31;&#xff2c;语句的时候&#xff0c;好像卡住一样&#xff0c;没有反应。但是当你把&#xff33;&#xff31;&#xff2c;语句&#xff43;&#xf…