<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        MySql移植到嵌入式Linux平臺_MySQL

        來源:懂視網 責編:小采 時間:2020-11-09 18:49:32
        文檔

        MySql移植到嵌入式Linux平臺_MySQL

        MySql移植到嵌入式Linux平臺_MySQL:bitsCN.com 最近在做考勤機系統,硬件采用的cortex-A8,哈哈,其實是有點浪費的,2410就可以的。所以就要考慮到考勤數據的存儲問題,本來是打算用sqlite數據庫存儲的,可是后來發現,這個數據庫只是一個本地數據庫,無法進行聯網訪問,這樣的話,服務器上的數
        推薦度:
        導讀MySql移植到嵌入式Linux平臺_MySQL:bitsCN.com 最近在做考勤機系統,硬件采用的cortex-A8,哈哈,其實是有點浪費的,2410就可以的。所以就要考慮到考勤數據的存儲問題,本來是打算用sqlite數據庫存儲的,可是后來發現,這個數據庫只是一個本地數據庫,無法進行聯網訪問,這樣的話,服務器上的數

        bitsCN.com

        最近在做考勤機系統,硬件采用的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 '<' has no left operand,原因是宏變量STACK_DIRECTION沒有定義初值,arm中定義STACK_DIRECTION為1。

        注意:這里的“#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文件。

        bitsCN.com

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySql移植到嵌入式Linux平臺_MySQL

        MySql移植到嵌入式Linux平臺_MySQL:bitsCN.com 最近在做考勤機系統,硬件采用的cortex-A8,哈哈,其實是有點浪費的,2410就可以的。所以就要考慮到考勤數據的存儲問題,本來是打算用sqlite數據庫存儲的,可是后來發現,這個數據庫只是一個本地數據庫,無法進行聯網訪問,這樣的話,服務器上的數
        推薦度:
        標簽: 平臺 數據庫 linux
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 77777_亚洲午夜久久多人| 国产av无码专区亚洲av果冻传媒 | 久久久久噜噜噜亚洲熟女综合| 亚洲日韩精品无码AV海量| 可以免费看黄视频的网站| 亚洲精品一卡2卡3卡三卡四卡| 最近高清中文字幕免费| 亚洲黄色免费网址| 97免费人妻无码视频| 亚洲免费视频网址| 成人免费无码大片a毛片软件| 亚洲综合色一区二区三区| 在线a毛片免费视频观看| 国产成人久久精品亚洲小说| 九月婷婷亚洲综合在线| 成人免费乱码大片A毛片| 国产aⅴ无码专区亚洲av| 99ee6热久久免费精品6| 亚洲综合色区中文字幕| 成人在线免费观看| 日本一区二区在线免费观看| 亚洲精品无码鲁网中文电影| 无码av免费一区二区三区试看| 亚洲国产成人91精品| 在线观看国产情趣免费视频| 免费国产草莓视频在线观看黄| 亚洲日韩欧洲乱码AV夜夜摸| 久久精品无码专区免费东京热 | 青青在线久青草免费观看| 亚洲综合一区国产精品| 亚洲 小说区 图片区 都市| 免费精品久久天干天干| 亚洲一卡2卡4卡5卡6卡残暴在线| 午夜电影免费观看| 中文字幕乱码系列免费| 亚洲妓女综合网99| 亚洲Av无码乱码在线观看性色 | 日韩一区二区a片免费观看| 美女视频黄视大全视频免费的| 亚洲精品乱码久久久久久自慰| 国产h视频在线观看免费|