MySQL5.7.21 Build For ARM

MySQL5.7.21 Build For ARM
如果熟悉CMake的话,编译过程中基本比较简单!没有什么大的错误,这里做一些基本的记录!
一、基本环境
参考地址
http://dp.nonoo.hu/cross-compiling-mysql/
http://blog.csdn.net/catemo/article/details/53136343
MYSQL版本
mysql-5.7.21-linux-glibc2.12-i686
目标系统板
Hi3536
编译工具链
arm-hisiv400-linux
编译环境

Ubuntu16.4 64bit Desktop

二、需要的其它软件包
boost1.59.0 :(Mysql5.7.21提示必须是这个版本),主机安装,在下载Mysql时发现有一个包含boost头文件的源码包,如果下载的是那个,应该就不需要安装boost1.59的库了.
git:主机安装
Cmake3.5.1:主机安装

Ncurses:交叉编译

三、编译Mysql5.7.21

注:如果你熟悉CMake工具的话,编译一般会很顺利,有些小问题,也很好解决.

解压安装包:
tar -zxf mysql-5.7.21.tar.gz
在包的根目录下中的有一个BUILD目录,这里有一些预设好的一些编译脚本了。在编译Mysql过程中,它会生成一些PC端的工具,而用这些PC工具做一些工作,所以在编译ARM板上的版本时,先完整的编译一个PC上的版本先,在编译ARM版本时再使用PC版本的工具来执行。
编译PC版本

cd mysql-5.7.21/BUILD 目录里,使用 compile-pentium64 脚本执行编译(因为我的是64bit的ubuntu版本,如果你的是32bit的就用compile-pentium脚本)

./compile-pentium64

前面的工作做好的话,编译PC版本的应该会很顺利!
安装PC版本到一个目录,后面可以用来连接或对比ARM版本测试.
./make install DESTDIR=/home/ubuntu/mysql5.7.21_pc


编译完成后,这个BUILD目录,不要去clean或删除,下面编译ARM版本还需要。


编译ARM版本
首先在mysql代码的根目录里我们创建一个BUILD_ARM的编译目录.
mkdir mysql-5.7.21/BUILD_ARM
cd mysql-5.7.21/BUILD_ARM
在BUILD_ARM里创建一个编译的脚本compile-arm:
内容只是简单的 
cmake $path/.. -DWITH_DEBUG=0 -DSTACK_DIRECTION=1 -DENABLE_DOWNLOADS=1 
即可


修改 mysql-5.7.21/CMakeLists.txt 


在开始头处添加如下的配置:

#=================for hi3536================================
SET(CMAKE_C_COMPILER "arm-hisiv400-linux-gcc")
SET(CMAKE_CXX_COMPILER "arm-hisiv400-linux-g++")
SET(CMAKE_SYSTEM_NAME "Linux")
SET(CMAKE_SYSTEM_PROCESSOR "arm")
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_CROSSCOMPILING 1)


SET(CMAKE_C_FLAGS_DEBUG "-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations")

SET(CMAKE_CXX_FLAGS_DEBUG "-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations")

SET(CMAKE_LIBRARY_PATH "/home/ubuntu/build/hi3536/lib")

LINK_DIRECTORIES("/home/ubuntu/build/hi3536/lib")
INCLUDE_DIRECTORIES("/home/ubuntu/build/hi3536/include")
#INCLUDE_DIRECTORIES("/home/ubuntu/build/hi3536/include/ncurses")


#必须的,不然在编译时提示找不到boost的库
SET(BOOST_INCLUDE_DIR "/usr/local/include")
SET(BOOST_LIBRARY_DIR "/usr/local/lib")

SET(LOCAL_BOOST_DIR "/usr/local/boost")

SET(CMAKE_FIND_ROOT_PATH "/opt/hisi-linux/x86-arm/arm-hisiv400-linux")

#2 从来不在指定目录下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#3 只在指定目录下查找库文件
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
#4 只在指定目录下查找头文件
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)

