背景

  

mariadb介绍

  
  MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
  MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
  

3种方式部署

  

通过yum方式安装

  
centos(或者其他发行版)都在自己的官方源内包含了相应的版本可以直接通过自己的包管理器安装

    #centos 7
    yum install mariadb-server -y
    #centos 6
    yum install mysql-server -y

  通常情况下发行版内置库的maraidb的版本都比较老。为了照顾用户渴望使用新版本而又想方便管理,mariadb官方提供了一个新版本的更新源。用户可以根据提示去配置自己的更新源去使用新版的mariadb,官方链接如下
https://downloads.mariadb.org/mariadb/repositories/#mirror=tuna&distro=CentOS&distro_release=centos7-amd64--centos7&version=10.2

示例:这里以centos7为例。
在 /etc/yum.repos.d/下创建maraidb.repo

    vim  /etc/yum.repos.d/mariadb.repo

在文件内写入如下字段

# MariaDB 10.2 CentOS repository list - created 2018-06-05 07:06 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

保存后清除yum缓存,并重新构建缓存

yum clean all
yum makecache

等待缓存构建完成后就可以通过yum直接安装管理新版的mariadb了。

    #查看mariadb的版本信息
    yum info mariadb-server
    #安装新版mariadb,默认优先安装新版
    yum install mariadb-server -y

mariadb——多种方式部署及多实例部署

  
  

centos7 安装二进制mariadb-10.2.15

  

检查本机的配置环境

  
关闭selinux ,清除iptables规则

    setenforce 0
    iptables -F
    iptables -X

  

获取二进制包

  
在官方下载页https://downloads.mariadb.org/mariadb/10.2.15/#
下找到如下包(这里是64位包)下载到本地
mariadb——多种方式部署及多实例部署
  

创建用户组和对应目录

  
创建用户和组

useradd -r -d /data/mysqldb -s /sbin/nologin mysql

创建目录

mkdir -pv /data/mysqldb
chown mysql:mysql /data/mysqldb
chmod 770 /data/mysqldb

  

解压压缩包并配置环境变量

  
解压压缩包并指定目录

tar xvf  mariadb-10.2.15-linux-x86_64.tar.gz  -C /usr/local/

创建软连接方便日后升级,修改文件权限

cd /usr/local
ln -s mariadb-10.2.15-linux-x86_64/ mysql
chown -R root:root mysql/

配置环境变量

echo PATH=/usr/local/mysql/bin:$PATH > /etc/profile.d/mysql.sh
#重读环境信息,使变量生效
. /etc/profile.d/mysql.sh

  

准备配置文件启动脚本和初始化数据库

  
准备配置文件并且修改为合适的参数

cd /usr/local/mysql
cp support-files/my-huge.cnf  /etc/my.cnf
#修改配置文件
vim /etc/my.cnf
[mysqld]
datadir=/data/mysqldb 加此行

mariadb——多种方式部署及多实例部署
初始化数据库

cd /usr/local/mysql
scripts/mysql_install_db  --datadir=/data/mysqldb --user=mysql

准备启动脚本并启动服务

cd /usr/local/mysql
cp support-files/mysql.server  /etc/init.d/mysqld

chkconfig --add mysqld
service mysqld start

做安全初始化

mysql_secure_installation 

配置完成后登陆数据库验证

mysql -u用户 -p密码

mariadb——多种方式部署及多实例部署
  
  

centos7.4 源码编译安装 mariadb-10.2.15

  

配置开发环境,预先安装需要的包

  
安装开发环境工具包

    yum groupinstall "Development Tools" -y

安装需要的其他包

yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdevel  gcc  gcc-c++  cmake libevent-devel gnutls-devel libaio-devel openssl-devel  ncurses-devel libxml2-devel 

  

创建用户,目录并获取源码包

  
创建目录和用户

mkdir /data 
useradd -r –s /bin/false -m –d  /data/mysqldb/  mysql
#ps:
#   /bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务

获源码包,官方链接https://downloads.mariadb.org/mariadb/10.2.15/#
mariadb——多种方式部署及多实例部署
  

编译安装

  
#参考文档mysql,真心吐槽mariadb什么时候也来个正式的文档
https://dev.mysql.com/doc/
解压源码包

tar xvf  mariadb-10.2.12.tar.gz

进入目录并指定编译参数

cd mariadb-10.2.15
 #mariadb使用的cmake进行编辑安装

 cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1  \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci 

 #安装
 make &&make install

mariadb——多种方式部署及多实例部署
参数详解

cmake . \
#安装目录,各人按喜好设置
-DCMAKE_INSTALL_PREFIX=/app/mysql \

#数据库目录,各人按喜好设置
-DMYSQL_DATADIR=/data/mysqldb/ \

#数据库配置文件目录
-DSYSCONFDIR=/etc \

#指定运行用户
-DMYSQL_USER=mysql \

#WITH_xxx_STORAGE_ENGINE将xxx存储引擎静态编译到服务器中
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \

#是否包含调试支持
-DWITH_DEBUG=0 \ 

#是否使用readline捆绑在发行版中的库。MySQL 5.6.5中删除了这个选项,因为readline它不再被捆绑。
#这里可以不再指定
-DWITH_READLINE=1 \

#SSL的支持类型
#ssl_type 可以是以下值之一:
#yes:使用系统SSL库(如果存在),否则使用与发行版捆绑的库。
#bundled:使用捆绑在发行版中的SSL库。这是默认设置。
#system:使用系统SSL库。
-DWITH_SSL=system \

#某些功能要求服务器与压缩库支持来构建,如 COMPRESS()与 UNCOMPRESS()功能,并在客户端/服务器协议的压缩。该 WITH_ZLIB指示的源zlib支持:
#bundled:使用zlib与发行版捆绑在一起的库。这是默认设置。
#system:使用系统 zlib库。
-DWITH_ZLIB=system \

