Armbian OS(基于ubuntu24) 源码编译mysql 5.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_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_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-links=0

log-error=/opt/mysql/mysqld.log
pid-file=/opt/mysql/mysqld.pid

#密码检查规则关闭
#validate_password=off

max_allowed_packet = 16M
skip-character-set-client-handshake
default-storage-engine=INNODB
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
lower_case_table_names=1
max_connections=1000

server-id=1
log-bin=mysql-bin
expire_logs_days=7

performance_schema_max_table_instances=200
table_definition_cache=200
table_open_cache=128

然后按配置的初始化一下目录和权限

mkdir -p /opt/mysql/data
chown -R mysql:mysql /opt/mysql/

执行初始化

mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

然后查看root默认密码:

cat /opt/mysql/mysqld.log | grep "temporary password"

写个启动服务

vi /etc/systemd/system/mysqld.service

内容如下:

[Unit]
Description=MySQL Server Daemon
After=network.target

[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/opt/mysql/mysqld.pid
ExecStart=/usr/local/mysql/bin/mysqld --daemonize
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=120
TimeoutStopSec=10
KillMode=process
Restart=on-failure
LimitNOFILE=5000

[Install]
WantedBy=multi-user.target

然后设置自启动:

systemctl enable mysqld

前面都正确的话,应该本地就可以用root+初始密码进入了

mysql -uroot -p"Mu>aiR,Zx502" mysql

然后修改下默认密码,例如:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin'

重启mysqld服务,完事

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/701495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

马斯克的战略选择:特斯拉的H100显卡转移风波及其影响

引言 最近,一则关于马斯克将特斯拉的H100显卡转给他的新公司xAI的消息引发了广泛关注。这一决定不仅导致特斯拉股价下跌,还引发了关于马斯克战略决策的激烈讨论。本文将深入探讨这一事件的背景、过程及其对特斯拉和整个科技行业的影响。 背景与事件回顾…

8.transformers量化

Transformers 核心设计Auto Classes Transformers Auto Classes 设计:统一接口、自动检索 AutoClasses 旨在通过全局统一的接口 from_pretrained() ,实现基于名称(路径)自动检索预训练权重(模 型)、配置文件、词汇表等所有与模型相关的抽象。 灵活扩展的配置AutoConfig…

本地GPT-window平台 搭建ChatGLM3-6B

一 ChatGLM-6B 介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,新一代开源模型 ChatGLM3-6B 已发布,拥有10B以下最强的基础模型,支持工具调用(Function Call)、代码执行(Code Interpreter&…

【Python】成功解决ModuleNotFoundError: No module named ‘PyQt5‘

【Python】成功解决ModuleNotFoundError: No module named ‘PyQt5’ 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985…

c语言回顾-函数递归

1.递归的介绍 1.1什么是递归 递归是指在一个函数的定义中调用自身的过程。简单来说,递归是一种通过重复调用自身来解决问题的方法。 递归包括两个关键要素:基本情况和递归情况。基本情况是指当问题达到某个特定条件时,不再需要递归调用&am…

SpringBoot整合SpringDataRedis

目录 1.导入Maven坐标 2.配置相关的数据源 3.编写配置类 4.通过RedisTemplate对象操作Redis SpringBoot整合Redis有很多种,这里使用的是Spring Data Redis。接下来就springboot整合springDataRedis步骤做一个详细介绍。 1.导入Maven坐标 首先,需要导…

LLM应用实战:当图谱问答(KBQA)集成大模型(三)

1. 背景 最近比较忙(也有点茫),本qiang~想切入多模态大模型领域,所以一直在潜心研读中... 本次的更新内容主要是响应图谱问答集成LLM项目中反馈问题的优化总结,对KBQA集成LLM不熟悉的客官可以翻翻之前的文章《LLM应用实战:当KBQ…

弘君资本:苹果股价暴涨,创历史新高!

当地时间6月11日,美股三大指数涨跌纷歧,标普500指数与纳指再创新高。 到收盘,道指跌0.31%,纳指涨0.88%,标普500指数涨0.27%。 苹果大涨逾7%创前史新高。美联储开端召开6月货币方针会议,周三发布利率决定。…

传神论文中心|第11期人工智能领域论文推荐

在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…

如何进行电子故障失效分析FA?

在电子主板生产的过程中,一般都会出现失效不良的主板,因为是因为各种各样的原因所导致的,比如短路,开路,本身元件的问题或者是认为操作不当等等所引起的。 所以在电子故障的分析中,需要考虑这些因素&#x…

5.5 业务流程和业务逻辑设计

一、引言 1.1 项目背景 经过上述的论述,我们讨论一下业务流程和业务逻辑设计,通过合理的业务流程设计和业务逻辑设计,可以提高用户的购物体验,降低用户的操作成本,并确保用户的购物行为符合平台的规则和要求。同时&a…

旅游网页(HTML+CSS+JS)

前言 本篇博客就不给大家讲解了,直接上代码 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:https://blog.csdn.net/2302_78381559/category_12644031.html?spm1001.2014.3001.5482https://blog.csdn.net/2302_78381559/catego…

Linux防火墙管理

计算机防火墙用于保护内部网络,主机和网络安全,有硬件防火墙和软件防火墙两种,软件主要是用对数据包进行分析过滤来保证软件层面安全。 此外还有根据对数据封包形式确定的分类方法, 如代理服务器,类似网关的形式监控整…

Mcgs 屏幕Modbus RTU通讯调试

目录 1. 设备窗口1.1 添加设备构件1.2 设备配置1.2.1 通用串口父设备配置1.2.2 设备0--ModbusRTU配置2. 设计用户窗口2.1 关联设备通道与实时数据库2.3 用户窗口3. 通信测试本文想要实现通过Modbus协议与Mcgs屏幕进行通信收发数据。在使用Mcgs屏幕进行Modbus通信时,一般Mcgs屏…

如何完美解决 sun.security.validator.ValidatorException: PKIX path building failed

如何完美解决 sun.security.validator.ValidatorException: PKIX path building failed 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的…

一种改进盲解卷积算法在旋转机械故障诊断中的应用(MATLAB)

滚动轴承故障形成后,故障区与其他零部件表面接触将产生循环平稳的瞬态脉冲。由于受到系统传递函数、轴转频和环境噪声的干扰,故障脉冲特征受到大幅衰减,在测得信号中表现十分微弱甚至完全不可见。盲解卷积算法通过搜索一个最优的有限脉冲响应…

“面向绿色流域构建的生态处理技术创新与实践论坛”在成都召开

由中华环保联合会、福州大学、上海大学联合主办,中华环保联合会水环境治理专业委员会、福建省环境功能材料先进技术工程研究中心、上海大学环境与化学工程学院承办的“2024全国水科技大会暨技术装备成果展览会”于5月14日在成都世纪城国际会议中心隆重开幕。 期间&a…

Python 中 Selenium 的 send_keys() 函数

我们将介绍 Selenium Python 中的 send_keys() 函数并演示其用法。 任何应用程序在进入市场之前都需要经过一些测试。 应用程序应首先满足与其名称相关的所有要求。 我们应该全面测试应用程序,因为没有人能够预测给予应用程序的确切输入。 Python Selenium 可以帮…

新书速览|Autodesk Inventor 2024入门与案例实战:视频教学版

《Autodesk Inventor 2024入门与案例实战:视频教学版》 本书内容 《Autodesk Inventor 2024入门与案例实战:视频教学版》以Autodesk Inventor 2024为平台,重点介绍Autodesk Inventor 2024中文版的各种操作方法及其在工程设计领域的应用。《Au…

企业光纤专线和家用的区别

企业光纤专线与家用宽带之间的主要区别在于服务对象、技术特性、性能、成本以及服务等级。以下是一些关键差异: 服务对象: 企业光纤专线:专门为企业用户设计,通常需要提供营业执照作为申请条件,适用于需要稳定、高速和…