自動化安裝mariadb
章節預覽:
1、 mariadb數據庫的簡單介紹
2、 手動編譯安裝mariadb過程
3、 自動化安裝實現腳本
一、mariadb數據庫
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,采用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。
MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB
二、手動編譯安裝mariadb過程
1、 下載二進制mariadb安裝包
從官網下載http://mariadb.org
下載:mariadb-10.2.8-linux-x86_64.tar.gz
2、 解壓下載到的壓縮包
由於安裝包自定義了二進制程序放置目錄,所以這個解壓的目錄一定要是根據該軟件包自定義的。默認解壓到/usr/local/目錄下,並且解壓後的目錄的名字必須是mysql
解壓操作:
tarxvf mariadb-10.2.8-linux-x86_64.tar.gz -C/usr/local/
正常解壓後的目錄名為mariadb-10.2.8-linux-x86_64,需要將該目錄下的數據放到名為mysql目錄下,這個是安裝包默認的。這裏有兩種方式:
修改目錄名:
mv /usr/local/mariadb-10.2.8-linux-x86_64 /usr/local/mysql
2)創建軟鏈接:
ln -s /usr/local/mariadb-10.2.8-linux-x86_64 /usr/local/mysql
3、 手動創建mysql系統用戶
需要創建一個系統用戶mysql,該mysql用戶是用來管理mysql的。
useradd -r -d /app/mariadb -m -s /sbin/nologin mysql
-r :創建系統用戶
-d:創建家目錄,該目錄是存放數據庫的目錄,所以盡可能大
-m;強制創建用戶,系統用戶默認是不創建用戶的。
-s :指定登錄shell類型
4、 創建mariadb配置文件
在/usr/local/mysql/support-files/目錄下有自帶的配置文件,選中其中合適的一個配置文件,將其復制到/etc/mysql/目錄下,並改名為my.cnf
(1):mkdir/etc/mysql
(2):cp/usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
需要對配置文件進行簡單的修改才可以生效:
Vim /etc/mysql/my.cnf
在[mysqld]後面添加:
#該數據庫目錄就是創建mysql用戶的家目錄,數據庫文件都要放到這裏。
datadir = /app/mariadb
innodb_file_per_table= on
skip_name_resolve =on
5、 創建系統數據庫
一個系統啟動,必須有自己的數據庫,否則是啟動不起來的,系統數據庫放置一些系統自身需要的數據。
安裝包自身帶有創建系統數據庫的腳本,不需要我們手動創建該腳本在/usr/local/mysql/scripts/mysql_install_db
改腳本必須在/usr/local/mysql/目錄下進行執行,因為該目錄下有腳本運行需要的文件。
cd /usr/local/mysql
./scripts/mysql_install_db–user=mysql –datadir=/app/mariadb
6、 創建mariadb服務啟動腳本
為了使系統能夠啟動該服務,需要創建服務運行進程,在安裝包裏自帶的有:/usr/local/mysql/support-files/mysql.server
需要將運行程序復制到/etc/init.d/目錄下,並改名為mysqld
cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld
7、 添加mysqld服務到運行等級列表中
需要將服務添加到系統啟動可以加載運行的運行級別中
chkconfig --add mysqld
chkconfig --list mysqld可以查看到在那些運行等級中可以開啟。
8、 創建mariadb日誌文件和郵件文件
必選要創建mariadb日誌文件並且修改該日誌文件的所屬人,否則mysql系統用戶不能寫入日誌數據,就會導致服務啟動失敗。同時也要創建郵件文件。
在Centos6和Centos7中有點區別:
Centos7:
mkdir /var/log/mariadb/
touch /var/log/mariadb/mariadb.log
touch /var/spool/mail/mysql
chown mysql:mail /var/spool/mail/mysql
chown mysql /var/log/mariadb/
chown mysql /var/log/mariadb/mariadb.log
修改擁有者是為了讓mysql用戶能夠寫入日誌文件
Centos6:
touch /var/log/mysqld.log
touch /var/spool/mail/mysql
chown mysql:mail /var/spool/mail/mysql
chown mysql /var/log/mysqld.log
9、 為mariadb添加環境變量PATH
在/etc/profile.d/目錄下添加一個mariadbpath.sh文件,文件中定義環境變量PATH。
echo ‘export PATH=/usr/local/mysql/bin:$PATH’ >/etc/profile.d/mariadbpath.sh
運行該腳本使腳本生效:
source /etc/profile.d/mariadbpath.sh
10、 啟動服務
由於我們已經創建了服務啟動腳本,所以這裏可以直接使用service命令啟動:
service mysqld start
查看是否啟動,可以通過查看是否開啟了3306端口來確定:
ss –tnul
11、 運行mariadb自帶安全腳本
該腳本類似於mariadb初始化腳本,位於:/usr/local/mysql/bin/mysql_secure_installation
具體過程如下圖所示:
12、 登錄測試
mysql –u(username) –p(password)
三、自動化安裝腳本實現
1、自動安裝展示
2、自動卸載展示
autoinstallmariadb.sh:
#!/bin/bash
#***********************************************
#Author: jiake
#QQ:
#Date: 2017-10-12 19:25:27
#Filename: autoinstallmariadb.sh
#Description:
#Copyright (C): All right reserved
#***********************************************
read -p "Please tell me where the mariadb installation package is: " package
read -p "Please tell me where the mariadb database directory is located: " dbdir
#掃描文件是否存在,不存在返回非0值
scanfile() {
ls $1 &> /dev/null && return 1 || return 2
}
#掃描文件是否存在,不存在返回非0值
scandir() {
ls -d "$1" &> /dev/null && return 3 || return 4
}
#判斷指定軟件包是否存在
echo"尋找指定安裝包位置。。。。"
scanfile $package
A=$?
[ $A -eq 2 ] && { echo "指定的mariadb安裝包路徑不正確!";exit 110; }
#解壓安裝包
scandir /usr/local
B=$?
[ $B -eq3 ] && { echo "解壓安裝包到指定/usr/local。。。。。" ; tar xvf $package -C /usr/local/ &> /dev/null; }
#創建mysql軟鏈接
echo "創建mysql軟鏈接。。。。"
mulu=`basename $package |sed -r ‘s/(.*)\.tar.gz/\1/‘`
ln -s /usr/local/$mulu /usr/local/mysql
#創建mysql用戶
echo "創建mysql系統賬戶。。。。。"
id mysql &> /dev/null && userdel -r mysql &> /dev/null
useradd -r -d $dbdir -m -s /sbin/nologin mysql
#準備配置文件
scandir /etc/mysql
C=$?
[ $C -eq4 ] && { echo "復制配置文件。。。。"; mkdir /etc/mysql &> /dev/null; }
cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
#修改配置文件(由於sed裏面無法寫入變量,所以固定的datadir目錄為/app/mariadb,如有不同請手動修改)
echo "修改配置文件。。。。"
sed -ri ‘[email protected]\[mysqld\]@&\ndatadir = /app/mariadb\ninnodb_file_per_table =on\nskip_name_resolve = on\[email protected]‘ /etc/mysql/my.cnf
#創建系統數據庫
echo "創建系統數據庫。。。。"
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=$dbdir &> /dev/null
#復制服務腳本
echo "復制服務腳本到init.d/目錄下。。。。"
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld &> /dev/null
#判斷系統版本
echo"創建數據庫日誌文件。。。。。"
version=`cat/etc/redhat-release |sed -r ‘s/.* ([0-9])\.([0-9]).*$/\1/‘`
#創建日誌文件
[ $version -eq 7 ] && { mkdir /var/log/mariadb/ &> /dev/null ;touch /var/log/mariadb/mariadb.log &> /dev/null; chown mysql/var/log/mariadb/; chown mysql /var/log/mariadb/mariadb.log;touch/var/spool/mail/mysql;chmod 660 /var/spool/mail/mysql ;chown mysql:mail/var/spool/mail/mysql; }
[ $version -eq 6 ] && { touch /var/log/mysqld.log &> /dev/null;chmod 644 /var/log/mysqld.log; chown mysql:mysql /var/log/mysqld.log; touch /var/spool/mail/mysql;chmod 660 /var/spool/mail/mysql;chown mysql:mail /var/spool/mail/mysql; }
#添加環境變量PATH
echo"添加環境變量到指定的/etc/profile.d/mariadbpath.sh文件中。。。。。。。"
echo ‘export PATH=/usr/local/mysql/bin:$PATH‘ > /etc/profile.d/mariadbpath.sh
source /etc/profile.d/mariadbpath.sh
#啟動服務
echo "啟動服務。。。。"
service mysqld start &> /dev/null || echo "服務啟動失敗!,請手動啟動。"
#運行安全腳本
echo "運行安全腳本mysql_secure_installation。。。。。"
echo -e "\nY\njiake\njiake\nY\nN\nY\nY\n" | mysql_secure_installation &> /dev/null
autodeletemariadb.sh:
#!/bin/bash
#***********************************************
#Author: jiake
#QQ:
#Date: 2017-10-14 09:27:29
#Filename: autodeletemariadb.sh
#Description: 自動刪除編譯安裝好的mariadb數據庫
#Copyright (C): All right reserved
#***********************************************
read -p "Please tell me where the dbdir is :" dbdir
#先殺死mysqld進程
echo "stoping mysqld service......."
service mysqld stop &> /dev/null
#刪除mysql賬戶
echo "delete mysql number ......."
userdel -r mysql &> /dev/null
#刪除chkconfig
echo "chkconfig del......"
chkconfig --del mysqld
#刪除數據庫目錄
echo "delete dbdir ......"
rm -fr $dbdir &> /dev/null
#刪除服務腳本
echo "delete mysqld.service"
rm -f /etc/init.d/mysqld &> /dev/null
#刪除程序目錄
echo "delete bindir......."
rm -fr /usr/local/mariadb-* &> /dev/null
rm -f /usr/local/mysql &> /dev/null
#刪除配置文件目錄
echo "delete configfile......"
rm -fr /etc/mysql &> /dev/null
#刪除日誌文件和mail文件
echo "delete log_file and mail_file......."
version=`cat /etc/redhat-release |sed -r ‘s/.*([0-9])\.([0-9]).*$/\1/‘`
[ $version -eq 7 ] && { rm -fr/var/log/mariadb &> /dev/null ;rm -f /var/spool/mail/mysql &>/dev/null; }
[ $version -eq 6 ] && { rm -f/var/log/mysqld.log &> /dev/null; rm -f /var/spool/mail/mysql &>/dev/null; }
#刪除環境變量配置文件
echo "delete path.file ......."
rm -f /etc/profile.d/mariadbpath.sh &>/dev/null
echo "removed mariadb !"
本文出自 “Linux運維” 博客,請務必保留此出處http://jk6627.blog.51cto.com/12002684/1972415
自動化安裝mariadb