SET(STACK_DIRECTION 1)
#必须的,不然在编译过程中会有一些相关宏控制的定义错误提示
SET(WITH_UNIT_TESTS OFF)
SET(WITH_EMBEDDED_SERVER FALSE)


SET(DEFAULT_CHARSET utf8)
SET(DEFAULT_COLLATION utf8_general_ci)


SET(HAVE_LLVM_LIBCPP OFF)

#======================end for hi3536=======================================


注: CMAKE_C_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_DEBUG 这两个值只是根据arm-hisiv400-linux配置的!

HAVE_LLVM_LIBCPP OFF 这个在需要关闭,不然在编译中也会报代码上的错误!


编译

切换到 mysql-5.7.21/BUILD_ARM,执行 ./compile-arm

再 make 
在编译过程中有提示错误的地方,如果是PC上的工具执行不了,或找不到,就根据提示到前面PC版本里去录找有没有对应的工具,再拷贝到 BUILD_ARM里对应的目录即可!
在编译时,遇到提示 osOatomic.ic/osOatomic.h 这两个文件中有错误,请参考前面提到的参考网址里的方法解决!
安装
编译完成后,安装到一个目录

make install DESTDIR=/home/ubuntu/mysql5.7.21_arm

四、配置ARM版本服务
拷贝/home/ubuntu/mysql5.7.21_arm/usr/local/mysql到目标板

NFS挂载或什么的都可以吧!

配置MYSQL: my.conf
如我的配置(mysql和数据都放在一个SSD硬盘上的):
/mnt/a/mysql # cat /etc/my.cnf 
[mysql]
default-character-set=utf8


[mysqld]
port = 3306     
basedir=/mnt/a/mysql 
datadir=/mnt/a/mysql/data
max_connections=20
character-set-server=utf8
default-storage-engine=INNODB 

skip-name-resolve

初始化数据库目录
如在mysql目录下:
./bin/mysqld --initialize-insecure --user=root

这一步会生成mysql的一个临时密码,注意打印内容,记录下,在用mysql连接时,使用它连接你的服务端.


执行服务
如在mysql目录下:
./bin/mysql -uroot
这里为了简单直接用root用户运行服务了,为了安全,应该创建一个mysql的用户来操作。

五、结束了
基本就是这些流程了,关于配置MYSQL的问题,可以百度下了,如:
设置root密码 
mysql> use mysql; 
Database changed 
mysql> update user set authentication_string=password("123456") where User="root"; 
Query OK, 1 row affected, 1 warning (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 1 
mysql> 

mysql>FLUSH PRIVILEGES;

或:

  Set password=password(“123456”);


远端连接
mysql>use mysql;
mysql>update user set host ='%'where user ='root' and host ='localhost';

mysql>flush privileges;


跳过DNS解析
my.conf中添加
skip-name-resolve


一般板上如果没有设置/etc/host.conf,或hostname没有设置!


六、加个基本的测试数据
300W单表数据测试
测试主要对比在对一个存在300W行数据表进行Select,Update,Insert时查询的耗时,在有无索引作用下,差别很大.
PC配置就是在工作的i7-6700上测试的,是机械硬盘,8G内存,是在开有Ubuntu16.04虚拟机下测试的,只能拿来做一个基本的对比吧!


MYSQL5.7.21版本

ARM测试环境:
CPU:Hi3536
RAM:1024MB

硬盘: SSD 16GB

PC测试环境:
CPU:i7
ARM:8G
硬盘:机械硬盘

ARM上无运行任何其它业务下进行,PC机上有运行其它工具,服务,虚拟机等。


UPDATE:

-2018/03/29

重新编译了一次,boost不只用了头文件,在生成工具时,还用了它的库,所以boost最好也编译成一个ARM版本的,给mysql链接:

boost arm编译方法见:

http://www.boost.org/build/doc/html/bbv2/tasks/crosscompile.html


如:

set project-config.jam
using gcc : arm : arm-none-linux-gnueabi-g++ ;
./b2 toolset=gcc-arm
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值