一篇文章,详细教你怎么在Linux上编译安装MariaDB(10.6.4)

2023-05-16

快捷目录

  • MariaDB
    • MariaDB简介
    • MariaDB VS MySQL
  • 教程说明
  • 编译说明
  • 安装依赖
  • 下载MariaDB源码
  • Cmake编译
  • 初始化和配置
    • 1. 设置用户
    • 2. 初始化脚本
    • 3. 设置参数
    • 4. 注册服务和环境变量
    • 5. 设置root用户
    • 注意⚠️
  • 测试连接

MariaDB

MariaDB简介

2008年1月16日,MySQL AB 宣布它已经同意被Sun微系统集团以大约10亿美元的价格收购。该项收购已于2008年2月26日完成。而这也意味着,MySQL日后可能会走向完全的商用;为了继续保持在GNU GPL下开源,MariaDB孕育而出,并且MariaDB的首席开发者:Monty(Ulf Michael Widenius),正式MySQL AB的创世成员。

MariaDB是MySQL关系数据库管理系统的一个复刻,由社区开发,有商业支持。MariaDB是以Monty的小女儿Maria命名的,就像MySQL是以他另一个女儿My命名的一样。

MariaDB VS MySQL

MariaDB和MySQL区别,其实不是很大,尤其是MySQL5.x和MariaDB,目前MariaDB和MySQL主要区别:

  • 许可协议:MariaDB使用的是GPL协议,而MySQL使用的是GPL和Commercial License(商用协议)。MariaDB比MySQL更加开源。
  • SQL引擎:MariaDB相比MySQL,除了提供标准的MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE引擎外,在MariaDB源码与二进制包中还提供下列存储引擎:Aria、XtraDB (与InnoDB对等替换)、FederatedX (与Federated对等替换)、Cassandra等SQL存储引擎。
  • 速度快:据MariaDB称,同等配置条件下,MariaDB检录会比MySQL快

教程说明

网上Linux编译安装MariaDB的方法其实很多,我为什么要写这篇文章呢?主要原因:

  • 冗余严重:现在都已经MariaDB 10.6.4了,早就没有最开始提供的my.cnf文件,各大教程还在cp /usr/local/mysql /etc/my.cnf
  • Copy严重:为什么所有教程,步骤基本一样,错的也一样呢?真是个奇怪的事情嗷。

另外,编译安装MariaDB本来就是比较困难的,如果你觉得太难,可以使用Docker、软件包管理器来安装MariaDB。

本次使用腾讯云轻量应用服务器进行演示,腾讯云轻量应用服务器,提供了标准的Linux环境,十分适用于个人和小型团队嗷。

最近还有74元买一年2C 4G 8M轻量应用服务器的新用户福利(老用户也可以看看,说不定也有其他福利):

  • Mintimate的专享轻量应用服务器购买优惠链接╮( ̄▽ ̄"")╭

编译说明

编译安装,灵活性很高,但难度也很大;如果小白用户尝试,建议多阅读几遍嗷。实在不行,可以评论区留言╮( ̄▽ ̄"")╭。

首先,SSH连接我们的服务器,这里使用腾讯云轻量应用服务器,并安装了ZSH、配置了oh-my-zsh

配置ZSH目的是为了更方便操作Terminal,如果你也厌倦了Bash的操作,参考文章:Linux/Mac如何配置ZSH并使用Oh-my-zsh?让你的终端更加实用、美观

SSH连接服务器

安装依赖

根据MariaDB官方项目文档,我们需要安装依赖:gcc/g++ 4.8.5、GNU make 3.75 or later、bison (3.0)、libncurses、zlib-dev和libevent-dev。

我们使用软件包管理器安装这些依赖即可,以下是Debian/Ubuntu使用软件包管理器安装,CentOS记得替换为yum的仓库名

# 安装cmake
sudo apt-get install cmake
# 安装GCC编译器
sudo apt-get install build-essential 
# 安装Openssl以及Openssl依赖
sudo apt-get install openssl libssl-dev
# 安装bison
sudo apt-get install bison
# 安装libncurses-dev
sudo apt-get install libncurses-dev

依赖安装完成

下载MariaDB源码

