编译Hi3359A开发板上用的mysql
开发环境
- ubuntu 16.04 server版(已安装编译链 aarch64-himix100-linux)
- mysql 5.7.26 https://dev.mysql.com/downloads/file/?id=485749
- 参考资料
https://blog.csdn.net/changqing1990/article/details/83027384
https://blog.csdn.net/fhyocean/article/details/74960005
https://github.com/velarn/CrossCompliteArmMysql
编译过程
编译Ubuntu上的mysql
- 解压MySQL安装包(https://dev.mysql.com/downloads/file/?id=485749)
tar -zxf mysql-boost-5.7.26.tar.gz - 先编译pc上的版本,有移植经验的同学会知道: 编译过程中要生成一些工具,并在编译的时候要执行。 mysql 也一样, 编译的时候需要执行以下6 个工具来完成编译。编译arm版时需要在已编译好的mysql-pc/BUILD目录拷贝这些文件
-
extra/comp_err
-
scripts/comp_sql
-
sql/gen_lex_hash
-
sql/gen_lex_token
-
extra/protobuf/protoc
-
libmysql/libmysql_api_test
cd mysql-5.7.26/BUILD 目录里,使用 compile-pentium64 脚本执行编译(3359用的64位的) ./compile-pentium64
初次编译时会报错找不到bootst库
根据错误提示修改compile-pentium64文件
删掉原先的cmake文件后重新执行compile文件,会自动下载boost库到BUILD目录,网速不好的可以在国内镜像站下载一个1.59版本的放到相同目录,接着继续编译。
中途会提示找不到CURSES_LIBRARY 和pkg-config,按提示进行安装即可,接着继续编译等待完成即可
交叉编译ncurse-6.1
-
下载ncurses-6.1(http://mirrors.ustc.edu.cn/gnu/ncurses/) 并解压(5.9版本不支持aarch64会报错,需要修改配置文件,过于麻烦)
-
configure并编译
make
make install DESTDIR=pathinstall安装时会有报错,错误如下,只要安装目录lib文件夹中有.a文件生成就可以不管它
交叉编译mysql
1、将mysql目录改名如 mysql-pc 留作备用,重新解压mysql.tar.gz
2、 在解压目录中新建一个BUILD_ARM目录,新建一个compile-arm文件,内容如下
3、 执行compile-arm 文件,这个步骤应该不会出问题
4、接着执行make,过程中会报一些错误,一个个解决即可
copy extra/comp_err文件并touch,接着继续make
拷贝 libmysql/libmysql_api_test
拷贝 sql/gen_lex_hash
很不幸出现了新的错误 “#error Unsported Platform” ,思路在开头的另两遍文章里有讲解,此处直接展示解决方法
显然错误产生的原因是没有宏定义才导致的。os0atomic.ic的宏定义中有HAVE_IB_GCC_ATOMIC_COMPARE_EXCHANGE,IB_STRONG_MEMORY_MODEL这两个宏定义。
我们在看看os0atomic.h的内容,os0atomic.h开头内容如下:
#endif /* _WIN32 */
#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \
|| defined _M_X64 || defined __WIN__
#define IB_STRONG_MEMORY_MODEL
#endif /* __i386__ || __x86_64__ || _M_IX86 || _M_X64 || __WIN__ */
我们修改成
# 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
UNIV_INLINE
bool
os_compare_and_swap_thread_id(volatile os_thread_id_t* ptr, os_thread_id_t old_val, os_thread_id_t new_val)
{
return __atomic_compare_exchange_n(ptr, &old_val, new_val, 0,
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}
修改成
接着继续编译
拷贝 scripts/comp_sql
拷贝 sql/gen_lex_token
拷贝 extra/protobuf/protoc 等待编译完成即可,接着install到指定目录
make install DESTDIR=/mnt/lsx/mysql-5.7.26/install_arm
部署mysql
1、拷贝文件
将install_arm目录中的mysql上传到目标机器需要安装mysql的位置
在目标机器mysql目录下创建data文件夹。
2、配置并运行mysql
执行以下脚本:(根据实际情况调整目录)
#!/bin/bash
MYSQL_BASE=/usr/local/mysql
echo "Setup the mysql-5.7.26....."
echo "Create the data path ${MYSQL_BASE}/data..."
mkdir -p ${MYSQL_BASE}/data
echo "Initailize the data directory and create the MySQL grant tables"
${MYSQL_BASE}/bin/mysqld --user=root --basedir=${MYSQL_BASE} --datadir=${MYSQL_BASE}/data --initialize-insecure ##--initialize
echo "copy mysqld config file to /etc/ "
cp my.cnf /etc/my.cnf
echo "Create link to /usr/bin"
ln -s ${MYSQL_BASE}/bin/mysqld /usr/bin/mysqld
ln -s ${MYSQL_BASE}/bin/mysql /usr/bin/mysql
ln -s ${MYSQL_BASE}/bin/my_print_defaults /usr/bin/my_print_defaults
ln -s ${MYSQL_BASE}/bin/mysqladmin /usr/bin/mysqladmin
ln -s ${MYSQL_BASE}/bin/mysqldump /usr/bin/mysqldump
echo "Starting and Stopping MySQL Automatically.... "
cp ${MYSQL_BASE}/support-files/mysql.server /etc/init.d/mysqld
/usr/sbin/update-rc.d mysqld defaults 98
echo "No passwd for mysql, you can use the following command to login: "
echo "mysql -u root --skip-password "
echo "[Done]"
exit 0;
脚本中涉及到my.conf, 你可以按照自己需求进行配置,下面给出一个demo:
########################################################
###### mysql configure file
########################################################
[mysqld]
user=root
port=3306
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
pid-file=/var/run/mysqld.pid
general-log-file=/var/log/mysqld.log
slow-query-log-file=/var/log/mysqld.log
log-error=/var/log/mysqld.log
[client]
port=3306
socket=/tmp/mysql.sock
通过以上步骤,就完成了相关的配置,接下来就可以直接运行mysql 客户端进行相关测试了。