详解:Debian系统上如何编译安装MariaDB

2022-03-02 00:00:00 用户 代码 编译 安装 复制

MariaDB

不知道用MariaDB的人多不多,其实MariaDB就相当于开源版本的MySQL。

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

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存储引擎。

具体使用区别,这次就不讨论了,主要说说怎么在Debian上编译安装MariaDB。

环境准备

根据MariaDB的官方文档:mariadb.com/kb/en/compi… 我们需要依赖:

  • cmake编译器
  • GCC编译器
  • OpenSSL
  • bison依赖包
  • libcures依赖包

cmake编译器

MariaDB需要的cmake版本不高,用软件源自带的就可以了:

apt install cmake -y
复制代码

安装成功: 需要注意,你也可以使用高版本的cmake,但是就需要自己编译,cmake地址:cmake.org/download/

gcc编译器

Debian的gcc编译器,可以通过安装:

apt install -y build-essential
复制代码

OpenSSL

OpenSSL不多说了,很多加密都是直接调用OpenSSL的库函数:

apt install -y openssl libssl-dev
复制代码

bison和libcures

嘿嘿,这两个库我也不知道是干嘛的,但是就是要作为依赖~~

Debian安装方法:

apt install -y bison libncurses-dev
复制代码

下载源码

接下来,我们进入官网下载源码:mariadb.org/download

以前编译的时候,还没有阿里镜像源的,今天去看……居然有了!

# 下载源码
wget https://mirrors.aliyun.com/mariadb//mariadb-10.6.5/source/mariadb-10.6.5.tar.gz
# 解压
tar -xf mariadb-10.6.5.tar.gz
# 进入目录
cd mariadb-10.6.5
复制代码

配置和编译

MariaDB使用cmake进行配置和编译,我的配置:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-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/mariadb.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
复制代码

这里解释一下编译参数:

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

注意,这里我使用的是utf8mb4编码,主要是为了兼容Emoji等特殊字符。

以上参数需要和下文my.cnf同步(如果你需要修改我的)

之后,我们进行编译:

make
复制代码

另外,如果你的Linux设备是多核,可以加上-j参数以加快编译速度。

编译没问题,我们安装:

make install
复制代码

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

初始化MariaDB

现在我们初始化MariaDB,首先创建一个用户:

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/mariadb
chgrp mysql ./*
复制代码

使用初始化脚本初始化:

scripts/mariadb-install-db --user=mysql --datadir=/mydata/data
复制代码

配置my.cnf

初始化完成后,需要设置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/mariadb.sock

# The MySQL serve
[mysqld]
port            = 3306
socket          = /tmp/mariadb.sock
# MariaDB安装地址
basedir         = /usr/local/mariadb
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

[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
复制代码

注册服务和环境变量

之后,我们需要注册为系统服务,方便启动MariaDB,这里使用systemctl作为服务,非service

注册为服务:

vim /usr/lib/systemd/system/mariadb.service
复制代码

添加内容:

[Unit]
Description=MariaDB

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

[Install]
WantedBy=multi-user.target
复制代码

设置好后,使用systemctl进行配置重载和启动即可:

systemctl daemon-reload
systemctl start mariadb
复制代码

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

PATH=/usr/local/mariadb/bin:$PATH
复制代码

设置root用户

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

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

运行脚本后,会设置root用户的密码,如果需要运行root用户远程登录,有点麻烦,直接的方法:进入MariaDB的交互模式,输入

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

END

到此,MariaDB的编译安装就完成了哦。

是不是还是软件包管理器安装快点?有机会和大家分享分享软件包管理器或者Docker搭建。

相关文章