您的位置 首页 知识

移植MySQL到嵌入式ARM渠道

因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。进行…

因为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: tarzxvfmysql-5.1.51.tar.gz

b)cdmysql-5.1.51
c)./configure-prefix=/usr/local/mysql

d)make留意,这儿无需运转makeinstall,以为首要是为了用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/中:tarzxvfncurses-5.9.tar.gz

c)cdncurses-5.6
d)./configure–host=arm-linux-prefix=/usr/local/ncurse–enable-static

e)make
f)makeinstall之所以装置这个,是因为对mysql的穿插编译进程需求该库的支撑

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

5)编译arm版别的mysql
a)tarzxvfmysql-5.1.51.tar.gz

b)cdmysql-5.1.51
c)修正装备文件:翻开configure,能够运用geditconfigure分别在第26453行、48175行、48282行、48485行邻近有相似代码:
iftest”$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:cannotruntestprogramwhilecross

compilingSee\`config.logformoredetails.”>&5

$as_echo”$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.”>&2;}
{(exit1);exit1;};};}

Else

将这些代码改为:
iftest”$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:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.”>&5
#$as_echo”$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.”>&2;}
#{(exit1);exit1;};};}

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行之前增加#defineSTACK_DIRECTION1
假如不修正该句子,则会呈现如下过错:sql_parse.cc:5646:21:operator 留意:这儿的“#defineSTACK_DIRECTION1”一句,不能随意加在sql_parse.cc的开始处,而应该依据犯错信息的提示增加在相应的行上,我所遇到的行号和他人文档上所遇到的行号并不相同。
f)PC版别的gen_lex_hash文件到当时文件夹:

cp/opt/mysql-5.1.51-pc/sql/gen_lex_hashsql/

touch–msql/gen_lex_hash
cp/opt/mysql-5.1.51-pc/sql/lex_hash.hsql/

touch–msql/lex_hash.h
不然会呈现过错:
make[2]:Leavingdirectory`/opt/mysql-5.5.3-m3/sql./gen_lex_hash>lex_hash.h-t
/bin/sh:./gen_lex_hash:cannotexecutebinaryfile因为arm版的无法在pc上运转。

留意:他人的文档上说只需复制gen_lex_hash即可,但我试了好屡次,都仍然会呈现上面的报错信息,把lex_hash.h也复制过来后,就不再报错了。别的,touch必定要做,原因便是让编译器不要再编译掩盖复制过来的文件了。

g)Make

h)Makeinstall

6)移植相应文件到ARM渠道
a)复制pc的/usr/local/mysql到开发板的相同目录
我运用了nfs调试,所以需求运用如下指令:
cp-r/usr/local/mysql/opt/EmbedSky/root_nfs/usr/local/mysql
b)把编译出的arm的mysql库打包备份一下,考到主机的目录里:
tar–zcvfmysql-arm-5.1.51.tar.gzmysql
c)到源码中复制装备文件模版Copiesfilesfromonelocationtoanother.装备文件模版)

cp/opt/mysql-5.1.51/support-files/my-medium.cnf/opt/EmbedSky/root_nfs/etc/my.cnf(这儿的目录指的是nfs调试的途径设置),这儿的my.cnf寄存的途径是依照手册上的主张,前面编译pc版别的MySQL 中所述的途径并非大局装备。该文档的注释中说:“#Youcancopythisfileto/etc/my.cnftosetglobaloptions,mysql-data-dir/my.cnftosetserver-specificoptions(inthisinstallationthisdirectoryis /usr/local/mysql/var)or~/.my.cnftosetuser-specificoptions.”该装备文件的修正详见mysql5.1的英文手册的4.2.3.3.UsingOptionFiles节中的叙说。

数据目录是在:/var/lib/mysql (默许)

装置目录是在:/usr/local/mysql (默许)
企图反注释了关于InnoDB的一些装备,其它没有动。可是修正了这些设置后,报错,所以又改了回来。
d)运转mysql_install_db(拜见手册的2.13.Post-InstallationSetupandTesting)
cd/usr/local/mysql/bin(开发板途径),运转mysql_install_db-uroot成果呈现了如下过错:NeitherhostEmbedSkynorlocalhostcouldbelookedupwith/usr/local/mysql/bin/resolveipPleaseconfigurethehostnamecommandtoreturnacorrecthostname.Ifyouwanttosolvethisatalaterstage,restartthisscriptwiththe–forceoption这首要的原因是开发板环境中的hostname是EmbedSky,而不是一般的Federa14等,所以mysql主动以为或许在该操作体系中的运转会不兼容,有两种办法处理:
第一种,运转hostnamefedora14,便是诈骗一下hostname;

第二种,运转mysql_install_db-uroot–force

我运用了第二种办法:bin/mysql_install_db–user=root–force–basedir=/usr/local/mysql–datadir=/usr/local/mysql/var/lib/mysql (我修正了datadir的途径)
中心呈现过一次过错:15071321:06:39[ERROR]/usr/local/mysql/libexec/mysqld:unknownvariableinnodb_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—TheMySQLServer的叙说
加上了basedir和datadir,

还有pid-file=/tmp/mysqld.pid

还有service-pid-file=/tmp/mysqld.pid

修正完后,要给新的mysqld附以满足的权限:Chmod+xmysqld
g)在开发板敞开MySQL服务
开发板不支撑service指令,所以servicemysqlstart无效。

选用的办法是运转./etc/init.d/mysqldstart
但开始运转该指令后呈现下面的过错:
StartingMySQL…ERROR!Managerofpid-filequitwithoutupdatingfile.
困扰我良久,到开发板目录/var/lib/mysql下查阅过错日志文件[hostname].err,在我的体系中该过错日志文件为EmbedSky.err,从中看到下面的记载:
15071321:04:49[ERROR]Fatalerror:Cantchangetorunasusermysql;Pleasecheckthattheuserexists!
或许的原因是:在arm的linux上无法履行groupaddmysql,因而需求选用如下办法处理该问题:cd /usr/local/mysql/var/lib/mysql
ls–la能够看到里边的特点中没有mysql,所以运用下面的指令:addusermysql
chownmysql:mysql-R/var/lib/mysql
然后敞开mysql服务,仍是呈现了ERROR!Managerofpid-filequitwithoutupdatingfile.又检查EmbedSky.err日志,其间多了一条:
1507142:48:04[ERROR]Cantstartserver:BindonTCP/IPport:Addressalreadyinuse
1507142:48:04[ERROR]Doyoualreadyhaveanothermysqldserverrunningonport:3306?
很显然是因为已经有mysql的进程测验翻开3306端口,因而就被占用了,需求杀进程,干脆重启开发板,然后运转./etc/init.d/mysqldstart,能够完美翻开。

  (我运用的时分,还有别的的一个问题,因为客户端和服务器都要拜访/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-urootpasswordhahaha最终一项为我的暗码(设置暗码)

b)mysql-h127.0.0.1-uroot-p或mysql-hlocalhost-uroot-p这样便能够进入mysql环境。

c)mysql>showdatabases;

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));

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/276692.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部