您尚未登录。

楼主 # 2024-04-09 04:47:20

lmnb
会员
注册时间: 2024-01-28
已发帖子: 23
积分: 110

在f1c100s上跑MySQL5.1.73 移植记录

================================
这里是手动编译的,自动编译看4,5楼
================================

下载ncurses5.6,解压,进入到目录

wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
tar zxvf ncurses-5.6.tar.gz
cd ncurses-5.6.tar.gz

切换到root用户

su

配置,这里的-host是我交叉编译工具的前缀,按实际情况改

./configure -host=arm-buildroot-linux-gnueabi -prefix=/ -enable-static

开始编译,安装

make -j2
make install DESTDIR=$PWD/tmp

用这条命令看一下交叉编译工具搜索的文件和库路径在哪

echo 'main(){}'|arm-buildroot-linux-gnueabi-gcc  -E -v -

可以看到头文件和库目录的路径分别在这里
02087c5c2ea85a968ef2332ac303e1b.png
然后进入安装的tmp目录下分别把include下的文件放到上面的头文件路径,lib下单文件放到库路径并且保持链接

cd tmp
cp -rf include/* /home/lmnb/f1c100s/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include
cp -rfd lib/* /home/lmnb/f1c100s/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/

可以退出root了。

=========================================================
开始移植MySQL5.1.73

在阿里云上下载mysql5.1.73源码包https://mirrors.aliyun.com/mysql/MySQL-5.1/
一直往下拉,找到这两个的任意一个下载
449209ececfe10ec17f4c2bc15f4dfa.png
然后开始解压

unzip mysql-5.1.73.zip

这里复制两份一份命名为pc-mysql-5.1.73,另一份命名为arm-mysql-5.1.73,随便取都可以区分开就行

cp mysql-5.1.73 pc-mysql-5.1.73
mv mysql-5.1.73 arm-mysql-5.1.73

先进入到pc-mysql-5.1.73目录里面,然后配置,注意了这里应该是不用root的,然后直接编译就好了不用安装

cd pc-mysql-5.1.73/
./configure -prefix=/usr
make -j2

然后进入arm-mysql-5.1.73目录,这里先不要配置,改一下配置文件

cd arm-mysql-5.1.73/
vim configure

找到这4处注释掉,大概位置在26303,48121,48227,48440
注释后还要加上后面那句

  { { $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; }; }; }
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; }; }; }

ok,开始配置

./configure --host=arm-buildroot-linux-gnueabi --enable-static  --prefix=/usr --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8

然后删掉Makefile里面do_abi_check:后面的内容,注意是有tab后的

可以编译了,但是会报错,注意要先编译等报错了再处理后面的操作

make -j2
报错内容
./gen_lex_hash > lex_hash.h-t

解决办法,把pc-mysql-5.1.73/sql/gen_lex_hash复制到当前目录下的sql目录里

cp ../pc-mysql-5.1.73/sql/gen_lex_hash
touch -m sql/gen_lex_hash

又可以愉快的编译和安装了

make
make install DESTDIR=$PWD/tmp

也一样又进入tmp/usr目录复制include目录下的内容和lib/mysql/下的内容到交叉编译的环境中

然后就是把tmp目录下的内容拷贝到开发板了,先随便放,我这里放/root

==========================================================
到操作开发板了,我自己画的板,可以连wifi

同样的操作,复制bin,复制保持连接lib,复制sheare,复制libexec

cd tmp/usr/
cp -rf bin/* /usr/bin
cp -rfd lib/mysql/* /usr/lib
cp -rf libexec/* /usr/libexec/
cp -rf share/mysql /usr/share/

进入/etc目录,创建my.cnf文件复制如下代码到my.cnf里

cd /etc
vi my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
datadir=/usr/var/data
socket=/tmp/mysql.sock
user=root
old_passwords=1
skip-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/lib/mysqld/mysqld.pid

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

创建这几个目录和文件

mkdir -p /var/lib/mysqld/
mkdir -p /var/log/
touch /var/lib/mysqld/mysqld.pid
mkdir -p /usr/var/data/

安装mysql,启动

mysql_install_db -u root
mysqld_safe --user=root --skip-grant-tables --skip-networking &

没问题,可以操作数据库了

设置开机启动,回到刚才那个目录,复制这个脚本,Sxx随便取

cd /root/tmp/usr
cp share/mysql/mysql.server /etc/init.d/S90mysqld
cd /etc/init.d/

先改一下内容再操作,到69行改为跟my.cnf里一样的路径,     datadir=/usr/var/data
然后保存要先启动一下再改其他内容

./S90mysqld start

应该是可以的不过会出现什么hostname找不到的情况

再进去改59和60行
pid_file=/var/lib/mysqld/mysqld.pid
server_pid_file=/var/lib/mysqld/mysqld.pid

到这里应该就没什么问题了先reboot。

上电就可以看到mysql启动了

连上wife,小试一下牛刀

mysql -h 192.168.43.198 -P 3306 -u lmnb -p
show databases;

哟吼,毕设要采集的数据可以用数据库来管理了
3f367d9c8c7bcbfe4af28ccfc5fa30c.png
不错不错,查一下表看看
e6082210925cb44c1ab5e6d91572f45.png

===================================================================
网上找了个C语言操作的方法

/*************************************************************************
    > File Name: connect.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2020年08月14日 星期五 20时39分56秒
 ************************************************************************/

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>

// 定义连接时所需要的数据宏
#define HOST "192.168.43.198"    // 所连数据库的ip 127.0.0.1是本机ip
#define USER "lmnb"         // 数据库用户
#define PASSWORD "123456"   // 该用户密码(自设)
#define DBNAME "szjcxt"       // 要操作的数据库名

