1、准备相应源码

mysql-boost-5.7.35.tar.gz

openssl-1.1.1k.tar.gz

ncurses-6.1.tar.gz

2、编译curses-6.1和openssl-1.1.1k

(1)编译ncurses-6.1

tar xf ncurses-6.1.tar.gz
cd ncurses-6.1
mkdir _install
./configure --host=aarch64-ax630-linux-gnu --prefix=$(pwd)/_install --without-progs CC=aarch64-ax630-linux-gnu-gcc CXX=aarch64-ax630-linux-gnu-g++
make 
make install

(2)编译openssl-1.1.1k

tar xf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
mkdir _install
./config no-asm shared --prefix=$(pwd)/_install --openssldir=$(pwd)/_install
修改Makefile:
CROSS_COMPILE= aarch64-himix100-linux-
删除两处 -m64
make 
make install

3、编译mysql-boost-5.7.35.tar.gz

tar xf mysql-boost-5.7.35.tar.gz
cd mysql-boost-5.7.35

(1)编译PC版mysql

mkdir build_x86
cd build_x86
cmake ../ -DCMAKE_INSTALL_PREFIX=/mnt/database/mysql \
    -DMYSQL_DATADIR=/mnt/database/mysql/data \
    -DWITH_BOOST=/home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0 \
    -DSYSCONFDIR=/etc/ \
    -DEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DENABLED_LOCAL_INFILE=1

注:WITH_BOOST为解压后boost的路劲

编译PC版目的,为了产生:
extra/comp_err
scripts/comp_sql
sql/gen_lex_hash
sql/gen_lex_token
extra/protobuf/protoc
libmysql/libmysql_api_test
这6 个文件在编译 arm 版本时需要用到

(2)编译ARM版mysql
A. 修改根目录下的CMakeLists.txt,在文件开始处添加arm交叉编译信息:

IF(1)# this is requiredSET(CMAKE_SYSTEM_NAME Linux)SET(CMAKE_CROSSCOMPILING TRUE)# specify the cross compilerSET(CMAKE_C_COMPILER_WORKS 1)SET(CMAKE_CXX_COMPILER_WORKS 1)SET(CMAKE_C_COMPILER "aarch64-ax630-linux-gnu-gcc")SET(CMAKE_CXX_COMPILER "aarch64-ax630-linux-gnu-g++")# where is the target environment SET(CMAKE_FIND_ROOT_PATH  "/opt/arm64/ax630-linaro-7.5.0-2019.12-aarch64-linux-gnu/aarch64-linux-gnu/libc")#SET(CMAKE_FIND_ROOT_PATH  "/opt/arm64/ax630-linaro-7.5.0-2019.12-aarch64-linux-gnu")# search for programs in the build host directories (not necessary)SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)# for libraries and headers in the target directoriesSET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)SET(STACK_DIRECTION 1)SET(CMAKE_SYSTEM_PROCESSOR arm)SET(CMAKE_SYSTEM_VERSION 1)SET(CMAKE_CROSSCOMPILING 1)# configure BoostSET(BOOST_INCLUDE_DIR /home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0)SET(LOCAL_BOOST_DIR /home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0)# openssl configurationSET(OPENSSL_INCLUDE_DIR /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/include)SET(OPENSSL_LIBRARY /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib/libssl.so)SET(CRYPTO_LIBRARY /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib/libcrypto.so)SET(CMAKE_CXX_LINK_FLAGS "-L/home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib -lssl -lcrypto")ENDIF()

B. 修改cmake目录下的libevent.cmake:

MACRO(FIND_LIBEVENT_VERSION)IF(0)SET(TEST_SRC"#include <event.h>#include <stdio.h>int main(){fprintf(stdout, \"%s\", LIBEVENT_VERSION);}")FILE(WRITE"${CMAKE_BINARY_DIR}/find_libevent_version.c""${TEST_SRC}")TRY_RUN(TEST_RUN_RESULT COMPILE_TEST_RESULT${CMAKE_BINARY_DIR}"${CMAKE_BINARY_DIR}/find_libevent_version.c"CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBEVENT_INCLUDE_DIRS}"COMPILE_OUTPUT_VARIABLE OUTPUTRUN_OUTPUT_VARIABLE RUN_OUTPUT)ELSE()SET(LIBEVENT_VERSION "2.1.11-stable")SET(COMPILE_TEST_RESULT TRUE)SET(RUN_OUTPUT "2.1.11-stable") ENDIF()# MESSAGE(STATUS "TRY_EVENT TEST_RUN_RESULT is ${TEST_RUN_RESULT}")# MESSAGE(STATUS "TRY_EVENT COMPILE_TEST_RESULT is ${COMPILE_TEST_RESULT}")# MESSAGE(STATUS "TRY_EVENT COMPILE_OUTPUT_VARIABLE is ${OUTPUT}")# MESSAGE(STATUS "TRY_EVENT RUN_OUTPUT_VARIABLE is ${RUN_OUTPUT}")