#是否包含libwrap(TCP封装)支持
-DWITH_LIBWRAP=0 \

#该选项控制LOCALMySQL客户端库的编译默认 功能。因此,没有明确安排的客户端会LOCAL根据ENABLED_LOCAL_INFILEMySQL构建时指定的设置禁用或启用功能 。
-DENABLED_LOCAL_INFILE=1  \

#服务器侦听套接字连接的Unix套接字文件路径。这必须是绝对路径名称。默认是/tmp/mysql.sock。
#该值可以在服务器启动时使用该--socket选项进行设置 。
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \

#服务器字符集。默认情况下,MySQL使用 latin1(cp1252西欧)字符集。
#charset_name可以是一种 binary,armscii8, ascii,big5, cp1250,cp1251, cp1256,cp1257, cp850,cp852, cp866,cp932, dec8,eucjpms, euckr,gb2312, gbk,geostd8, greek,hebrew, hp8,keybcs2, koi8r,koi8u, latin1,latin2, latin5,latin7, macce,macroman, sjis,swe7, tis620,ucs2, ujis,utf8, utf8mb4,utf16, utf16le,utf32。允许的字符集在cmake/character_sets.cmake文件中被列为 值CHARSETS_AVAILABLE。
#该值可以在服务器启动时使用该--character_set_server选项进行设置 。
-DDEFAULT_CHARSET=utf8 \

#服务器默认排序字符集。默认情况下,MySQL使用 latin1_swedish_ci。使用该 SHOW COLLATION语句来确定每个字符集可用的排序规则。
#该值可以在服务器启动时使用该--collation_server选项进行设置 。
-DDEFAULT_COLLATION=utf8_general_ci

  

环境变量配置与启动数据库

  
准备环境变量

 echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh 
    . /etc/profile.d/mysql.sh 

生成数据库信息

cd /app/mysql/ 
scripts/mysql_install_db --datadir=/data/mysqldb/ --user=mysql

生成并修改配置文件

cp  /app/mysql/support-files/my-huge.cnf  /etc/my.cnf 

vim /etc/my.cnf
#指定数据目录
[mysqld]
datadir=/data/mysqldb

mariadb——多种方式部署及多实例部署
修改启动脚本

cp /app/mysql/support-files/mysql.server  /etc/init.d/mysqld 

#修改
vim /etc/init.d/mysqld 

basedir=/app/mysql
datadir=/data/mysqldb

启动服务
修改/app/mysql权限

chown mysql:root /app/mysql

添加服务并启动

chkconfig --add mysqld 
service mysqld start

  
  

mariadb实现多实例

  

安装mariadb

  
为了省事就直接yum安装了,其实不论如何安装基本步骤都相似

    yum install mariadb-server -y

  

创建目录,清除环境影响

  
关闭selinux 清空防火墙数据

    getenforce 0
    iptables -F
    iptables -X

建立目录并修改权限

mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data} -pv
chown -R mysql.mysql /mysqldb/

  

创建数据库信息

  
创建各自的数据库信息

mysql_install_db --datadir=/mysqldb/3306/data --user=mysql
mysql_install_db --datadir=/mysqldb/3307/data --user=mysql
mysql_install_db --datadir=/mysqldb/3308/data --user=mysq

  

修改配置文件和启动脚本

  
由于是yum安装的数据库,所以配置文件已经生成,这里仅需要略作修改即可

修改3306的配置文件

cp /etc/my.cnf /mysqldb/3306/etc/
#修改以下信息
vim /mysqldb/3306/etc/my.cnf 
[mysqld]
port=3306
datadir=/mysqldb/3306/data
socket=/mysqldb/3306/socket/mysql.sock

[mysqld_safe]
log-error=/mysqldb/3306/log/mariadb.log
pid-file=/mysqldb/3306/pid/mariadb.pid
#!includedir /etc/my.cnf.d

mariadb——多种方式部署及多实例部署
将3306实例的配置文件分别复制给3307和3308并修改

cp /mysqldb/3306/etc/my.cnf  /mysqldb/3307/etc/my.cnf
cp /mysqldb/3306/etc/my.cnf  /mysqldb/3308/etc/my.cnf

vim /mysqldb/3308/etc/my.cnf
vim /mysqldb/3307/etc/my.cnf

mariadb——多种方式部署及多实例部署

编写启动脚本并拷贝到对应路径
示例脚本

#!/bin/bash

port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysqldb"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}

function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}

function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac

拷贝到对应目录

cp mysqld /mysqldb/3306/
cp mysqld /mysqldb/3307/
cp mysqld /mysqldb/3308/

修改权限

chmod 700 /mysqldb/3308/mysqld
chmod 700 /mysqldb/3307/mysqld
chmod 700 /mysqldb/3306/mysqld

修改对应的信息

vim  /mysqldb/3306/mysqld
vim  /mysqldb/3307/mysqld
vim  /mysqldb/3308/mysqld

mariadb——多种方式部署及多实例部署
mariadb——多种方式部署及多实例部署

  

启动服务并连接数据库

  
启动服务

/mysqldb/3308/mysqld start 

 /mysqldb/3307/mysqld start 

 /mysqldb/3306/mysqld start 

mariadb——多种方式部署及多实例部署

连接数据库

mysql  -S /mysqldb/3308/socket/mysql.sock 
mysql  -S /mysqldb/3307/socket/mysql.sock 
mysql  -S /mysqldb/3306/socket/mysql.sock

验证是否以不同端口登陆

#在mariadb内输入
show variables like '%port%';

mariadb——多种方式部署及多实例部署