章节预览:

    1、         mariadb数据库的简单介绍

    2、         手动编译安装mariadb过程

    3、         自动化安装实现脚本

一、mariadb数据库

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

MariaDB基于事务的Maria存储引擎,替换了MySQLMyISAM存储引擎,它使用了PerconaXtraDBInnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT)FederatedX存储引擎。

二、手动编译安装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_第1张图片

正常解压后的目录名为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

自动化安装mariadb_第2张图片

3、   手动创建mysql系统用户

需要创建一个系统用户mysqlmysql用户是用来管理mysql的。

    useradd -r -d /app/mariadb -m -s /sbin/nologin mysql    

    -r :创建系统用户 

    -d:创建家目录,该目录是存放数据库的目录,所以尽可能大

    -m;强制创建用户,系统用户默认是不创建用户的。 

    -s :指定登录shell类型

自动化安装mariadb_第3张图片

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

自动化安装mariadb_第4张图片

5、   创建系统数据库

一个系统启动,必须有自己的数据库,否则是启动不起来的,系统数据库放置一些系统自身需要的数据。

安装包自身带有创建系统数据库的脚本,不需要我们手动创建该脚本在/usr/local/mysql/scripts/mysql_install_db

改脚本必须在/usr/local/mysql/目录下进行执行,因为该目录下有脚本运行需要的文件。

cd /usr/local/mysql

./scripts/mysql_install_db–user=mysql –datadir=/app/mariadb

自动化安装mariadb_第5张图片

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

wKiom1niBwmjMugXAAAbGNAVwz4530.png

7、   添加mysqld服务到运行等级列表中

需要将服务添加到系统启动可以加载运行的运行级别中

chkconfig  --add mysqld

chkconfig  --list mysqld可以查看到在那些运行等级中可以开启。

自动化安装mariadb_第6张图片

8、   创建mariadb日志文件和邮件文件

必选要创建mariadb日志文件并且修改该日志文件的所属人,否则mysql系统用户不能写入日志数据,就会导致服务启动失败。同时也要创建邮件文件。

Centos6Centos7中有点区别:

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

自动化安装mariadb_第7张图片

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

自动化安装mariadb_第8张图片

10、  启动服务

由于我们已经创建了服务启动脚本,所以这里可以直接使用service命令启动:

service mysqld start

查看是否启动,可以通过查看是否开启了3306端口来确定:

ss –tnul

自动化安装mariadb_第9张图片

11、  运行mariadb自带安全脚本

该脚本类似于mariadb初始化脚本,位于:/usr/local/mysql/bin/mysql_secure_installation

具体过程如下图所示: 

自动化安装mariadb_第10张图片

自动化安装mariadb_第11张图片

12、  登录测试

mysql –u(username) –p(password)

自动化安装mariadb_第12张图片


三、自动化安装脚本实现

    1、自动安装展示

自动化安装mariadb_第13张图片

2、自动卸载展示

自动化安装mariadb_第14张图片

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 's@\[mysqld\]@&\ndatadir = /app/mariadb\ninnodb_file_per_table =on\nskip_name_resolve = on\n@' /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 !"