创建arm编译目录及编译:

mkdir build_arm
cd build_arm
cmake ../ -DCMAKE_INSTALL_PREFIX=/mnt/database/mysql \-DMYSQL_DATADIR=/mnt/database/mysql/data \-DWITH_BOOST=/home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0 \-DSYSCONFDIR=/etc/ \-DEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DENABLED_LOCAL_INFILE=1 \-DCURSES_INCLUDE_PATH=/home/he_liangbin/gitlab-ax630/mysql/ncurses-6.1/_install/include \-DCURSES_LIBRARY=/home/he_liangbin/gitlab-ax630/mysql/ncurses-6.1/_install/lib/libncurses.so \-DWITH_LIBEVENT="bundled"make

make之后会产生一系列错误,解决方法如下:
错误一解决办法
/bin/sh: comp_err / gen_lex_hash / gen_lex_token / comp_sql: not found

cp ../build_x86/extra/comp_err ~/bin/
cp ../build_x86/sql/gen_lex_hash ~/bin/
cp ../build_x86/sql/gen_lex_token ~/bin/
cp ../build_x86/scripts/comp_sql ../scripts/
cp ../build_x86/scripts/comp_sql ~/bin/
cp ../build_x86/extra/protobuf/protoc ~/bin/

注:~/bin 已经添加到PATH目录,如果不是这个目录,需要导出坏境。

错误二解决办法:

/bin/sh: ./libmysql_api_test: cannot execute binary file:
cp ../build_x86/libmysql/libmysql_api_test libmysql/

错误三解决方方法
mysql-5.7.35/storage/innobase/include/os0atomic.ic:230:2: error: #error "Unsupported platform"
修改storage/innobase/include/os0atomic.ic

line 198:

#elif defined(IB_STRONG_MEMORY_MODEL)
************ to ***************
#elif defined(IB_STRONG_MEMORY_MODEL) || defined (HAVE_ATOMIC_BUILTINS)

修改storage/innobase/include/os0atomic.h
line 64:

#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \|| defined _M_X64 || defined __WIN__#define IB_STRONG_MEMORY_MODEL
#endif************ to ***************#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \|| defined _M_X64 || defined __WIN__#define IB_STRONG_MEMORY_MODEL#else#define HAVE_ATOMIC_BUILTINS#endif

line 265:

# ifdef HAVE_IB_ATOMIC_PTHREAD_T_GCC
#if defined(HAVE_GCC_SYNC_BUILTINS)
#  define os_compare_and_swap_thread_id(ptr, old_val, new_val) \os_compare_and_swap(ptr, old_val, new_val)
#else************ to ***************# ifdef HAVE_ATOMIC_BUILTINS
#if defined(HAVE_ATOMIC_BUILTINS)
#  define os_compare_and_swap_thread_id(ptr, old_val, new_val) \os_compare_and_swap(ptr, old_val, new_val)
#else

错我修改后一般可以编译过i,编译完成后:
make install
/mnt/database目录下有最终的目标文件

4、移植到板子上测试

由于只需要跑一个mysql服务,因此不需要所有的目标文件都拷贝到板子上
(1)建立目录mysql_lite
mkdir mysql_lite, mysql_lite/bin, mysql_lite/lib
(2)拷贝文件
bin目录:my_print_defaults  mysql  mysqladmin  mysqld  mysqld_safe 
lib目录:存放ncurses/openssl的库
拷贝启动脚本:mysql.server
(3)创建配置脚本my.cnf(修改为自己路径)

[client]
port = 3306
socket =/var/mysqld/mysqld.sock
[mysqld]
user = root
port = 3306
character-set-server = utf8
#collation-server = utf8_general_ci

skip-external-locking
skip-name-resolve

basedir   = /mnt/database/mysql/
datadir   = /mnt/database/mysql/data
#tmpdir    = /mnt/database/mysql/temp
log-error = /mnt/database/mysql/logs/mysql_error.log
pid-file  = /var/mysql.pid
socket    = /var/mysqld/mysqld.sock

performance_schema_max_table_instances=50
performance_schema = off
table_definition_cache=50
table_open_cache = 64
open_files_limit = 128

back_log = 60
max_connections=64
max_connect_errors =128
wait_timeout=60580

#open_tables = 600
#table_cache = 650
#opened_tables = 630
#max_allowed_packet = 128k

sort_buffer_size = 128k
join_buffer_size = 128k
thread_cache_size = 300

query_cache_type = 1
query_cache_size = 1M
query_cache_limit = 1M
#query_cache_min_res_unit = 16k

tmp_table_size = 128k
max_heap_table_size = 128k
key_buffer_size = 128k

#read_buffer_size = 128k
#read_rnd_buffer_size = 128k

#bulk_insert_buffer_size = 128k
#lower_case_table_names=1

