以下教程为Mariadb为例


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.11了,早就没有最开始提供的my.cnf文件,各大教程还在cp /usr/local/mysql /etc/my.cnf

  • Copy严重:为什么所有教程,步骤基本一样,错的也一样呢?真是个奇怪的事情嗷。

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

  • 本次使用OracleCloud aarch64服务器进行演示,因为官网没有aarch64的编译包,所以纯属记录一下

编译说明

编译安装,灵活性很高,但难度也很大;如果小白用户尝试,建议多阅读几遍嗷。

首先,SSH连接我们的服务器

加入我们的服务器安装目录为 /app/mysql   为了防止后续用到多实例服务器,再次创建三级目录作为单实例目录

mkdir -p /app/mysql/3306/

为此我们后续要初始化数据库,  存放日志文件等

需要准备好data、log目录

cd /app/mysql/3306/
mkdir data log

在上述目录中下载Mairadb源码包

需要选择服务器周边的地址,否则无法下载

[root@localhost 3306]wget https://mirrors.xtom.com.hk/mariadb//mariadb-10.10.1/source/mariadb-10.10.1.tar.gz
[root@localhost 3306]ls
data  log  mariadb-10.10.1.tar.gz
[root@localhost 3306]tar -zxvf mariadb-10.10.1.tar.gz
[root@localhost 3306]cd mariadb-10.10.1


接下来安装编译环境,准备编译源码

dnf -y install gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel ncurses-devel cmake

编译命令

cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql/3306/mariadb \
-DMYSQL_DATADIR=/app/mysql/3306/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=/app/mysql/3306/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

这里解释一下编译参数:

  • · DCMAKE_INSTALL_PREFIX:MariaDB的安装地址

  • · DMYSQL_DATADIR:数据库文件存放地址

  • · DMYSQL_UNIX_ADDR:sock文件编译后存放地址

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

  • 之后,我们进行安装即可:根据自己的CPU来加 -j后面的参数,单核不用加

  • make -j4

    过程可能很久很久,如果网络不稳定,建议使用screen 挂起操作

编译完成,并且没有问题,我们继续直接安装到目录即可:

make install

安装好后,到/app/mysql/3306/mariadb文件夹下,即可看到我们的MariaDB:

初始化和配置

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

1. 设置用户

创建mysql用户并且禁止登录服务器:

useradd mysql -s/sbin/nologin

将我们的mysql目录权限转移给mysql用户

chown -R mysql:mysql /app/mysql

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

2. 初始化脚本

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

scripts/mysql_install_db --user=mysql --datadir=/app/mysql/3306/data

3. 设置参数

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

vim /app/mysql/3306/my.cnf
#填入如下内容,具体参数可根据自己需要进行修改

[mariadb]


[server]

[mysqld]
port=3306
datadir=/app/mysql/3306/data
socket=/app/mysql/3306/mysql.sock
log-error=/app/mysql/3306/log/mariadb.log
pid-file=/app/mysql/3306/mariadb.pid
character-set-server    = utf8mb4
innodb_large_prefix     = on
lower_case_table_names  = 1

最关键的一步,需要启动服务啊,这里有脚本

cd /app/mysql/3306
cp mariadb/support-files/mysql.server ./
vim mysql.server
#补充45行以及46行
basedir=/app/mysql/3306/mariadb
datadir=/app/mysql/3306/data
#并在后面紧跟两个参数
ownsocket=/app/mysql/3306/mysql.sock
ownconfig=/app/mysql/3306/my.cnf
#加入以后跳转到263行左右,添加上述两个参数
#    if $bindir/mysqladmin ping >/dev/null 2>&1; then 替换为下行
    if $bindir/mysqladmin --defaults-file="$ownconfig" --socket="$ownsocket" ping >/dev/null 2>&1; then
#跳转到312行左右,再次添加上述两个参数
#    $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mariadbd_pid_file_path" "$@" &
  $bindir/mysqld_safe --defaults-file="$ownconfig" --socket="$ownsocket" --datadir="$datadir" --pid-file="$mariadbd_pid_file_path" "$@" &

启动、停止脚本就准备好了

Cent OS 6

cp mysql.server /etc/init.d/mariadb
chkconfig mariadb on
service mariadb start

Cent OS 7+

vim /etc/systemd/system/mariadb.service
#内容
[Unit]
Description=MariaDB 3306 Test Server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
User=mysql
Group=mysql
PIDFile=/app/mysql/3306/mariadb.pid
ExecStart=/app/mysql/3306/mariadb/bin/mariadbd-safe --defaults-file=/app/mysql/3306/my.cnf --datadir=/app/mysql/3306/data
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

保存以后尝试启动即可

systemctl daemon-reload
systemctl enable --now mariadb

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

vim /etc/profile
#添加如下
export MARIADB_HOME=/app/mysql/3306/mariadb
export PATH=$MARIADB_HOME/bin:$PATH

#然后重启使环境变量生效
source /etc/profile

至此都安装完毕,可以使用命令行验证连接了