使用docker一键部署MariaDB数据库只需要3分钟

摘要:MariaDB是MySQL关系数据库管理系统的一个分支. MySQL的原始开发人员在Oracle收购MySQL后提出的关注之后创建了MariaDB. …

未分类

MariaDB是MySQL关系数据库管理系统的一个分支。 MySQL的原始开发人员在Oracle收购MySQL后提出的关注之后创建了MariaDB。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

大多数方面,MariaDB与MySQL几乎一样。所有的命令、接口、库和APIs,存在于MySQL,也存在于MariaDB。切换到MariaDB不需要转换数据库。MariaDB是真正替代MySQL的!

目录结构如下

请看我用dockerfile构建

FROM docker.io/centos:latest
MAINTAINER zailing <[email protected]>

RUN yum clean all
RUN yum install -y yum-plugin-fastestmirror yum-utils epel-release
RUN yum update -y

# utils
RUN yum install -y git hostname sudo less iproute psmisc net-tools 
bash unzip which tar passwd ed m4 patch rsync wget curl tcpdump telnet 
tar bzip2 unzip strace supervisor openssl openssh openssh-server 
openssh-clients util-linux inotify-tools

# dev
RUN yum install -y gcc-c++ libtool make gdb mariadb-devel snappy-devel 
boost-devel lz4-devel zlib-devel libcurl-devel libevent-devel 
libesmtp-devel libuuid-devel libcsv-devel cyrus-sasl-devel 
bzip2-devel libpqxx-devel libxml2-devel libxslt-devel libxslt-python 
libpng-devel jemalloc-devel fontconfig-devel pcre-devel

# deps
RUN yum install -y redis sqlite mariadb mariadb-server postgresql

# python
RUN yum install -y python-pip python-devel python-lxml python-setuptools

RUN mkdir /var/run/sshd
RUN ssh-keygen -t rsa -q -f /etc/ssh/ssh_host_rsa_key -P ""
RUN ssh-keygen -t dsa -q -f /etc/ssh/ssh_host_dsa_key -P ""
RUN ssh-keygen -t rsa -q -f /root/.ssh/id_rsa -P ""
RUN cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys

