1. 程式人生 > >mariadb——多種方式部署及多實例部署

mariadb——多種方式部署及多實例部署

mariadb 應用服務

背景

??

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

技術分享圖片

??
??

centos7 安裝二進制mariadb-10.2.15

??

檢查本機的配置環境

??
關閉selinux ,清除iptables規則

    setenforce 0
    iptables -F
    iptables -X

??

獲取二進制包

??
在官方下載頁https://downloads.mariadb.org/mariadb/10.2.15/#
下找到如下包(這裏是64位包)下載到本地
技術分享圖片
??

創建用戶組和對應目錄

??
創建用戶和組

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 加此行

技術分享圖片
初始化數據庫

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密碼

技術分享圖片
??
??

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/#
技術分享圖片
??

編譯安裝

??
#參考文檔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

技術分享圖片
參數詳解

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

技術分享圖片
修改啟動腳本

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

技術分享圖片
將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

技術分享圖片

編寫啟動腳本並拷貝到對應路徑
示例腳本

#!/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

技術分享圖片
技術分享圖片

??

啟動服務並連接數據庫

??
啟動服務

/mysqldb/3308/mysqld start 

 /mysqldb/3307/mysqld start 

 /mysqldb/3306/mysqld start 

技術分享圖片

連接數據庫

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——多種方式部署及多實例部署