在Linux中源码安装MariaDB

2023-05-16

在公网IP为x.x.x.x,安装CentOS8(Alibaba Cloud Linux  3.2104 LTS 64位)系统的服务器上进行源码安装mariadb-10.5.16。

MariaDB源码下载

第一步,进入到MariaDB官网下载对应版本的MariaDB源码。

下载地址:Download MariaDB Server - MariaDB.org

第二步,下载源码安装包mariadb-10.5.16.tar.gz。

MariaDB源码配置

linux文件管理工具:WinSCP 5.14.4

linux系统版本:CentOS8 64位

安装源文件版本:mariadb-10.5.16.tar.gz

第一步,安装前,检测系统是否自带安装MySQL。

命令:rpm -qa | grep mysql

若结果显示类似“mysql-libs-5.1.52-1.el6_0.1.x86_64”,则可以选择进行卸载。

# 普通删除模式

rpm -e mysql-libs-5.1.52-1.el6_0.1.x86_64

# 如果使用普通删除模式命令删除时,提示有依赖的其它文件,则用强力删除模式命令对其进行强力删除

rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64

第二步,检查否存在mariadb数据库。

命令:rpm -qa | grep mariadb

若结果显示类似“mariadb-libs-5.5.56-2.el7.x86_64”,则可以选择进行卸载。

命令:rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

第三步,用WinSCP工具将mariadb-10.5.16.tar.gz上传到公网IP地址为x.x.x.x的服务器中的/usr/local/src目录下面。

步,安装依赖(如缺少其他依赖,需自行安装)。

命令:yum install -y autoconf cmake gcc gcc-c++ bison bison-devel libaio-devel libcurl-devel libarchive-devel boost-devel libevent-devel ncurses-devel openssl-devel zlib zlib-devel

第五步,添加系统mysql组和mysql用户。

检查mysql组和用户是否存在。

命令:cat /etc/group | grep mysql

若结果显示“mysql:x:1002:”,则说明mysql组存在,无需再添加。

cat /etc/passwd | grep mysql

若结果显示“mysql:x:994:1002::/home/mysql:/bin/bash”,则说明mysql用户存在,无需再添加。

若结果显示mysql组和用户不存在,则执行添加命令。

命令:useradd mysql

(groupadd mysql

useradd -r -g mysql mysql)

#useradd -r参数表示mysql用户是系统用户,不可用于登录系统

MariaDB源码安装

第一步,创建data文件夹。

命令:mkdir -p /data/mysql/data

第二步,进入安装包所在目录,解压文件,并重命名文件

解压文件命令:cd /usr/local/src

tar -zxvf mariadb-10.5.16.tar.gz

第三步,编译安装mysql。

命令:cd /usr/local/src/mariadb-10.5.16

cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-10.5.16 \

-DMYSQL_UNIX_ADDR=/usr/local/mariadb-10.5.16/tmp/mysql.sock \

-DMYSQL_DATADIR=/data/mysql/data \

-DMYSQL_USER=mysql \

-DMYSQL_TCP_PORT=3306 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1

若结果显示“Build files have been written to: /usr/local/src/mariadb-10.5.16”,则mysql配置成功。

# make需要花费较长时间(一般不推荐编译安装mariadb)

命令:make && make install

第四步,配置环境变量。

在/etc/profile文件中加入下面的代码:

export PATH=/usr/local/mariadb-10.5.16/bin/:$PATH

文件生效命令:source /etc/profile

第五步,在/usr/local/mariadb-10.5.16/support-files目录下新建my.cnf文件。

my.cnf文件中写入下面的代码:

[mysqld]

basedir = /usr/local/mariadb-10.5.16

datadir = /data/mysql/data

user = mysql

port = 3306

sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

lower_case_table_names = 1

第六步,将目录/usr/local/mariadb-10.5.16和/data/mysql/data的所有者及所属组改为mysql,并赋予权限。

命令:chown -R mysql:mysql /usr/local/mariadb-10.5.16

chown -R mysql:mysql /data/mysql/data

chmod -R 755 /usr/local/mariadb-10.5.16

chmod -R 755 /data/mysql/data

第七步,初始化数据库。

命令:yum -y install perl perl-devel

yum -y install libaio

cd /usr/local/mariadb-10.5.16

./scripts/mariadb-install-db --user=mysql --basedir=/usr/local/mariadb-10.5.16 --datadir=/data/mysql/data

若初始化时结果显示“FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:

Data::Dumper”,则需要安装perl即可。

命令:yum install -y perl-Module-Install.noarch

若初始化时结果显示“mysql初始化出现:Installing MySQL system tables.../usr/local/mariadb-10.5.16/bin/mysqld: error while loading shared”,则需要安装libaio即可。

命令:yum -y install libaio*

文件安装成功后,继续运行数据库初始化命令就可以成功了。

第八步,数据库初始化后,登录mysql不需要密码。

第九步,进入/usr/local/mariadb-10.5.16/support-files,启动mysql服务。

命令:cd /usr/local/mariadb-10.5.16/support-files

./mysql.server start

若结果显示“The server quit without updating PID file”,则很大可能是目录/usr/local/mariadb-10.5.16和/data/mysql/data的权限问题。数据库存放目录的权限一定要赋予/data/mysql/data。然后再次初始化数据库和启动mysql服务,若结果显示“SUCCESS!”,则成功。

第十步,把启动脚本放到开机初始化目录。

命令:cd /usr/local/mariadb-10.5.16/support-files

cp mysql.server /etc/init.d/mysql

赋予可执行权限命令:chmod +x /etc/init.d/mysql

添加服务命令:chkconfig --add mysql

第十一步,登录mysql,不需要密码。

命令:cd /usr/local/mariadb-10.5.16/bin

./mysql -u root -p

若结果显示“MariaDB [(none)]> ”,则说明数据库登录成功了;结果显示“ Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”,则说明数据库登录不成功,mysql服务没有启动,那就再次初始化数据库和启动mysql服务。最后再次登录mysql。

第十二步,数据库安装设置,重置数据库root账号密码,执行该命令前必须开启mysql服务。

命令:mysql_secure_installation

或       /usr/local/mariadb-10.5.16/bin/mysql_secure_installation

若结果显示“Enter current password for root (enter for none):”,

则输入当前root账号密码,刚安装默认为空,直接回车即可。

“Set root password? [Y/n]”,输入y回车。

“New password:”,输入密码。

“Re-enter new password:”,重复输入密码。

“Remove anonymous users? [Y/n]”,输入y回车。

“Disallow root login remotely? [Y/n]”,输入y回车。

“Remove test database and access to it? [Y/n]”,输入y回车。

“Reload privilege tables now? [Y/n]”,输入y回车。

第十三步,登陆测试,执行登录命令并输入密码。

命令:mysql -uroot -p

输入登录密码“123456”,进入MariaDB shell状态。

第十四步,重启mysql生效。

命令:service mysql stop

service mysql start

service mysql restart

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

在Linux中源码安装MariaDB 的相关文章

  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了

随机推荐