default-storage-engine = INNODB
innodb_buffer_pool_size = 1M
innodb_log_buffer_size = 128k
innodb_log_file_size = 128k
#innodb_flush_method = O_DIRECT
#####################
#long_query_time= 2
#slow-query-log = off
#slow-query-log-file = /mnt/database/mysql/logs/mysql-slow.log

[mysqldump]
quick
max_allowed_packet = 1M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/mysqld.pid

(4)拷贝到板子上
板子创建目录:
mkdir /mnt/database/mysql
mkdir /mnt/database/mysql/data
mkdir /mnt/database/mysql/logs
运行时依赖目录
mkdir /var/log
mkdir /var/mysqld

拷贝mysql_lite目录下的内容到/mnt/database/mysql下
拷贝my.cnf到板子/etc目录下

(5)运行
直接用 root 用户运行,不进行创建用户组,直接初始化
/mnt/database/mysql/bin/mysqld --initialize-insecure --user=root --basedir=/mnt/database/mysql --datadir=/mnt/database/mysql/data
启动服务
/mnt/database/mysql/mysql.server start
此时 mysql 能跑起来,但是用可视化工具去连接发现不让连,可能还需要配置:
/mnt/database/mysql/bin/mysql,输入内容如下:
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
这样远程即可连接

5、参考网站
主要: https://zhuanlan.zhihu.com/p/341840506
主要: https://blog.csdn.net/yangxiangzhan/article/details/105059380
https://www.dazhuanlan.com/alanzxy/topics/1316346
https://blog.csdn.net/fhyocean/article/details/74960005

aarch64 arm上交叉编译mysql-2.7.35相关推荐

  1. mysql5.1.35_在Windows上安装MySql 5.1.35 Noinstall版

    1. 在http://dev.mysql.com/downloads/mysql/5.0.html下载mysql-noinstall-5.0.15-win32.zip. 2. 解压到C:\mysql, ...

  2. 技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8

    作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理.擅长数据库故障处理.对数据库技术和 python 有着浓厚的兴趣. 本文来源:原创投稿 *爱可生开源社 ...

  3. qt linux wifi,在linux,arm上的屏幕搜索wifi并连接(qt,多选择,wifi按信号排列)转...

    先上代码!! #include "widget.h" #include "ui_widget.h" #include #include Widget::Widg ...

  4. MySQL 5.5.35 单机多实例配置详解

    一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...

  5. 在CentOS上把MySQL从5.5升级到5.6

    在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程. 1. 概述 在我做的一个项目中,最近我对生产服务器上的 ...

  6. MySQL 5.6.35 索引优化导致的死锁案例解析

    一.背景 随着公司业务的发展,商品库存从商品中心独立出来成为一个独立的系统,承接主站商品库存校验.订单库存扣减.售后库存释放等业务.在上线之前我们对于核心接口进行了压测,压测过程中出现了 MySQL ...

  7. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...

  8. mysql 5.5.35 单机多实例配置详解_MySQL 5.5.35 单机多实例配置详解

    一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...

  9. Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)

    文章目录 交叉编译 1.编译 2.本地编译 3.交叉编译 交叉编译工具链 交叉编译 在嵌入式系统开发中,经常会听到一个词:交叉编译.到底什么是"交叉编译"呢?为什么要使用" ...

  10. MPlayer在ARM上的移植(S5PV210开发板)

    MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只 ...

最新文章

  1. Flatten Nested Arrays(展平嵌套数组)
  2. Hibernate学习(4)- Hibernate对象的生命周期
  3. 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t
  4. dede 二次开发系统迁移到 IIS 时会出现的问题及解决方案
  5. ATP检查的一些TIPS
  6. 初建FreeMarker工程
  7. C语言 共享库(动态库)制作
  8. 14.查看信息深入讲解
  9. Hibernate配置C3P0连接池(在配好基本的hibernate配置下使用)
  10. Hyper-V常用问题解惑
  11. 软件工程习题2第三小题
  12. 遍历hashmap 的四种方法
  13. apache的开源项目-模板引擎(Velocity)(转)
  14. z世代消费力白皮书_谁在影响2.6亿年轻人的消费?Z世代消费力白皮书2019|企鹅智库...
  15. Bert源代码(二)模型
  16. linux 系统编程--标准IO-缓存
  17. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
  18. Least Crucial Node UVALive - 7456 【】
  19. 推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
  20. python zip(*zipped)的疑问

热门文章

  1. Docker客户端连接Docker Daemon的方式
  2. 数据库中,什么是事务,事务的特性
  3. 为Node.js编写组件的几种方式
  4. 转:开源项目学习方法ABC
  5. 使用Jorm简单的增删查改数据库
  6. 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置... 1
  7. ASP.NET MVC4 乱七八糟罗列
  8. PHP问题 —— failed to open stream: HTTP request faile
  9. asp.net 调用echarts显示图表控件随浏览器自适应解决方案
  10. 深入理解JavaScript内部原理(6): 闭包