章节预览:
1、 mariadb数据库的简单介绍
2、 手动编译安装mariadb过程
3、 自动化安装实现脚本
一、mariadb数据库
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的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-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 '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 !"