烟台专业做网站公司哪家好,网站seo规范,濮阳网络安全报警电话,版图设计工资一般多少最近弄了个S905X3的盒子刷完Armbian OS #xff08;基于ubuntu24#xff09;#xff0c;开始折腾Arm64之旅。第一站就遇到了MySQL的问题#xff0c;由于MySQL没有提供Arm64版本#xff0c;又不想塞Docker镜像#xff0c;因此选择源码来编译MySQL5.7。下面记录详细过程和遇…最近弄了个S905X3的盒子刷完Armbian OS 基于ubuntu24开始折腾Arm64之旅。第一站就遇到了MySQL的问题由于MySQL没有提供Arm64版本又不想塞Docker镜像因此选择源码来编译MySQL5.7。下面记录详细过程和遇到的一些问题
CMAKE
最新的mysql均采用cmake的环境因此要编译从cmake开始。Armbian OS默认安装的都是精简系统得自行安装一下cmake
apt install cmake
至于BuildEssiontial貌似默认就带了于是继续往下走
万年的MySQL57万年的OPENSSL1.1
要装MySQL一个蛋疼的组件就是OPENSSL众所周知从ubuntu22开始openssl 1.1版就已经没有在默认库带上了。其它系统上还可以通过强制指定库来处理Arm系统下只得自己下来源码编译
wget https://mirrors.tencent.com/openssl/source/old/1.1.1/openssl-1.1.1v.tar.gz
然后展开后一路make make install就好了
下载MYSQL57源码
下载最新带boost的源码包
https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.44.tar.gz
下来后然后展开
tar -xvf mysql-boost-5.7.44.tar.gz
然后把依赖更新一下对于ubuntu24来说是这几个
apt-get install libncurses-dev
apt install pkg-config
apt install libtirpc-dev
补丁开始编译
源码展开后要补丁一下否则mysql client工具会报segmentation fault错误无法使用
在源码解压文件中找到terminal.h源码文件并编辑
find / -name terminal.h -print | head -n 1 | xargs vi
将其中的ifdef __sun 段注释掉完全开放 修改后是这样
/* #ifdef __sun */
extern int tgetent(char *, const char *);
extern int tgetflag(char *);
extern int tgetnum(char *);
extern int tputs(const char *, int, int (*)(int));
extern char* tgoto(const char*, int, int);
extern char* tgetstr(char*, char**);
/* #endif */然后就可以开始编译了进入mysql展开的目录我的是展开到了/opt/setups/mysql/mysql-5.7.44执行以下代码先开启4核我的HK1BOX是4核ARM
export MAKEFLAGS-j4
进入到展开的源码目录执行然后下面是编译命令
cmake . -DDEFAULT_CHARSETutf8 -DDEFAULT_COLLATIONutf8_general_ci -DWITH_BOOST/opt/setups/mysql/mysql-5.7.44/boost/
最好加个nohup后台执行因为太。。。。漫长了。
在我的小盒子里开4个线程7W的满载功率跑了1个小时才编译完这还是开4线程跑的 幸好改装了风扇压住了温度最高保持在50度室温25
配置MYSQL
建立一个MYSQL用户然后把目标目录授权给该用户
groupadd mysql
useradd mysql -s /sbin/nologin -M -g mysql
chown -R mysql:mysql /usr/local/mysql
把mysql加入到路径这样后面执行命令就方便了
echo export PATH$PATH:/usr/local/mysql/bin /etc/profile
source /etc/profile
优化一下配置对于我们这种小盒子系统资源占用越小越好
vi /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size 128M
# sort_buffer_size 2M
# read_rnd_buffer_size 2M
datadir/opt/mysql/data
socket/opt/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links0log-error/opt/mysql/mysqld.log
pid-file/opt/mysql/mysqld.pid#密码检查规则关闭
#validate_passwordoffmax_allowed_packet 16M
skip-character-set-client-handshake
default-storage-engineINNODB
character_set_serverutf8mb4
collation-serverutf8mb4_unicode_ci
init-connectSET NAMES utf8mb4
lower_case_table_names1
max_connections1000server-id1
log-binmysql-bin
expire_logs_days7performance_schema_max_table_instances200
table_definition_cache200
table_open_cache128
然后按配置的初始化一下目录和权限
mkdir -p /opt/mysql/data
chown -R mysql:mysql /opt/mysql/执行初始化
mysqld --defaults-file/etc/my.cnf --initialize --usermysql
然后查看root默认密码
cat /opt/mysql/mysqld.log | grep temporary password 写个启动服务
vi /etc/systemd/system/mysqld.service
内容如下
[Unit]
DescriptionMySQL Server Daemon
Afternetwork.target[Service]
Usermysql
Groupmysql
Typeforking
PIDFile/opt/mysql/mysqld.pid
ExecStart/usr/local/mysql/bin/mysqld --daemonize
ExecReload/bin/kill -s HUP $MAINPID
TimeoutStartSec120
TimeoutStopSec10
KillModeprocess
Restarton-failure
LimitNOFILE5000[Install]
WantedBymulti-user.target
然后设置自启动
systemctl enable mysqld
前面都正确的话应该本地就可以用root初始密码进入了
mysql -uroot -pMuaiR,Zx502 mysql
然后修改下默认密码例如
ALTER USER rootlocalhost IDENTIFIED BY admin
重启mysqld服务完事