编译arm开发板上用的mysql 编译Hi3359A开发板上用的mysql 开发环境 编译过程 编译Ubuntu上的mysql 交叉编译ncurse-6.1 交叉编译mysql 部署mysql 1、拷贝文件 2、配置并运行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=path
install安装时会有报错,错误如下,只要安装目录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_arm1 部署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 客户端进行相关测试了。