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的名字。
??
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——多種方式部署及多實例部署