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 required
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_CROSSCOMPILING TRUE)
# specify the cross compiler
SET(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 directories
SET(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 Boost
SET(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 configuration
SET(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 OUTPUT
RUN_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_ciskip-external-locking
skip-name-resolvebasedir = /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.sockperformance_schema_max_table_instances=50
performance_schema = off
table_definition_cache=50
table_open_cache = 64
open_files_limit = 128back_log = 60
max_connections=64
max_connect_errors =128
wait_timeout=60580#open_tables = 600
#table_cache = 650
#opened_tables = 630
#max_allowed_packet = 128ksort_buffer_size = 128k
join_buffer_size = 128k
thread_cache_size = 300query_cache_type = 1
query_cache_size = 1M
query_cache_limit = 1M
#query_cache_min_res_unit = 16ktmp_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=1default-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