RUN echo 'root:123456' | chpasswd
RUN sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd
RUN echo -e "LANG="en_US.UTF-8"" > /etc/default/local
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
RUN cp /usr/lib64/mysql/libmysqlclient* /usr/lib64/
RUN rm -rf etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo "bind '"e[A":history-search-backward'" >> /root/.bashrc
RUN echo "bind '"e[B":history-search-forward'" >> /root/.bashrc
RUN echo "export HISTTIMEFORMAT='%F %T '" >> /root/.bashrc

EXPOSE 22
RUN chmod u+s /usr/bin/ping

EXPOSE 3306

WORKDIR /usr/local/mysql
VOLUME ["/var/lib/mysql"]
VOLUME ["/etc/my.cnf.d"]

RUN mkdir -p /init
VOLUME ["/init"]

RUN yum clean all

ADD container-files /

RUN chmod +x /config/bootstrap.sh
RUN chmod +x -f /config/init/*.sh; exit 0

ENTRYPOINT ["/config/bootstrap.sh"]

docker-compose的书写格式如下 docker-compose.yml

version: '2'
services:
    mariadb:
        build: .
        image: zailing/mariadb
        container_name: mariadb
        hostname: mariadb
        privileged: true
        read_only: false
        tty: false
        network_mode: "bridge"

        ulimits:
            nofile:
                soft: 102400
                hard: 102400

        ports:
            - "127.0.0.1:2238:22"
            - "3306:3306"

        volumes:
            - /opt/docker/mariadb/data:/var/lib/mysql
            - /opt/docker/mariadb/init:/init
            - /opt/docker/mariadb/conf:/etc/my.cnf.d

        environment:
            - MYSQL_ROOT_PASSWORD=123456

MySQL物理文件组成详解

1、逻辑结构

第一层:服务层(为客户端服务,做请求连接处理,授权认证,安全)
第二层:核心层(查询解析,分析,优化,缓存,提供内建函数,存储过程,视图) 第三层:存储引擎层(做存取数据)

2、日志文件

  • 错误日志:Error Log

记录了MyQLServer运行过程中所有较为严重的警告和错误信息,以及MySQLServer 每次启动和关闭的详细信息。在默认情况下,系统记录错误日志

  • 二进制日志Binary Log & Binary Log Index

name]”打开了记录的功能之后,MySQL会将所有修改数据
库数据的query以二进制形式记录到日志文件中。当然,日志中并不仅限于query

语句这么简单,还包括每一条query所执行的时间,所消耗的资源,以及相关的事务信息

所以binlog是事务安全的

  • 更新日志:update log

其功能和 binlog 基本类似,从版本5.0 开始,MySQL 已经不再支持更新日志

  • 查询日志:query log

记录了所有的 query,包括所有的 select,体积比较大,开启后对性能也有较大的影响, 所以请大家慎用该功能。 一般只用于跟踪某些特殊的sql 性能问题才会短暂打开该功能。

  • 慢查询日志:slow query log

记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。分析满查询日志的工具程序mysqlslowdump, 用来帮助数据库管理人员解决可 能存在的性能问题

  • Innodb 的在线redo 日志:innodb redo log

Innodb是一个事务安全的存储引擎,其事务安全性主要就是通过在线redo
日志和记录在表空间中的undo信息来保证的。redo日志中记录了Innodb 所做的所有物理变更和事务信息,通过redo日志和undo信息,Innodb 保证了在任何情况下的事务安全性。

3、数据文件

简述:在MySQL中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以
数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。

  • “.frm”文件

与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定
义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文
件。

  • “.MYD”文件

“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM
表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,
和“.frm”文件在一起。

  • “.MYI”文件

“.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相
关信息。

  • “.ibd”文件和ibdata 文件

这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb
的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用
共享表空间存放存储数据,还是独享表空间存放存储数据。

CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module

在进行部署之前需要确保当前的CentOS系统可以连接到任意一个repo软件仓库——如果网络通畅,直接使用默认repo仓库(最好使用本地yum仓库,速度快),如果无法连接网络使用本地repo仓库通过修改/etc/yum.repo.d/中的配置文件进行配置。

在配置好后使用以下命令安装Apache+PHP+MariaDB:

~]# yum install httpd php php-mysql mariadb* -y

在安装完成之后可以将其设为开机启动:

~]# systemctl start mariadb
~]# systemctl start httpd

使用下面这条命令可以检查一个服务是否设为开机启动:

~]# systemctl is-enabled SERVICE.service

到这里,基本的安装文件已经安装完成,但是从windows中使用浏览器访问此主机IP时还是不能访问,因为被防火墙阻止了,我们可以先将防火墙关闭和selinux,使用以下命令:

~]# iptables -F
~]# setenforce 0

就可以看到以下画面(172.16.7.100是这台主机的IP):

未分类

接下来开始配置两个虚拟主机,目的是当使用不同的网址访问此主机的时候能够返回不同的页面。首先添加一个配置文件到/etc/httpd/conf.d/中,文件中写入以下内容:

~]# vim /etc/httpd/conf.d/vhost-myweb
<VirtualHost *:80>
        ServerName myweb.wordpress.com
        DocumentRoot /myweb/wordpress
        ErrorLog logs/wordpress-error_log
        CustomLog logs/wordpress-access_log combiend
        <Directory "/myweb/wordpress">
                Options None
                AllowOverride   None
                Require all granted
        </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName myweb.phpmyadmin.com
        DocumentRoot /myweb/phpmyadmin
        ErrorLog logs/phpmyadmin-error_log
        CustomLog logs/phpmyadmin-access_log combiend
        <Directory "/myweb/phpmyadmin">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>

然后创建两个虚拟主机对应的家目录,并重新加载服务:

~]# mkdir -pv /myweb/{wordpress,phpmyadmin}
~]# systemctl reload httpd
~]# echo "<h1>wordpress</h1>"> /myweb/wordpress/index.html
~]# echo "<h1>phpmyadmin</h1>"> /myweb/phpmyadmin/index.html

通过上面两条输出重定向命令创建测试文件分别到各自对应的目录,创建完成之后回到windows中修改hosts配置文件(此文件在C:WindowsSystem32driversetc目录中的hosts文件,这个文件保存了本地的DNS记录),在其中加入这两条(如果提示不能修改,那么鼠标右键此文件,属性→安全→编辑,在下方权限那里将修改权限的勾打上):

172.16.7.100 myweb.wordpress.com
172.16.7.100 myweb.phpmyadmin.com

配置保存之后在浏览器通过访问两个网址即可看到不同的网址:

未分类

未分类

接下来删除这两个测试文件(~]# rm -frv /myweb/*),开始配置wordpress和phpmyadmin,wordpress的配置请参考上一篇博客:http://11142243.blog.51cto.com/11132243/1964468 ,在这里只进行phpmyadmin的配置。

配置好的wordpress:

未分类

下面开始配置phpmyadmin,下载地址:https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

(在这里一定要注意版本,我因为没有注意版本,下载了一个高版本的,但是它所依赖的其他软件版本没跟上,调试了快一整天才发现这个问题 = =!)

调试的时候将下边的语句写到要调适的php文件开头,将错误输出打开:

    <?php
    ini_set('display_errors','on');
    error_reporting(E_ALL);
    ?>

当软件下载完成之后(可以通过

wget -c https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

命令下载或者从windows中下载之后导入到linux系统中(使用xshell自带功能或者FileZilla软件))

未分类

 ~]# cd /myweb/phpmyadmin/
 phpmyadmin]# tar -zxvf ~/phpMyAdmin-3.5.4-all-languages.tar.gz -C ./

然后将phpMyAdmin-4.7.4-all-languages/目录中的文件复制到当前目录中:

phpmyadmin]# mv phpMyAdmin-3.5.4-all-languages/* ./

这样,phpMyAdmin远程管理软件即配置完成,我们可以通过远程来管理数据库中的内容:

未分类

但是因为我们只给wordpress账户赋予了远程登陆的权限,所以在这里只能登陆账号“wordpress”(如果想要登陆root账户,只需要按照在数据库中给wordpress账户分配权限的方法给root用户分配远程登陆的权限即可)

未分类

未分类

此时网站已经部署好了,我们接下来需要对其进行测试,可以在另外一台能够连接到这台主机的主机中使用以下命令(同样需要修改hosts文件——/etc/hosts):

echo '172.16.7.100    myweb.phpmyadmin.com myweb.wordpress.com' >> /etc/hosts
~]# ab -c 100 -n 1000 myweb.phpmyadmin.com/index.php

此时,我正好有一台IP为172.16.6.11的主机,ab压力测试结果如下:

未分类

未分类

为了进一步提升访问速度,我们可以安装php的xcache模块:

]# yum install php-xcache

未分类

安装之后使用以下命令就可以看到如下图所示的效果(没有安装的使用这个命令效果如上图)

~]# php -v

未分类

安装成功之后再进行测试,发现速度提升了将近一倍

未分类

未分类

Debian快速安装MariaDB Server教程

简介

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

MariaDB、MySQL这样的数据库编译非常耗时而且编译很容易出错,所以使用编译好的版本无疑是最好的,设置页非常的方便。

安装

MariaDB的软件源由官方提供,程序的质量和安全绝对是毋庸置疑的。

本教程适用于:Debian 8(Jessie)支持安装10.0~最新,Debian 9(stretch)支持安装10.1~最新。

教程以10.2版本为例,其他版本只需将下面的10.2修改为10.1 10.0即可。

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8add-apt-repository 'deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/debian stretch main'
apt update
apt install mariadb-server

安装过程中,这里会提示设置数据库Root密码,需要连续输入两次。

设置

输入下面的命令,关闭一些不安全的设置:

mysql_secure_installation 

首先输入密码,然后一路y即可。

Enter current password for root (enter for none):
解释:输入当前 root 用户密码,默认为空,直接回车。
Set root password? [Y/n]  y
解释:要设置 root 密码吗?输入 y 表示愿意。
Remove anonymous users? [Y/n]  y
解释:要移除掉匿名用户吗?输入 y 表示愿意。
Disallow root login remotely? [Y/n]  y
解释:不想让 root 远程登陆吗?输入 y 表示愿意。
Remove test database and access to it? [Y/n]  y
解释:要去掉 test 数据库吗?输入 y 表示愿意。
Reload privilege tables now? [Y/n]  y
解释:想要重新加载权限吗?输入 y 表示愿意。

管理

systemctl restart mysql #重启
systemctl start mysql #启动
systemctl stop mysql #关闭
systemctl status mysql #检查状态

更新

运行下面的命令系统就会更新所有可以更新的软件包括MariaDB

apt update
apt upgrade -y

使用zabbix监控mariadb性能状态

0x01 前言

zabbix内置Mysql的监控模版,因为mariadb和Mysql两者的相关性,所以这个模版也能用在mariadb services上。

0x02 Mysql

首先要在mariadb新建一个账户,这个账户不需要有任何权限。这个账户只是用来登入mariadb获取服务状态。

GRANT USAGE ON *.* TO 'user name'@'server ip' IDENTIFIED BY 'passwd';
FLUSH PRIVILEGES;

请将以下内容根据实际情况进行替换:

  • user name >>mariadb账户名
  • server ip >>mariadb服务器IP
  • passwd >>mariadb密码

0x03 Zabbix Agent

完成mariadb的用户添加后,还要在mariadb服务器安装Zabbix Agent。通过以下文件可以得知还需要新建一个文件,并在这个文件内填入mariadb的信息:

/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 

# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.

# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
# Key syntax is mysql.size[<database>,<table>,<type>].
# Database may be a database name or "all". Default is "all".
# Table may be a table name or "all". Default is "all".
# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
# Database is mandatory if a table is specified. Type may be specified always.
# Returns value in bytes.
# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema="$1"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name="$2"");" | HOME=/var/lib/zabbix mysql -N'

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

然后新建以下文件并进行修改,要注意的是 /var/lib/zabbix 这个路径可能并不存在,需要手动新建:

#新建文件夹
mkdir -p /var/lib/zabbix

#修改文件
vim /var/lib/zabbix/.my.cnf

#填入内容
[mysql]
user=zabbix
password=zabbix
host=127.0.0.1

[mysqladmin]
user=zabbix
password=zabbix
host=127.0.0.1

完成后需要通过以下命令手动重启mariadb services和zabbix agent services:

#重启mariadb
systemctl restart mariadb.service

#重启zabbix agent
systemctl restart zabbix-agent.service

0x04 监控点

完成在mariadb服务器端的配置后就通过zabbix控制页面添加mariadb的监控点了。首先进入mariadb服务器的配置界面:

未分类

0x05 结语

添加过程还是挺简单的,我想这个监控在压力测试的时候会挺有用。以下是我数据库近两天的监控数据:

未分类

数据库带宽使用情况

未分类

数据库操作状况

CentOS7.3搭建Apache+PHP7+web SVN+MariaDB Web服务器

注意:本教程使用干净的 CentOS 7进行安装,如果您已安装其他环境或软件,涉及到内核升级,请您妥善备份,可能导致您已安装的软件不兼容或出现其他问题。

免责声明:本教程仅以个人经验撰写,未必适合所有系统环境。如在使用本教程途中,出现无法挽救的损失(如数据丢失等),本人概不负责。

再次提醒:使用本教程前请妥善备份现有数据!使用本教程前请妥善备份现有数据!使用本教程前请妥善备份现有数据!

如果您使用本教程的方法过程中出现问题,您可留言,我将在能力范围内尽可能协助解决。

本文最终服务器环境配置:

Apache 2.7.27
subversion1.9.7
MariaDB10.2.28
php7.1.8

下面开始进入教程吧。

一. 升级内核和软件包

[root@instance-l79ltvo6 ~]# yum -y update
...    
Complete!

直到控制台输出Complete!说明升级完成,最好还是重启一下吧

[root@instance-l79ltvo6 ~]# reboot

二. 安装 apache 2.4.27

先安装一些基本依赖

[root@instance-l79ltvo6 ~]# yum install -y gcc gcc-c++ openssl-devel zlib-devel
//在root目录下创建一个soft文件夹,我们本次教程的软件将都放在该目录下
[root@instance-l79ltvo6 ~]# mkdir soft 
[root@instance-l79ltvo6 ~]# cd soft

然后开始安装apr、apr-util、pcre 3个依赖,最后再安装 apache

1、安装 apr

[root@instance-l79ltvo6 ~]# wget https://mirror.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.2.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf apr-1.6.2.tar.gz
[root@instance-l79ltvo6 ~]# cd apr-1.6.2/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/apr
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

因为我们使用了 apr 1.6.2 的依赖,所以下面我们必须要用 apr-util 1.6.0 版本,apr-util 1.6.0

不再捆绑安装 expat ,但又需要 expat 的支持,所以我们得手动先安装 expat。不然编译 apache 的时候会报错。

2、安装 expat

[root@instance-l79ltvo6 ~]# wget https://sourceforge.net/projects/expat/files/expat/2.2.3/expat-2.2.3.tar.bz2
[root@instance-l79ltvo6 ~]# tar jxf expat-2.2.3.tar.bz2
[root@instance-l79ltvo6 ~]# cd expat-2.2.3/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/expat
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

3、安装 apr-util

[root@instance-l79ltvo6 ~]# wget  https://mirror.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf apr-util-1.6.0.tar.gz
[root@instance-l79ltvo6 ~]# cd apr-util-1.6.0/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

4、安装 pcre

[root@instance-l79ltvo6 ~]# wget http://sourceforge.mirrorservice.org/p/pc/pcre/pcre/8.41/pcre-8.41.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf pcre-8.41.tar.gz
[root@instance-l79ltvo6 ~]# cd pcre-8.41/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/pcre
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

5、安装 apache

[root@instance-l79ltvo6 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.27.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf httpd-2.4.27.tar.gz
[root@instance-l79ltvo6 ~]# cd httpd-2.4.27/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/apache 
--with-apr=/usr/local/apr 
--with-apr-util=/usr/local/apr-util 
--with-pcre=/usr/local/pcre 
--with-ssl 
--with-zlib 
--with-mpm=worker 
--enable-rewrite 
--enable-so 
--enable-ssl 
--enable-cache 
--enable-disk-cache 
--enable-file-cache 
--enable-mem-cache 
--enable-headers 
--enable-expires 
--enable-deflate 
--enable-dav 
--enable-dav-fs 
--enable-cgi 
--enable-proxy 
--enable-proxy-fcgi
//这里请根据自身实际情况开启相关模块
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

6、修改 apache 配置文件

编辑/usr/local/apache/conf/httpd.conf

#LoadModule ssl_module modules/mod_ssl.so //去掉#开启 SSL
#LoadModule rewrite_module modules/mod_rewrite.so  //去掉#开启 rewrite
#ServerName www.example.com:80    //去掉#并把 www.example.com:80 修改为你的IP:80或者域名
#Include conf/extra/httpd-vhosts.conf     //去掉#,开启虚拟主机配置
//如果你需要安装svn服务,你需要开启
#LoadModule dav_module modules/mod_dav.so//去掉#

找到以下代码并更换

<Directory />
    AllowOverride none
    Require all denied
</Directory>
//修改为
<Directory />
    Options Indexes FollowSymLinks    //如不需要显示目录,把 Indexes 去掉
    AllowOverride ALL    //开启rewrite
    Require all granted
</Directory>

编辑/usr/local/apache/conf/extra/httpd-vhosts.conf,删除全部,
并添加下列代码

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs"
    ServerName your IP    //你的IP地址
    ErrorLog "logs/你的IP-error_log"
    CustomLog "logs/你的IP-access_log" common
</VirtualHost>

7、添加启动服务

[root@instance-l79ltvo6 ~]# cp /usr/local/apache/bin/apachectl  /etc/rc.d/init.d/
[root@instance-l79ltvo6 ~]# mv /etc/rc.d/init.d/apachectl /etc/rc.d/init.d/httpd
[root@instance-l79ltvo6 ~]# cd /etc/rc.d/init.d/

编辑 httpd ,在 #!/bin/sh 下面添加下面代码

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 90 90
# description:http server

注册服务

[root@instance-l79ltvo6 ~]# chkconfig --add httpd
[root@instance-l79ltvo6 ~]# chkconfig httpd on

把 apache 加入系统环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/httpd.sh
//写入
export PATH=$PATH:/usr/local/apache/bin
//保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/httpd.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/httpd.sh

8、启动 apache

首先检查配置文件是否出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

启动 apache

[root@instance-l79ltvo6 ~]# systemctl start httpd.service

然后打开浏览器,输入你的IP地址,看到It works!,说明apache成功启动了

It works!

三. 安装 subversion 1.9.7

(如不需要svn服务请跳过)

1、安装 scons

[root@instance-l79ltvo6 ~]# cd /root/soft
[root@instance-l79ltvo6 ~]# wget http://sourceforge.mirrorservice.org/s/sc/scons/scons/2.5.1/scons-2.5.1.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf scons-2.5.1.tar.gz
[root@instance-l79ltvo6 ~]# cd scons-2.5.1/
[root@instance-l79ltvo6 ~]# python setup.py install --prefix=/usr/local/scons
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

2、安装 serf

[root@instance-l79ltvo6 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/serf/serf-1.3.9.tar.bz2
[root@instance-l79ltvo6 ~]# tar xf serf-1.3.9.tar.bz2
[root@instance-l79ltvo6 ~]# cd serf-1.3.9/
[root@instance-l79ltvo6 ~]# /usr/local/scons/bin/scons prefix=/usr/local/serf APR=/usr/local/apr APU=/usr/local/apr-util
[root@instance-l79ltvo6 ~]# /usr/local/scons/bin/scons install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

3、编译 subverion

[root@instance-l79ltvo6 ~]# wget http://www.sqlite.org/2017/sqlite-amalgamation-3190300.zip
[root@instance-l79ltvo6 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.9.7.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf subversion-1.9.7.tar.gz
[root@instance-l79ltvo6 ~]# unzip sqlite-amalgamation-3190300.zip
[root@instance-l79ltvo6 ~]# mv /root/soft/sqlite-amalgamation-3190300 /root/soft/subversion-1.9.7/sqlite-amalgamation
[root@instance-l79ltvo6 ~]# cd subversion-1.9.7/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/svn 
--with-apr=/usr/local/apr 
--with-apr-util=/usr/local/apr-util 
--with-serf=/usr/local 
--enable-mod-activation 
--with-apache-libexecdir=/usr/local/apache/modules 
--with-apxs=/usr/local/apache/bin/apxs  
--without-berkeley-db
[root@instance-l79ltvo6 ~]# make && make install

给SVN创建一个名为svn的非登录用户

[root@instance-l79ltvo6 ~]# useradd svn -s /sbin/nologin

把svn加入到系统环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/svn.sh
//添加
export PATH=$PATH:/usr/local/svn/bin
保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/svn.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/svn.sh

在/etc/ld.so.conf.d/创建一个serf-1.3.9.conf,指定lib目录,不然svn启动会报错

[root@instance-l79ltvo6 ~]# vim /etc/ld.so.conf.d/serf-1.3.9.conf
//添加
/usr/local/lib
保存后刷新
[root@instance-l79ltvo6 ~]# /sbin/ldconfig -v

4、配置 subverion

下面我们先创建一个 test 项目

[root@instance-l79ltvo6 ~]# mkdir -p /data/svn
[root@instance-l79ltvo6 ~]# cd /data/svn
[root@instance-l79ltvo6 ~]# svnadmin create test

然后我们打开 /data/svn/test /就会发现里面自动创建了一些目录

conf
db
format
hooks
locks
README.txt

在conf里面的文件就是配置该项目的人员和权限,但如果多个项目,开发人员一样,那就要配置很多次了,这样很麻烦,所以我们要弄成配置一次权限就能直接应用到所有项目里面。

[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/authz  /data/svn/authz
[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/passwd  /data/svn/passwd
[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/svnserve.conf  /data/svn/svnserve.conf
//然后设置一个用户密码,这里以创建root用户为例,这里的演示是将密码加密而非明文存储
[root@instance-l79ltvo6 ~]# htpasswd -c /data/svn/passwd root
New password:       //输入密码
Re-type new password:    //再次输入密码

这样 root 用户就创建完成了,创建其他用户同理。 接下来我们需要修改配置文件

[root@instance-l79ltvo6 ~]# vim /data/svn/svnserve.conf
//删除所有内容,增加下面的代码
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
//保存
[root@instance-l79ltvo6 ~]# vim /data/svn/authz
//删除所有内容,增加下面的代码
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
administrators = root

[/]
@administrators=rw

[test:/]
* = r
//保存

我们尝试启动下svn服务

[root@instance-l79ltvo6 ~]# svnserve --config-file /data/svn/svnserve.conf -d -r /data/svn

没有报错,说明启动成功了
把/data/svn/目录的拥有者更改为svn

[root@instance-l79ltvo6 ~]# chown -R svn:svn /data/svn

最后我们需要修改 apache 的相关配置文件
编辑/usr/local/apche/conf/httpd.conf

//找到
User daemon
Group daemon
//修改为
User svn
Group svn

编辑/usr/local/apache/conf/extra/httpd-vhost.conf,把刚刚那次编辑的内容更换为

<VirtualHost *:80>
    ServerName 你的IP
    ErrorLog "logs/你的IP-error_log"
    CustomLog "logs/你的IP-access_log" common
    <Location /svn>
      DAV svn
      #support more repositories
      SVNParentPath /data/svn

      #list all repositories
      #SVNListParentPath on
      AuthType Basic
      AuthName "Please input Username and Password"
      AuthUserFile /data/svn/passwd
      AuthzSVNAccessFile /data/svn/authz
      Require valid-user
    </Location>
</VirtualHost>

然后停止 apache 服务

[root@instance-l79ltvo6 ~]# systemctl stop httpd.service

检查 apache 配置文件是否出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

重新启动 apache

[root@instance-l79ltvo6 ~]# systemctl start httpd.service

打开浏览器访问http://你的ip/svn/test,提示输入账号密码 也可以使用TortoiseSVN进行操作
输入刚刚设置的账号密码后显示

test - Revision 0: /

说明配置成功,apache+svn服务启动成功

四. 安装 MariaDB 10.2.8

参考https://segmentfault.com/a/11…,把相关版本号更换为10.2.8即可

五. 安装 PHP 7.1.8

先安装基本依赖

[root@instance-l79ltvo6 ~]# yum -y install gcc gcc-c++ autoconf automake libtool re2c flex bison php-mcrypt libmcrypt libmcrypt-devel openssl-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel zlib-devel mcrypt bzip2-devel libicu-devel systemd-devel mhash postgresql-devel libxslt libxslt-devel

编译 PHP

[root@instance-l79ltvo6 ~]# cd /root/soft
[root@instance-l79ltvo6 ~]# wget http://cn.php.net/distributions/php-7.1.8.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf php-7.1.8.tar.gz
[root@instance-l79ltvo6 ~]# cd php-7.1.8/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/php 
--with-apxs2=/usr/local/apache/bin/apxs 
--with-curl 
--with-freetype-dir 
--with-gd 
--with-gettext 
--with-iconv-dir 
--with-kerberos 
--with-libdir=lib64 
--with-libxml-dir 
--with-mysqli 
--with-openssl 
--with-pcre-regex 
--with-pdo-mysql 
--with-pdo-sqlite 
--with-pear 
--with-png-dir 
--with-xmlrpc 
--with-xsl 
--with-zlib 
--with-mhash 
--enable-fpm 
--enable-bcmath 
--enable-libxml 
--enable-inline-optimization 
--enable-gd-native-ttf 
--enable-mbregex 
--enable-mbstring 
--enable-opcache 
--enable-pcntl 
--enable-shmop 
--enable-soap 
--enable-sockets 
--enable-sysvsem 
--enable-xml 
--enable-zip 
--enable-mysqlnd
[root@instance-l79ltvo6 ~]# make && make install
...    //漫长的等待

编译成功

[PEAR] Archive_Tar    - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.2
[PEAR] PEAR           - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
/root/soft/php-7.1.8/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:           /usr/local/php/include/php/ext/pdo/

这里提示让我们从源码包复制一份 php.ini 到 /usr/local/php/lib/

[root@instance-l79ltvo6 ~]# cp php.ini-development /usr/local/php/lib/php.ini

修改 apache ,让 apache 支持 php
编辑/usr/local/apache/conf/httpd.conf

LoadModule php7_module        modules/libphp7.so    //默认是开启php7.so
//找到 <IfModule mime_module>,在</IfModule>前面增加
    AddType application/x-httpd-php .php .php3 .phtml .inc
    AddType application/x-httpd-php-source .phps
//找到 DirectoryIndex index.html,增加index.php
DirectoryIndex index.html index.shtml index.cgi index.php index.phtml index.php3

保存后看看httpd.conf有没有出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

把PHP加入环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/php.sh
//加入
export PATH=$PATH:/usr/local/php/bin
//保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/php.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/php.sh

停止 apache,然后重新启动 apache

[root@instance-l79ltvo6 ~]# systemctl stop httpd.service
[root@instance-l79ltvo6 ~]# systemctl start httpd.service

测试PHP

[root@instance-l79ltvo6 ~]# vim /usr/local/apache/htdocs/phpinfo.php
//加入
<?php
  phpinfo();
?>

保存后访问http://你的IP/phpinfo.php
如果成功访问到PHP的相关信息,那么PHP环境配置成功。

教程结束

本次教程本人在 CentOS 7.3 下搭建成功。

如果出现编译失败也不要灰心,一般都是缺少相关依赖,善于利用搜索引擎。如果实在不知道怎么解决,给我留言,我会在能力范围尽可能的协助解决。

CentOS 7.2安装LAMP(apache mariadb php)搭建WordPress

导语

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。

一.LAMP环境搭建

LAMP即Linux+Apache+MySQL(MariaDB)+PHP,由于其开源免费,所以是目前非常受欢迎的一组网站解决方案,本文也将采用此方案。

1. Linux选择

笔者选用的是CentOS 7.2这个版本,CentOS实质为无支持版的RHEl,稳定性还是比较高的,当然也可以选择其它发行版,只是后续的操作略有不同,本文将只介绍在CentOS下的操作(系统的安装和本文关系不大,故不再赘述)。

2. 安装Apache

直接yum安装

# yum -y install httpd

安装完成后,启动服务

# systemctl start httpd.service

设置为开机启动

# systemctl enable httpd.service

之后可以在浏览器输入localhost进行测试,由于笔者没有安装GUI,只能在客户端浏览器进行测试,在这之前需要打开80和443端口

首先开启防火墙并设置为开机启动

# systemctl start firewalld.service
# systemctl enable firewalld.service

开启端口(80和443)

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

重启防火墙

# firewall-cmd --reload

查询已开启端口

# irewall-cmd --list-ports

未分类

客户端测试
未分类

3. 安装并配置数据库(Mariadb)

由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以在CentOS 7中弃用了MySQL,改为支持Mariadb(MySQL的一个分支,与之完全兼容),所以本文也将使用该数据库。

同样还是利用yum命令进行安装,并且配置开机启动

# yum -y install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service

配置root密码

# mysql_secure_installation

配置过程中会有几个选项,大家根据自己的需要进行配置就好了

未分类

使用root用户登录mysql

# mysql -u root -p

为WordPress创建数据库

# CREATE DATABASE wordpress;

查看创建结果

未分类

为该数据库创建用户

# CREATE USER username@localhost IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

更改用户权限,保存并退出

# GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
# FLUSH PRIVILEGES;
# exit

重启服务

# systemctl restart mariadb.service

4. 安装PHP及相关组件

首先安装PHP

# yum -y install php

安装相关组件

# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

安装完成之后我们可以新建一个php页面进行测试

# vim /var/www/html/info.php

编辑为以下内容

未分类

重启httpd服务

# systemctl restart httpd.service

打开网址 http://x.x.x.x/info.php 进行查看(x.x.x.x为vps的ip地址)

未分类
php测试页

二. WordPress安装与配置

安装wget(下载) unzip(解压) net-tools(网络管理)

# yum -y install wget unzip net-tools

下载WordPress

# wget http://wordpress.org/latest.zip

未分类

解压文件,并将其复制到/var/www/html/目录下

# unzip -q latest.zip
# cp -rf wordpress/* /var/www/html/

未分类

编辑配置文件

# cd /var/www/html
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

将其修改为以下格式(其中wordpress为数据库名称,wordpressuser为数据库用户名,10293847为数据库密码)

未分类

保存后退出,重启相关服务

# systemctl restart httpd.service
# systemctl restart mariadb.service

三. WordPress的个人设置

完成以上配置之后,便可以输入http://yourserverip/来访问你的博客了。

  • 选择语言

未分类

  • 填写个人信息

未分类

  • 安装完成

未分类

  • 登录到仪表盘

未分类

至此WordPress已经搭建完成,之后可根据自己的需要进行其它配置。

CentOS使用yum安装mariadb

创建文件:

/etc/yum.repos.d/MariaDB.repo

编辑文件:

# MariaDB 10.1 CentOS repository list - created 2016-08-04 02:04 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

执行命令:

sudo yum install MariaDB-server MariaDB-client

参考内容:

https://mariadb.com/kb/zh-cn/installing-mariadb-with-yum/

CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

未分类

准备篇

CentOS 7.0系统安装配置图解教程

http://www.osyunwei.com/archives/7829.html

1、配置防火墙,开启80端口、3306端口

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

  • 关闭firewall:
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动
  • 安装iptables防火墙
yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

2、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

安装篇

1、安装Apache

未分类

yum install httpd #根据提示,输入Y安装即可成功安装

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动

在客户端浏览器中打开服务器IP地址,会出现下面的界面,说明apache安装成功

未分类

2、安装MariaDB

CentOS 7.0中,已经使用MariaDB替代了MySQL数据库

  • 安装MariaDB

未分类

yum install mariadb mariadb-server #询问是否要安装,输入Y即可自动安装,直到安装完成

systemctl start mariadb.service #启动MariaDB

systemctl stop mariadb.service #停止MariaDB

systemctl restart mariadb.service #重启MariaDB

systemctl enable mariadb.service #设置开机启动

cp /usr/share/mysql/my-huge.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)
  • 为root账户设置密码

未分类

mysql_secure_installation

回车,根据提示输入Y

输入2次密码,回车

根据提示一路输入Y

最后出现:Thanks for using MySQL!

MariaDB密码设置完成,重新启动 MariaDB:

systemctl restart mariadb.service #重启MariaDB

3、安装PHP

  • 安装PHP

未分类

yum install php #根据提示输入Y直到安装完成
  • 安装PHP组件,使PHP支持 MariaDB
yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

#这里选择以上安装包进行安装,根据提示输入Y回车

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

配置篇

1、Apache配置

vi /etc/httpd/conf/httpd.conf #编辑文件

ServerSignature On  #添加,在错误页中显示Apache的版本,Off为不显示

Options Indexes FollowSymLinks  #修改为:Options Includes ExecCGI FollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)

#AddHandler cgi-script .cgi #修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)

AllowOverride None  #修改为:AllowOverride All (允许.htaccess)

AddDefaultCharset UTF-8 #修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)

#Options Indexes FollowSymLinks   #修改为 Options FollowSymLinks(不在浏览器上显示树状目录结构)

DirectoryIndex index.html   #修改为:DirectoryIndex index.html index.htm Default.html Default.htm index.php(设置默认首页文件,增加index.php)

MaxKeepAliveRequests 500  #添加MaxKeepAliveRequests 500 (增加同时连接数)

:wq! #保存退出

systemctl restart httpd.service #重启apache

rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #删除默认测试页

2、php配置

vi /etc/php.ini #编辑

date.timezone = PRC #把前面的分号去掉,改为date.timezone = PRC

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

expose_php = Off #禁止显示php版本的信息

short_open_tag = ON #支持php短标签

open_basedir = .:/tmp/  #设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系统),可以注销此行,或者直接写上程序的目录/data/www.osyunwei.com/:/tmp/

:wq! #保存退出

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

测试篇

cd /var/www/html

vi index.php #输入下面内容

<?php

phpinfo();

?>

:wq! #保存退出

在客户端浏览器输入服务器IP地址,可以看到如下图所示相关的配置信息!

未分类

注意:apache默认的程序目录是/var/www/html

权限设置:chown apache.apache -R /var/www/html

至此,CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)教程完成!

Fedora Server上安装配置MariaDb galera集群

下载与安装 MariaDB Galera Cluster

10.1之前的版本安装,输入以下命令进行安装:

sudo dnf install mariadb-galera-server

  
如果电脑上还没安装Mariadb Server,会顺便安装上,如果已经安装了,则会更新相关的包。

10.1之后的版本,Mariadb Server把群集功能打包在一起了,所以直接安装数据库,不用单独安装:

sudo dnf install mariadb-server

配置

基本步骤,使用–wsrep-new-cluster创建一个集群(只在第一个节点上使用),用–wsrep_cluster_address=gcomm://192.168.0.1加入节点。

由于文本使用的是Fedora,服务管理是systemd,所以需要修改mariadb.service,将参数加进去。

修改后的启动文件:

[Unit]
Description=MariaDB 10.1 database server
After=network.target

[Service]
Type=notify
User=mysql
Group=mysql

ExecStartPre=/usr/libexec/mysql-check-socket
# '%n' expands to 'Full unit name'; man systemd.unit
ExecStartPre=/usr/libexec/mysql-prepare-db-dir %n
# MYSQLD_OPTS here is for users to set in /etc/systemd/system/[email protected]/MY_SPECIAL.conf
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_CLUSTER_ADDRESS
ExecStartPost=/usr/libexec/mysql-check-upgrade
ExecStopPost=/usr/libexec/mysql-wait-stop

# Setting this to true can break replication and the Type=notify settings
# See also bind-address mysqld option.
PrivateNetwork=false

KillMode=process
KillSignal=SIGTERM

# Don't want to see an automated SIGKILL ever
SendSIGKILL=no

# Restart crashed server only, on-failure would also restart, for example, when
# my.cnf contains unknown option
Restart=on-abort
RestartSec=5s

UMask=007

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

# Place temp files in a secure directory, not /tmp
PrivateTmp=true

[Install]
WantedBy=multi-user.target

  
第一个节点的环境设置:

systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
_WSREP_CLUSTER_ADDRESS=--wsrep_cluster_address=gcomm://192.168.30.184
_WSREP_NEW_CLUSTER=--wsrep-new-cluster

第二个节点的环境配置:

systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
_WSREP_CLUSTER_ADDRESS=--wsrep_cluster_address=gcomm://192.168.30.184

  

测试

为测试方便,先将防火墙关闭,还有selinux。先启动第一个节点,再启动第二个节点。在其中一个节点上创建一个数据库,切换到另一个节点上就可以看到这个数据库。

通过数据命令可以查看集群的状态:

SHOW STATUS LIKE 'wsrep_%';
+------------------------------+-----------------------------------------+
| Variable_name                | Value                                   |
+------------------------------+-----------------------------------------+
| wsrep_apply_oooe             | 0.000000                                |
| wsrep_apply_oool             | 0.000000                                |
| wsrep_apply_window           | 1.000000                                |
| wsrep_causal_reads           | 0                                       |
| wsrep_cert_deps_distance     | 1.000000                                |
| wsrep_cert_index_size        | 2                                       |
| wsrep_cert_interval          | 0.000000                                |
| wsrep_cluster_conf_id        | 189                                     |
| wsrep_cluster_size           | 2                                       |
| wsrep_cluster_state_uuid     | e5b100e2-7f7e-11e7-9266-de309a905227    |
| wsrep_cluster_status         | Primary                                 |
| wsrep_commit_oooe            | 0.000000                                |
| wsrep_commit_oool            | 0.000000                                |
| wsrep_commit_window          | 1.000000                                |
| wsrep_connected              | ON                                      |
| wsrep_desync_count           | 0                                       |
| wsrep_evs_delayed            |                                         |
| wsrep_evs_evict_list         |                                         |
| wsrep_evs_repl_latency       | 0/0/0/0/0                               |
| wsrep_evs_state              | OPERATIONAL                             |
| wsrep_flow_control_paused    | 0.000000                                |
| wsrep_flow_control_paused_ns | 0                                       |
| wsrep_flow_control_recv      | 0                                       |
| wsrep_flow_control_sent      | 0                                       |
| wsrep_gcomm_uuid             | f023c418-7f81-11e7-bfbb-86741b99a879    |
| wsrep_incoming_addresses     | 192.168.30.184:3306,192.168.30.186:3306 |
| wsrep_last_committed         | 3                                       |
| wsrep_local_bf_aborts        | 0                                       |
| wsrep_local_cached_downto    | 1                                       |
| wsrep_local_cert_failures    | 0                                       |
| wsrep_local_commits          | 0                                       |
| wsrep_local_index            | 1                                       |
| wsrep_local_recv_queue       | 0                                       |
| wsrep_local_recv_queue_avg   | 0.125000                                |
| wsrep_local_recv_queue_max   | 2                                       |
| wsrep_local_recv_queue_min   | 0                                       |
| wsrep_local_replays          | 0                                       |
| wsrep_local_send_queue       | 0                                       |
| wsrep_local_send_queue_avg   | 0.000000                                |
| wsrep_local_send_queue_max   | 1                                       |
| wsrep_local_send_queue_min   | 0                                       |
| wsrep_local_state            | 4                                       |
| wsrep_local_state_comment    | Synced                                  |
| wsrep_local_state_uuid       | e5b100e2-7f7e-11e7-9266-de309a905227    |
| wsrep_protocol_version       | 7                                       |
| wsrep_provider_name          | Galera                                  |
| wsrep_provider_vendor        | Codership Oy <[email protected]>       |
| wsrep_provider_version       | 3.16(r5c765eb)                          |
| wsrep_ready                  | ON                                      |
| wsrep_received               | 8                                       |
| wsrep_received_bytes         | 2148                                    |
| wsrep_repl_data_bytes        | 0                                       |
| wsrep_repl_keys              | 0                                       |
| wsrep_repl_keys_bytes        | 0                                       |
| wsrep_repl_other_bytes       | 0                                       |
| wsrep_replicated             | 0                                       |
| wsrep_replicated_bytes       | 0                                       |
| wsrep_thread_count           | 2                                       |
+------------------------------+-----------------------------------------+