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
编译完成后,这个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")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