源码编译安装mariadb和二进制一键安装脚本最后实现Mysql多实例

10 篇文章 0 订阅

1)准备工作

首先去MariaDB官网下载安装包
官网下载链接

在这里插入图片描述
因为这里是编译安装,所以暂时不针对某一系统的二进制包进行下载,这里下载源码包mariadb-10.2.29.tar.gz,下载之后上传至服务器

查看是否为纯净的系统

[root@centos7K ~]#rpm -qa mariadb*
mariadb-libs-5.5.60-1.el7_5.x86_64

安装相关依赖包

yum install bison bison-devel zlib-devel libcurl-devel
libarchive-devel boostdevel gcc gcc-c++ cmake ncurses-devel
gnutls-devel libxml2-devel openssldevel libevent-devel libaio-devel openssl-devel -y

[root@centos7K ~]#yum install -y bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdevel 
gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssldevel libevent-devel libaio-devel openssl-devel

做准备用户和数据目录

useradd –r –s /sbin/nologin –d /data/mysql/ mysql

[root@centos7K ~]#useradd -r -s /sbin/nologin mysql

家目录后面会自动生成。所以在这里指不指定都行

下载并解压缩源码包
在这里插入图片描述
源码解压缩习惯放在/usr/local/src/这个文件夹下面,临时用的一个目录,源码编译完了就没有用了

[root@centos7K ~]#tar xvf mariadb-10.2.29.tar.gz -C /usr/local/src/
[root@centos7K ~]#cd /usr/local/src/
[root@centos7K src]#ls
mariadb-10.2.29
[root@centos7K src]#du -sh mariadb-10.2.29/
512M	mariadb-10.2.29/

解压缩之后从原来的70多M到了512M.

2)编译过程

进入到解压好的文件夹中,执行cmake 其中 \ 表示一行没有写完,另起一行继续写的意思
在这里插入图片描述
在这里插入图片描述
模拟八核开始编译
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看对应的目录是否生成了相关的文件

在这里插入图片描述
之后和二进制安装编译之后的操作步骤差不多

3)配置相关启动数据库文件

修改bin下的应用程序PATH路径
在这里插入图片描述
添加配置文件
在这里插入图片描述
在这里编译的时候就已经指定路径了,所以这里不需要修改 /etc/my.cnf 中的内容

配置启动服务脚本

在这里我们用的是源码编译,所以没有systemd 只有mysql.server
在这里插入图片描述
创建数据库配置

只需要执行自带的mysql_install_db 就会自动生成,这里执行的时候最好用绝对路径

[root@centos7K mysql]#/app/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql

在这里插入图片描述
生成之后所属组和所有者都已经自动设置好,对应权限也是700,较为安全

最后启动
在这里插入图片描述
安全加固

 [root@centos7K mysql]#mysql_secure_installation 

这里以centos密码为例。
在这里插入图片描述

实现Mysql多实例

实验目的

CentOS 7.6 yum安装mariadb并实现三个实例
物理机性能强大,单个项目无法把资源使用完
资源隔离,减少相互影响
分担连接数 MySQL随着连接数上升,性能会出现下降
更充分的利用资源 不同的业务错高峰混跑

环境要求

一台主机
系统:CentOS 7.X

前提准备

关闭SElinux
关闭防火墙
时间同步

安装二进制编译数据库

实验步骤

首先去MariaDB官网下载安装包
官网下载链接

在这里插入图片描述
准备好一键安装脚本以及对应的配置文件

[root@centos7K data]#cd /data/
[root@centos7K data]#ls
mariadb-10.2.29-linux-x86_64.tar.gz  mariadb-install.sh  my.cnf

一共三个文件,一个是我们下载的二进制安装包mariadb-10.2.29-linux-x86_64.tar.gz,一个是我们自己写的一键安装脚本mariadb-install.sh,一个是服务端的配置文件my.cnf

[root@centos7K data]#cat my.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1

[client]
port=3306
socket=/var/lib/mysql/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/tmp/mysql.pid
[root@centos7K data]#cat mariadb-install.sh 
#!/bin/bash
#mysql-install.sh
DIR=`pwd`
NAME="mariadb-10.2.29-linux-x86_64.tar.gz"
FULL_NAME=${DIR}/${NAME}
DATA_DIR="/data/mysql"

yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion -y
yum install curl policycoreutils openssh-server openssh-clients postfix libaio-devel -y

if [ -f ${FULL_NAME} ];then
    echo "安装文件存在"
else
    echo "安装文件不存在"
    exit 3
fi
if [ -h /usr/local/mysql ];then
    echo "Mysql 已经安装"
    exit 3 
else
    tar xvf ${FULL_NAME}   -C /usr/local/
    cd /usr/local/
    ln -sv mariadb-10.2.29-linux-x86_64 mysql
    if id  mysql;then
        echo "mysql 用户已经存在,跳过创建用户过程"
    else 
        useradd -r  -s /sbin/nologin mysql
    fi
    
    if  id  mysql;then
    	chown  -R mysql.mysql  /usr/local/mysql/
        if [ ! -d  /data/mysql ];then
            mkdir -pv /data/mysql && chown  -R mysql.mysql  /data   -R
            /usr/local/mysql/scripts/mysql_install_db  --user=mysql --datadir=/data/mysql  
			cp  /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
			chmod a+x /etc/init.d/mysqld
			cp ${DIR}/my.cnf   /etc/my.cnf
			ln -sv /usr/local/mysql/bin/mysql  /usr/bin/mysql
			/etc/init.d/mysqld start
		else
            echo "MySQL数据目录已经存在,"
			exit 3
		fi
    fi
fi

echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

给一键安装脚本mariadb-install.sh加执行权限直接一键安装

[root@centos7K data]#chmod +x mariadb-install.sh 
[root@centos7K data]#bash -n mariadb-install.sh                #检查脚本语法
[root@centos7K data]#bash mariadb-install.sh                    #运行一键安装脚本

在这里插入图片描述
查看端口3306是否打开,打开则说明数据库服务以及成功安装并且启动
在这里插入图片描述

在这里插入图片描述

实现多实例

现在在这个基础之上实现多实例
计划把多实例的服务跑到不同的端口3306 3307 3308

分别创建各自的子目录
在这里插入图片描述
在这里插入图片描述
查看是否mysql用户已经存在,不存在则需要创建

[root@centos7K data]#id mysql               #查看是否mysql用户已经存在,不存在则需要创建
uid=998(mysql) gid=996(mysql) groups=996(mysql)
[root@centos7K data]#chown -R mysql.mysql /mysql         #修改所有者和属组

生成数据库文件

[root@centos7K data]#ll /usr/local/mysql/scripts/
total 20
-rwxr-xr-x 1 mysql mysql 19486 Nov  6 19:22 mysql_install_db
[root@centos7K data]#/usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3306/data --user=mysql
[root@centos7K data]#/usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3307/data --user=mysql
[root@centos7K data]#/usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3308/data --user=mysql

随便找一个数据库查看是否生成数据库文件以及所属组,所有者是否都是指定的mysql
在这里插入图片描述
配置文件

[root@centos7K data]#cp /etc/my.cnf /mysql/3306/etc/
[root@centos7K data]#vim /mysql/3306/etc/my.cnf 
[mysqld]
port=3306
socket=/mysql/3306/socket/mysqld.sock
datadir=/mysql/3306/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3306/log/mysqld.log
pid-file=/mysql/3306/pid/mysqld.pid

复制参考3306来进行其他数据库的修改

[root@centos7K data]#cp /mysql/3306/etc/my.cnf /mysql/3307/etc/
[root@centos7K data]#cp /mysql/3306/etc/my.cnf /mysql/3308/etc/
[root@centos7K data]#sed -i 's/3306/3307/' /mysql/3307/etc/my.cnf 
[root@centos7K data]#sed -i 's/3306/3308/' /mysql/3308/etc/my.cnf 
[root@centos7K data]#cat /mysql/3307/etc/my.cnf
[mysqld]
port=3307
socket=/mysql/3307/socket/mysqld.sock
datadir=/mysql/3307/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3307/log/mysqld.log
pid-file=/mysql/3307/pid/mysqld.pid

[root@centos7K data]#cat /mysql/3308/etc/my.cnf
[mysqld]
port=3308
socket=/mysql/3308/socket/mysqld.sock
datadir=/mysql/3308/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3308/log/mysqld.log
pid-file=/mysql/3308/pid/mysqld.pid

准备启动脚本程序
启动脚本需要自己准备好
注意:启动脚本需要放在对应bin文件夹下面

 [root@centos7K data]#cd /mysql/3306/bin/
[root@centos7K bin]#ls
mysqld
[root@centos7K bin]#vim mysqld 
[root@centos7K bin]#cat mysqld 
#!/bin/bash

port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/local/mysql/bin"
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysqld.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 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac

把之前开启的数据库关闭,查看3306端口是否打开来确认是否开启或者关闭来确认数据库是否提供服务

[root@centos7K bin]#ss -ntl
State       Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN      0      128                      *:22                                   *:*                  
LISTEN      0      100              127.0.0.1:25                                   *:*                  
LISTEN      0      80                      :::3306                                :::*                  
LISTEN      0      128                     :::22                                  :::*                  
LISTEN      0      100                    ::1:25                                  :::*                  
[root@centos7K bin]#service mysqld stop
Stopping mysqld (via systemctl):                           [  OK  ]

[root@centos7K bin]#ss -ntl
State       Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN      0      128                      *:22                                   *:*                  
LISTEN      0      100              127.0.0.1:25                                   *:*                  
LISTEN      0      128                     :::22                                  :::*                  
LISTEN      0      100                    ::1:25                                  :::*      
  
[root@centos7K bin]#chmod +x mysqld 
[root@centos7K bin]#bash -n mysqld 
加对应的执行权限,检查一下启动安装脚本语法
[root@centos7K bin]#bash mysqld start  #这里脚本文件绝对路径是/mysql/3306/bin/mysqld start

这里尝试是否能够让3306,如果能够成功,直接拷贝启动脚本mysqld到其他实例中实现多实例

在这里插入图片描述
尝试连接一下数据库3306

[root@centos7K bin]#mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
这里我们默认的套接字连接不在这里,需要自己指定
[root@centos7K bin]#mysql -S /mysql/3306/socket/mysqld.sock 

在这里插入图片描述

这里需要重复一句,启动服务脚本是放在/mysql/3306/bin/下的mysqld
用sed命令修改文件对应的不同端口号

[root@centos7K bin]#cp mysqld /mysql/3307/bin/
[root@centos7K bin]#cp mysqld /mysql/3308/bin/
[root@centos7K bin]#sed -i 's/3306/3307/' /mysql/3307/bin/mysqld 
[root@centos7K bin]#sed -i 's/3306/3308/' /mysql/3308/bin/mysqld 

启动其他多实例数据库

[root@centos7K bin]#cd
[root@centos7K ~]#/mysql/3307/bin/mysqld start
Starting MySQL...
[root@centos7K ~]#/mysql/3308/bin/mysqld start
Starting MySQL...
[root@centos7K ~]#ss -ntl

在这里插入图片描述
尝试连接,但是需要指定每一个不同的多实例的socket路径
[root@centos7K ~]#mysql -S /mysql/3307/socket/mysqld.sock
在这里插入图片描述

[root@centos7K ~]#mysql -S /mysql/3308/socket/mysqld.sock 

在这里插入图片描述
数据库停机服务
停用数据库可以用mysql/330x/bin/mysqld 脚本
其中听用的时候需要输入密码,这个密码来自于这个脚本中mysql_pwd=" ",默认是空,可以自己对其进行配置。

在这里插入图片描述

[root@centos7K bin]#/mysql/3306/bin/mysqld stop
[root@centos7K bin]#/mysql/3307/bin/mysqld stop
[root@centos7K bin]#/mysql/3308/bin/mysqld stop
[root@centos7K bin]#ss -ntl

在这里插入图片描述
在这里插入图片描述

扩展:修改多实例的密码

改不同的多实例密码用mysqladmin ,区分不同的实例用套接字
因为在之前的二进制一键安装配置脚本最后加入了PATH变量如下,所以直接可以用命令不用写其路径

echo ‘PATH=/usr/local/mysql/bin:$PATH’ > /etc/profile.d/mysql.sh

[root@centos7K ~]#mysqladmin -S /mysql/3306/socket/mysqld.sock password centos3306
[root@centos7K ~]#mysqladmin -S /mysql/3307/socket/mysqld.sock password centos3307
[root@centos7K ~]#mysqladmin -S /mysql/3308/socket/mysqld.sock password centos3308

在这里插入图片描述

在这里安全脚本跑不了,路径不一致。需要手工改。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值