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的名字。
??MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
??

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 = MariaDBbaseurl = http://yum.mariadb.org/10.2/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

保存后清除yum缓存,并重新构建缓存

yum clean allyum 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/mysqldbchown mysql:mysql /data/mysqldbchmod 770 /data/mysqldb

??

解压压缩包并配置环境变量

??
解压压缩包并指定目录

tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/

创建软连接方便日后升级,修改文件权限

cd /usr/localln -s mariadb-10.2.15-linux-x86_64/ mysqlchown -R root:root mysql/

配置环境变量

echo PATH=/usr/local/mysql/bin:$PATH > /etc/profile.d/mysql.sh#重读环境信息,使变量生效. /etc/profile.d/mysql.sh

??

准备配置文件启动脚本和初始化数据库

??
准备配置文件并且修改为合适的参数

cd /usr/local/mysqlcp support-files/my-huge.cnf /etc/my.cnf#修改配置文件vim /etc/my.cnf[mysqld]datadir=/data/mysqldb 加此行


初始化数据库

cd /usr/local/mysqlscripts/mysql_install_db --datadir=/data/mysqldb --user=mysql

准备启动脚本并启动服务

cd /usr/local/mysqlcp support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldservice 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/mysqldatadir=/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} -pvchown -R mysql.mysql /mysqldb/

??

创建数据库信息

??
创建各自的数据库信息

mysql_install_db --datadir=/mysqldb/3306/data --user=mysqlmysql_install_db --datadir=/mysqldb/3307/data --user=mysqlmysql_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=3306datadir=/mysqldb/3306/datasocket=/mysqldb/3306/socket/mysql.sock[mysqld_safe]log-error=/mysqldb/3306/log/mariadb.logpid-file=/mysqldb/3306/pid/mariadb.pid#!includedir /etc/my.cnf.d


将3306实例的配置文件分别复制给3307和3308并修改

cp /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/my.cnfcp /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/my.cnfvim /mysqldb/3308/etc/my.cnfvim /mysqldb/3307/etc/my.cnf

编写启动脚本并拷贝到对应路径
示例脚本

#!/bin/bashport=3306mysql_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 instart) 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/mysqldchmod 700 /mysqldb/3307/mysqldchmod 700 /mysqldb/3306/mysqld

修改对应的信息

vim /mysqldb/3306/mysqldvim /mysqldb/3307/mysqldvim /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%‘;

相关文章