// 打印结果集函数
void show_result(MYSQL_RES * result)
{
	//打印表头
	unsigned int num_fields;
	unsigned int i;
    // MYSQL_FIELD 该结构包含关于字段的信息,如字段名、类型和大小
	MYSQL_FIELD *fields;
	// 返回结果集中的行数。
	num_fields = mysql_num_fields(result);
    // mysql_fetch_fields 对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
	fields = mysql_fetch_fields(result);
    // 输出结果
	for(i = 0; i < num_fields; i++)
	{
	   printf("%s\t", fields[i].name);
	}
    // 这个输出是打造表的结构边框便于查看数据,准确的输出按照你的数据自行增加减去+号
	printf("\n+----+-------+\n");
	
	// 行数
	MYSQL_ROW row;
		num_fields = mysql_num_fields(result);//取字段个数
	while ((row = mysql_fetch_row(result)))//循环取一行
	{
	   for(i = 0; i < num_fields; i++)
	   {
           // 看是否为空
	       printf("%s\t",  row[i] ? row[i] : "NULL");
	   }
	   printf("\n");
	}
}


int main(int argc, char* argv[])
{
    // 定义mysql指针并初始化
    MYSQL *mysql=mysql_init(NULL);
    if(mysql== NULL)
    {
        printf("init err! 数据库初始化错误!\n");
        return -1;
    }
    // 初始化成功就连接数据库
    mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
    if(mysql == NULL)
    {
        printf("connect err! 数据库连接失败! \n");
        return -1;
    }
    printf("数据库连接成功!\n"); 
    
    // 定义查询语句
    char rSql[256]={0};
    // 我的表名为example
    strcpy(rSql,"select * from users");
    // 查询指向的SQL查询
    if(mysql_query(mysql,rSql) != 0){
    	printf("mysql_query err! 查询失败\n");
    	exit(1);
    }

    // 取回结果集
    int i=0;
    // mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
    MYSQL_RES * result = mysql_store_result(mysql);
    MYSQL_ROW row;
    if(result != NULL){
    	//需要打印结果集
    	show_result(result);
		mysql_free_result(result);//释放结果集
    }
    // 最后关闭连接
    mysql_close(mysql);
    printf("数据库关闭成功!\n");
    return 0;
}

编译选择手动连接库

arm-buildroot-linux-gnueabi-gcc -o select select.c -lmysqlclient

9bc78edd7ba2af410ac28d699170e4f.png


============================================================
参考链接:
https://blog.csdn.net/wangn222/article/details/71624492
https://blog.csdn.net/weixin_39887748/article/details/111676316
https://bbs.elecfans.com/jishu_910286_1_1.html
https://blog.csdn.net/weixin_45525272/article/details/108014858

最近编辑记录 lmnb (2024-04-09 15:20:15)

离线

#1 2024-04-09 12:03:19

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,247
积分: 9197

Re: 在f1c100s上跑MySQL5.1.73 移植记录

感谢楼主分享!

可是有个问题不明白,你都用buildroot了,为何不直接配置buildroot直接自动编译MySQL呢?





离线

楼主 #2 2024-04-09 12:45:13

lmnb
会员
注册时间: 2024-01-28
已发帖子: 23
积分: 110

Re: 在f1c100s上跑MySQL5.1.73 移植记录

晕哥 说:

感谢楼主分享!

可是有个问题不明白,你都用buildroot了,为何不直接配置buildroot直接自动编译MySQL呢?

我也想用自动编译的但是我不是很会用,直接勾选mysql编译之后发现没有这两个脚本
mysql_install_db
mysqld_safe
然后我就不知道怎么搞了
只能学学网上的手工编译结果可以

离线

#3 2024-04-09 13:17:59

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,247
积分: 9197

Re: 在f1c100s上跑MySQL5.1.73 移植记录

@lmnb

$ grep mysql_install_db -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld:                $MYSQL_BIN/mysql_install_db --basedir=/usr \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStartPre=/bin/sh -c 'test "`ls -1 /var/lib/mysql | wc -l`" != "0" ||

$ grep mysqld_safe -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld:        $MYSQL_BIN/mysqld_safe --pid-file=$MYSQL_PIDFILE --user=mysql \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStart=/usr/bin/mysqld_safe --log-error=/var/log/mysql/mysqld.log

MySQL的package确实没有你说的这两个,但是mariadb里面有,用buildroot 2024.02 可以试一试。





离线

楼主 #4 2024-04-09 14:55:24

lmnb
会员
注册时间: 2024-01-28
已发帖子: 23
积分: 110

Re: 在f1c100s上跑MySQL5.1.73 移植记录

@晕哥

我靠不用2024的也行,我的是2017.8的,原来是我选漏了,下面这样就可以了
自动编译确实好

→ Target packages → Libraries → Database
    [*] mysql support  
            mysql variant (oracle mysql)  --->   
    [*]   oracle mysql server

离线

楼主 #5 2024-04-09 15:11:17

lmnb
会员
注册时间: 2024-01-28
已发帖子: 23
积分: 110

Re: 在f1c100s上跑MySQL5.1.73 移植记录

lmnb 说:

@晕哥

我靠不用2024的也行,我的是2017.8的,原来是我选漏了,下面这样就可以了
自动编译确实好

→ Target packages → Libraries → Database
    [*] mysql support  
            mysql variant (oracle mysql)  --->   
    [*]   oracle mysql server

然后在开发板里面复制/usr/share/mysql/my-small.cnf到/etc/my.cnf下面

cp /usr/share/mysql/my-small.cnf /etc/my.cnf

再在my.cnf里面加点东西,我是在[mysqldump]前面加的

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/run/mysql/mysqld.pid

reboot之后自己就启动了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn