ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

centos7一键部署mariadb数据库【单点主主主备】

2022-08-04 12:33:51  阅读:180  来源: 互联网

标签:bin IP2 PASSWORD 主主主备 echo centos7 sh mariadb


1. 概述

平时集群需要经常部署mariadb数据库服务。mariadb的部署,有很多种方式,可以根据实际需求选择不同的部署架构。

比较常用的包括:

  • 单点部署
  • 双主部署
  • 主从部署

本篇内容主要主要是完成另一个支持这三种部署方式的脚本,在平时使用足够。

脚本在安装了centos7.9的虚拟机环境测试过,偶尔会发生错误,其他时间都能够正常部署。

2. 代码如下

保存为:my_mariadb_install.sh后,执行该脚本即可

my_mariadb_install.sh s 单点部署

my_mariadb_install.sh ms 主从架构

my_mariadb_install.sh mm 双主架构

脚本仅在我自己部署的虚拟机测试通过,切勿用于生产环境

#!/bin/bash
#部署maraidb的脚本

if [ "$1"  != "s" ] && [ "$1" != "mm" ] && [ "$1" != "ms" ]
then
        echo "$(basename $0) [s|mm|ms]"
        exit 0
fi

#创建单节点部署脚本
cat << EOF > install_modify_mariadb.sh
HOSTNAME=\$1
IP=\$2
PASSWORD=\$3
echo "数据库主机名:\${HOSTNAME},数据库IP:\${IP},数据库密码是:\${PASSWORD}"
echo -ne "正在yum安装mariadb..."
yum -y install mariadb mariadb-server mariadb-devel mariadb-libs > /dev/null 2>&1
echo "安装完成."
echo "配置编码..."
SERVER_CONF=(
        init_connect='SET collation_connection = utf8_unicode_ci'
        init_connect='SET NAMES utf8'
        character-set-server=utf8
        collation-server=utf8_general_ci
        skip-character-set-client-handshake
        max-connections=4096
        open-files-limit=4096
        innodb_buffer_pool_size=1024M
        innodb_log_file_size=64M
        innodb_lock_wait_timeout=900
)
LENTH=\${#SERVER_CONF[*]}
for i in \$(seq 0 \$((\${LENTH}-1)))
do
        sed -i "/mariadb-5.5/a\${SERVER_CONF[LENTH-i-1]}" /etc/my.cnf.d/server.cnf
done

CLIENT_CONF=(
        default-character-set=utf8
)
for line in \${CLIENT_CONF[*]}
do
        sed -i "/client-mariadb/a\${line}" /etc/my.cnf.d/client.cnf
done

echo "配置最大连接数..."
sed -i '/PrivateTmp/a\LimitNOFILE=10000' /usr/lib/systemd/system/mariadb.service
systemctl daemon-reload
systemctl enable mariadb -q

echo "启动服务..."
systemctl start mariadb  2>/dev/null && echo "本地节点:\${IP}数据库启动成功..."
echo "初始化数据库..."
mysql << HHH > init_mariadb.sh
delete from mysql.user where user = " " and host = "localhost";
delete from mysql.user where user = " " and host = "127.0.0.1";
delete from mysql.user where user = " " and host = "\${HOSTNAME}";
delete from mysql.user where user = "root" and host = "\${HOSTNAME}";
delete from mysql.user where user = "root" and host = "::1";
grant all privileges on *.* to 'root'@'localhost' identified by '\${PASSWORD}';
grant all privileges on *.* to 'root'@'127.0.0.1' identified by '\${PASSWORD}';
flush privileges;
HHH
/bin/bash init_mariadb.sh
EOF

#创建双节点脚本
cat << EOF > master_conf.sh
#写配置文件
m1_conf=(
        log-bin=mysql-bin 
        server-id=1
        auto_increment_increment=2 
        auto_increment_offset=1
)
for line in \${m1_conf[*]}
do
        sed -i "/mysqld_safe/i\${line}" /etc/my.cnf
done
systemctl restart mariadb
EOF

cat << EOF > master_mariadb.sh
PASSWORD=\$1
REMOTEIP=\$2
sql="grant replication slave on *.* to 'repl'@'\${REMOTEIP}' identified by '\${PASSWORD}';"
mysql -hlocalhost -uroot -p\${PASSWORD} -e "\${sql}"
sql="flush privileges;"
mysql -hlocalhost -uroot -p\${PASSWORD} -e "\${sql}"
sql="show master status"
rtn=\$(mysql -hlocalhost -uroot -p\${PASSWORD} -N -e "\${sql}")
mysqlbin=\$(echo \${rtn}|awk '{print \$1}')
posttion=\$(echo \${rtn}|awk '{print \$2}')
echo "\${mysqlbin} \${posttion}"
EOF

cat << EOF > slave_conf.sh
m2_conf=(
        log-bin=mysql-bin 
        server-id=2 
        auto_increment_increment=2 
        auto_increment_offset=2
)
for line in \${m2_conf[*]}
do
        sed -i "/mysqld_safe/i\${line}" /etc/my.cnf
done
systemctl restart mariadb
EOF

cat << EOF > slave_mariadb.sh
PASSWORD=\$1
MASTER_IP=\$2
mysqlbin=\$3
position=\$4
sql="change master to master_host='\${MASTER_IP}',master_user='repl',master_password='\${PASSWORD}',master_log_file='\${mysqlbin}',master_log_pos=\${position};"
mysql -hlocalhost -uroot -p\${PASSWORD} -e "\${sql}"
sql="start slave;"
mysql -hlocalhost -uroot -p\${PASSWORD} -e "\${sql}"
EOF

#脚本功能

#单节点模式
if [ "${1}" == "s" ]
then
echo "mariadbg单节点快速部署--->"
read -p "数据库root密码:" PASSWORD
if [ "${PASSWORD}" == "" ]
then
        PASSWORD="liwanliang"
fi
read -p "输入节点的[IP地址]:" IP
if [ "${IP}" == "" ]
then
        echo "未输入IP,退出"
        exit 0
fi
read -p "输入节点的(主机名):" HOST_NAME
if [ "${HOST_NAME}" == ]
then
        echo "未输入主机名,退出"
        exit 0
fi
/bin/bash install_modify_mariadb.sh ${HOST_NAME} ${IP} ${PASSWORD}
#rm -rf install_modify_mariadb.sh
#双节点模式(主从)
elif [ "${1}" == "ms" ]
then
echo "mariadb主从架构部署--->"
read -p "数据库root密码:" PASSWORD
read -p "主节点master的[IP地址]:" IP1
read -p "主节点master的(主机名):" HOSTNAME1
read -p "从节点slave的[IP地址]:" IP2
read -p "从节点slave的(主机名):" HOSTNAME2
#本地安装
/bin/bash install_modify_mariadb.sh ${HOSTNAME1} ${IP1} ${PASSWORD}
/bin/bash master_conf.sh
#远程安装
scp install_modify_mariadb.sh ${IP2}:/tmp
ssh ${IP2} "/bin/bash /tmp/install_modify_mariadb.sh ${HOSTNAME2} ${IP2} ${PASSWORD}"
scp slave_conf.sh ${IP2}:/tmp
ssh ${IP2} "/bin/bash /tmp/slave_conf.sh"
#本地执行主节点脚本
rtn=$(/bin/bash master_mariadb.sh ${PASSWORD} ${IP2})
echo "主节点状态信息:${rtn}"
mysqlbin=$(echo ${rtn}|awk '{print $1}')
position=$(echo ${rtn}|awk '{print $2}')
#远程执行从脚本
scp slave_mariadb.sh ${IP2}:/tmp/
ssh ${IP2} "/bin/bash /tmp/slave_mariadb.sh ${PASSWORD} ${IP1} ${mysqlbin} ${position}"
### 主主架构
elif [ "${1}" == "mm" ]
then
echo "mariadb主主架构部署--->"
read -p "数据库root密码:" PASSWORD
read -p "主节点master1的[IP地址]:" IP1
read -p "主节点master1的(主机名):" HOSTNAME1
read -p "主节点master2的[IP地址]:" IP2
read -p "主节点master2的(主机名):" HOSTNAME2
#本地安装
/bin/bash install_modify_mariadb.sh ${HOSTNAME1} ${IP1} ${PASSWORD}
/bin/bash master_conf.sh
#远程安装
scp install_modify_mariadb.sh ${IP2}:/tmp
ssh ${IP2} "/bin/bash /tmp/install_modify_mariadb.sh ${HOSTNAME2} ${IP2} ${PASSWORD}"
scp slave_conf.sh ${IP2}:/tmp 
ssh ${IP2} "/bin/bash /tmp/slave_conf.sh"
#本地执行主节点脚本
rtn=$(/bin/bash master_mariadb.sh ${PASSWORD} ${IP2})
echo "主节点master1状态信息:${rtn}"
mysqlbin=$(echo ${rtn}|awk '{print $1}')
position=$(echo ${rtn}|awk '{print $2}')
#远程执行从脚本
scp slave_mariadb.sh ${IP2}:/tmp/
ssh ${IP2} "/bin/bash /tmp/slave_mariadb.sh ${PASSWORD} ${IP1} ${mysqlbin} ${position}"
scp master_mariadb.sh ${IP2}:/tmp/
rtn=$(ssh ${IP2} "/bin/bash /tmp/master_mariadb.sh ${PASSWORD} ${IP1}")
echo "主节点master2状态信息:${rtn}"
mysqlbin=$(echo ${rtn}|awk '{print $1}')
position=$(echo ${rtn}|awk '{print $2}')
/bin/bash slave_mariadb.sh ${PASSWORD} ${IP2} ${mysqlbin} ${position}
fi

标签:bin,IP2,PASSWORD,主主主备,echo,centos7,sh,mariadb
来源: https://www.cnblogs.com/liwanliangblog/p/16550184.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有