之后,我们下载MariaDB的源码,可以到MariaDB发布地址下载,这里我们下载最新稳定版本10.6.4:
下载最新稳定版本:10.6.4
我们使用Linux的wget命令进行下载:

# 下载10.6.4源码
wget 'https://downloads.mariadb.org/interstitial/mariadb-10.6.4/source/mariadb-10.6.4.tar.gz'

之后,解压并进入源码内:
解压并进入源码文件夹内

Cmake编译

我们使用Cmake进行编译,我的编译参数是:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

cmake生成配置文件
这里解释一下编译参数:

  • DCMAKE_INSTALL_PREFIX:MariaDB的安装地址
  • DMYSQL_DATADIR:数据库文件存放地址
  • DMYSQL_UNIX_ADDR:sock文件编译后存放地址

以上参数需要和下文my.cnf同步(如果你需要修改我的编译参数,记得下文配置文件一并修改)

之后,我们进行安装即可:

make

过程可能很久很久~~~╮( ̄▽ ̄"")╭,建议使用screen挂起后台!!!

另外,如果你的Linux设备是多核,可以加上-j参数以加快编译速度,比如我的是腾讯云轻量应用服务器4核服务器:

make -j 4

多线程
编译完成
编译完成,并且没有问题,我们继续直接安装即可:

make install 

make install
安装好后,到/usr/local文件夹下,即可看到我们的MariaDB:
MariaDB安装地址

初始化和配置

接下来,我们需要初始化MariaDB

1. 设置用户

创建mysql用户组和用户:

groupadd -g 306 -r mysql
useradd -u 306 -g mysql -r -s /sbin/nologin mysql

创建SQL目录(上文编译参数内):

mkdir /mydata/data -p
# 归其为mysql用户
chown mysql:mysql /mydata/data

进入MariaDB安装地址,修改文件归属到mysql用户:

cd /usr/local/mysql
chgrp mysql ./*

修改归属用户
修改成功,我们可以进行下一步了。

2. 初始化脚本

使用MariaDB自带的脚本,对MariaDB进行初始化(当前在MariaDB安装目录内,即:/usr/local/mysql内):

scripts/mysql_install_db --user=mysql --datadir=/mydata/data

3. 设置参数

初始化完成后,需要设置my.cnf文件,早期版本的MySQL和MariaDB都有提供my.cnf为模版,现在已经没有提供需要手动创建,我们使用vim手动创建到/etc下

vim /etc/my.cnf

我的配置文件参考(更多参数,可以看官方文档):

# Begin /etc/mysql/my.cnf
# The following options will be passed to all MySQL clients
[client]
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL serve
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
# MariaDB安装地址
basedir         = /usr/local/mysql
datadir         = /mydata/data
#skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M
skip-name-resolve = 0

# MariaDB不监听任何IP和TCP端口
# skip-networking

# required unique id between 1 and 2^32 - 1
server-id       = 1
innodb_data_file_path = ibdata1:12M:autoextend

# You can innodb_buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_log_file_size = 48M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_force_recovery =1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
# End /etc/my.cnf

4. 注册服务和环境变量

之后,我们需要注册为系统服务,一来方便启动MariaDB,二来方便开机自启;这里使用systemctl作为服务,非service

注册为服务,我们创建一个服务器文件:

vim /usr/lib/systemd/system/mysql.service

添加内容:

[Unit]
Description=MariaDB

[Service]
LimitNOFILE=10000
Type=simple
User=mysql
Group=mysql
PIDFile=/mydata/data/microServer.pid
ExecStart=/usr/local/mysql/bin/mysqld_safe --datadir=/mydata/data
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

设置好后,使用systemctl进行启动即可:

# 重载systemctl-> 使mysql.service生效
systemctl daemon-reload
# 启动mysql.server
systemctl start mysql.service

使用systemctl status查看状态

还要添加MariaDB安装目录下的bin目录到环境变量内,如:

PATH=/usr/local/mysql/bin:$PATH

5. 设置root用户

设置root用户和允许远程登录,使用MariaDB自带的帮助脚本:

# 进入MariaDB安装目录下的bin文件夹
cd /usr/local/mysql/bin
# 运行帮助脚本
./mariadb-secure-installation

使用帮助脚本
运行脚本后,会设置root用户的密码、是否运行远程登、是否删除测试表等选项。

注意⚠️

完成上诉步骤后,其实MariaDB就可以使用了,但是我们需要设置账号,用来远程访问。默认是不允许root用户远程访问的
如果需要root用户远程登录,还需要进入MariaDB的交互模式,输入:

use mysql
grant all privileges on *.* to 'root'@'%' identified by '设置的root用户密码' with grant option;
flush privileges;

运行root用户远程连接

测试连接

现在,MariaDB就已经安装完成了,我们使用客户端Navicat进行测试,你也可以使用DataGrip等软件测试。不过,如果有Linux防火墙,记得放行端口,比如,腾讯云轻量应用服务器:
我为了方便,放行了全部端口……

最后,客户端即可连接:
Navicat连接服务器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一篇文章,详细教你怎么在Linux上编译安装MariaDB(10.6.4) 的相关文章

  • pprof 和 ps 之间的内存使用差异

    我一直在尝试分析用 cobra 构建的 cli 工具的堆使用情况 这pprof工具显示如下 Flat Flat Sum Cum Cum Name Inlined 1 58GB 49 98 49 98 1 58GB 49 98 os Read
  • 如何访问 mmaped /dev/mem 而不导致 Linux 内核崩溃?

    我有一个简单的程序 尝试访问用户空间中的物理内存 其中内核存储第一个结构页 在 64 位机器上 该地址是 内核虚拟地址 ffffea0000000000 物理地址 0000620000000000 我正在尝试通过用户空间中的 mmap 访问
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际
  • 从 php/linux 获取 pdf 的布局模式(横向或纵向)

    给定一个 PDF 如何使用 PHP lib 或 Linux 命令行工具获取 PDF 的布局模式 或相对宽度 高度 Using http www tecnick com public code cp dpage php aiocp dp tc
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • SMP 上如何处理中断?

    SMP 对称多处理器 多核 机器上如何处理中断 内存管理单元是只有一个还是多个 假设两个线程 A 和 B 运行在不同的内核上 同时 访问页表中不存在的内存页面 在这种情况下 将会出现页面错误 并从内存中引入新页面 将会发生的事件的顺序是什么
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • 集合

    集合 目标 创建集合集合数据的特点集合的常见操作 一 创建集合 创建集合使用 或set xff0c 但是如果要创建空集合只能使用set xff0c 因为 用来创建空字典 s1 span class token operator 61 spa
  • 函数一

    文章目录 函数目标一 函数的作用二 函数的使用步骤2 1 定义函数2 2 调用函数2 3 快速体验 三 函数的参数作用四 函数的返回值作用4 1 应用 五 函数的说明文档5 1 语法5 2 快速体验 六 函数嵌套调用七 函数应用7 1 打印
  • 概率论的基本概念

    概率论的起源与发展 概率论产生于十六世纪十六世纪中叶 xff0c 卡当在赌博时研究不输的方法1654年 xff0c 德 美黑 合理分配赌注问题 1657年 xff0c 惠更斯 论机会游戏的计算 1933年 xff0c 柯尔莫哥洛夫 概率论的
  • java中的常量与变量

    常量 常量 xff1a 在程序运行期间 xff0c 固定不变的量 常量的分类 xff1a 1 字符串常量 xff1a 凡是用双引号引起来的部分 xff0c 叫做字符串常量 例如 xff1a abc Hello 123 2 整数常量 xff1
  • OA多级审批流程表设计方案以及开发思路(非常细节)

    OA office automation 想必大家都已不陌生 xff0c 甚至还非常熟悉 xff0c 是的没错 xff0c 本文就来讲解一下OA中的核心业务 xff0c 审批流程是如何一步步实现的 本文干货满满 建议静下心来细细品 被审核流
  • 异或交换两个数

    异或交换两个数 a和b是两个整数 xff0c 经过以下三次异或操作 xff0c 可以达到交换目的 xff1a a 61 a b b 61 a b a 61 a b 首先要理解 xff0c 什么是 异或 操作 二进制两数运算结果 xff1a
  • 二叉树算法框架思想

    二叉树算法设计的总路线 xff1a 明确一个节点要做的事情 xff0c 然后剩下的事抛给框架 span class token keyword void span span class token function traverse spa
  • Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网 xff0c 二者虽然名字有不同 xff0c 但是数据还是一样的 xff0c 区别就在于前者把后者的所有店铺和商品的海量数据按照销售量 好评度 信誉度综合测评 重新计算 重新排序展现给买家的一个
  • 利用 Python 一键下载网易云音乐 10W+ 乐库

    如果你常听音乐的话 xff0c 肯定绕不开网易云 xff0c 作为一款有情怀的音乐 App xff0c 我对网易云也是喜爱有加 虽然说现在都已经是 5G 时代了 xff0c 大家的手机流量都绰绰有余 xff0c 但在线播放还是不如本地存着音
  • Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?

    一 ChromeDriver的安装 若想使用Selenium成功调用Chrome浏览器完成相应的操作 xff0c 需要通过ChromeDriver来驱动 我们在下载之前先来确认下我们使用的Chrome浏览器版本 只需要红框内几位相同即可 根
  • Python 爬虫:获取 JS 动态内容——应用宝搜索应用!

    1 1 Ajax 异步加载生成网页内容 现在越来越多的网页使用 Ajax 异步加载方式 xff0c 即网页中的一些内容由前端的 JS 动态生成 由于呈现在网页上的内容是由 JS 生成而来 xff0c 我们能够在浏览器上看到 xff0c 但是
  • Es的核心概念

    索引 xff08 Index xff09 一个索引就是一个拥有几分相似特征的文档的集合 比如说 xff0c 你可以有一个客户数据的 索引 xff0c 另一个产品目录的索引 xff0c 还有一个订单数据的索引 一个索引由一个名字来标识 xff
  • spark的结构化API

    1 结构化API概述 Apache Spark是一个用于大规模数据处理的快速 xff0c 可靠 xff0c 容错的分布式计算框架 Spark有两套基本的API xff08 Application Programming Interface
  • Linux的开机启动流程详解

    Linux系统的启动过程要比Windows系统启动过程复杂 xff0c 其过程可以分为5个阶段 xff1a 内核的引导 运行 init 系统初始化 建立终端 用户登录系统 1 内核引导 xff1a 在Windows系统中 xff0c 当计算
  • Warning: Stopping docker.service, but it can still be activated by: docker.socket

    目录 问题描述Warning Stopping docker service but it can still be activated by docker socket 原因解释 解决方案一解决方案二总结 问题描述 使用docker时 x
  • 最受推荐的10本C/C ++书籍

    链接 xff1a https hackr io blog 10 best c cpp books C和C 43 43 是世界上最流行的编程语言之二 C 43 43 是C语言的扩展 xff0c 这两门语言的潜力都是不可估量的 xff0c 这就
  • Centos安装Gnome Desktop

    Centos安装Gnome Desktop 目录 Centos安装Gnome Desktop1 安装 X Window System2 查看桌面3 安装GNOME Desktop4 运行桌面环境5 开机启动桌面环境6 重启系统 xff0c
  • zookeeper选举机制详解

    目录 1 什么是ZAB协议2 ZAB协议定义的四种节点状态3 集群上线时的Leader选举过程4 崩溃恢复时的Leader选举5 主从服务器之间的数据同步6 CAP 定理7 CAP 权衡8 BASE 理论9 集群节点数量最好奇数10 Zoo
  • Python -- 网络编程

    目录 1 网络通信的概念 2 IP地址 3 网络通信方式 3 1 直接通信 3 2 使用集线通信 3 3 通用交换机通信 3 4 使用路由器连接多个网络 3 5 复杂的通信过程 4 端口 4 1 端口号 4 2 知名端口号 4 3 动态端口
  • 一篇文章,详细教你怎么在Linux上编译安装MariaDB(10.6.4)

    快捷目录 MariaDBMariaDB简介MariaDB VS MySQL 教程说明编译说明安装依赖下载MariaDB源码Cmake编译初始化和配置1 设置用户2 初始化脚本3 设置参数4 注册服务和环境变量5 设置root用户注意 测试连