移植MySQL到嵌入式ARM平台
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/mys
移植MySQLARM平 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)