mysql mongodb Docker安装脚本

1. MySQL yum安装5.7.44版本脚本

#!/bin/bash
. /etc/init.d/functions
COLOR='echo -e \E[01;31m'
END='\E[0m'
MYSQL_ROOT_PASSWORD='Dxj123!@#'

install_mysql(){
$COLOR"开始安装MySQL数据库..."$END
wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm' || echo 'rpm文件下载失败'
rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y mysql-community-server || echo 'MySQL安装失败'
cat > /etc/my.cnf <<EOF
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
port=13306
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
datadir=/opt/mysql    #数据库数据存放目录
socket=/opt/mysql/mysql.sock  #指定服务端socket文件位置

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0    #禁止使用符号链接访问数据库文件,避免因文件路径误操作或恶意攻击导致数据泄露‌

log-error=/var/log/mysqld.log       #错误日志路径
pid-file=/var/run/mysqld/mysqld.pid  #pid文件路径

sql_mode=''  
character-set-server=utf8  #指定服务端字符集为utf8
default-time_zone='+8:00'  #指定MySQL时区为东八区(北京时间

max_connections=1024     #设置最大并发连接数为1024,限制同时连接到数据库的客户端数量,防止资源耗尽‌
max_connect_errors=1500  #定义单个客户端允许的最大连接错误次数(超过此值将临时阻止该主机连接),用于防范暴力破解
skip-host-cache   #禁用DNS主机名缓存功能,开启该选项后,MySQL服务端将不再缓存客户端的DNS解析结果,每次客户端连接时都会重新进行DNS反向查询‌,当客户端IP与主机名的映射关系发生变更时(例如动态IP环境或DNS记录更新),禁用缓存可避免因旧缓存导致连接异常或延迟‌。

#MySQL客户端连接时的‌DNS反向解析‌主要用于以下两个核心环节:

#一、解析目标:‌客户端IP对应的主机名‌
#当客户端通过IP地址连接到MySQL服务端时,服务端会主动通过DNS反向查询(PTR记录)获取该IP对应的‌完整域名(FQDN)‌‌15。例如:客户端IP 192.168.1.100 解析为 client-host.example.com。

#二、解析目的:‌权限验证与访问控制‌
‌#匹配用户权限‌
#MySQL的访问权限规则(如mysql.user表中的权限记录)可能基于主机名定义(如'user'@'client-host.example.com')。服务端需通过反向解析确认客户端是否符合权限规则中的主机名约束‌。

‌#防止DNS欺骗‌
#解析完成后,MySQL会再次将获得的主机名通过‌正向解析‌转换为IP地址,并与原始客户端IP比对,确保解析结果未被篡改‌5。(若两次结果不一致,则拒绝连接)

[client]
socket=/opt/mysql/mysql.sock
EOF

systemctl enable --now mysqld &&  action "MySQL数据库安装完成" 
#过滤mysql初始默认密码
MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /var/log/mysqld.log`

#修改mysql密码为指定密码
mysqladmin -uroot  -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD
}

install_mysql

2. Centos7安装mongodb二进制包脚本

#!/bin/bash

MONGODB_FILE=mongodb-linux-x86_64-rhel70-4.2.8.zip
MONGODB_VERSOIN=rhel70-4.2.8
MONGODB_DIR=/mongodb
INSTALL_DIR=/opt
PORT=27017

. /etc/os-release

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}


system_prepare () {
    [ -e $INSTALL_DIR/mongodb ] && { color  "MongoDB 数据库已安装!" 1;exit; }
    
    if [ -e /etc/rc.local ];then
        echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
    else
        cat > /etc/rc.local <<EOF
#!/bin/bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
EOF
    fi
    chmod +x /etc/rc.local   
}


install_mongodb () {
    id mongod &> /dev/null || useradd -m -s /bin/bash mongod
    unzip  $MONGODB_FILE -d $INSTALL_DIR
    mv $INSTALL_DIR/mongodb-linux-x86_64-${MONGODB_VERSOIN} $INSTALL_DIR/mongodb
}

config_mongodb(){
    ln -s /opt/mongodb/bin/* /usr/local/bin/
    mkdir -p $INSTALL_DIR/mongodb/{db,log}
    cat > $INSTALL_DIR/mongodb/mongodb.conf <<EOF
#端口
port=27017
#数据库存文件存放目录
dbpath= /opt/mongodb/db
#日志文件存放路径
logpath= /opt/mongodb/log/mongodb.log
#使用追加的方式写日志
logappend=true
#以守护进程的方式运行,创建服务器进程
fork=true
#最大同时连接数
maxConns=100
#不启用验证
#noauth=true
#开启用户验证
auth=true
#每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。启用预写事务日志机制,所有数据写入操作会先记录到journal日志文件,系统异常宕机后,可通过重放journal日志确保数据完整性和一致性‌
journal=true
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
#存储引擎有mmapv1、wiretiger、mongorocks,指定使用WiredTiger存储引擎支持文档级并发控制、压缩算法和检查点机制‌,能更高效处理高并发写入场景‌
storageEngine=wiredTiger
#这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
bind_ip = 0.0.0.0
#配置WiredTiger引擎使用的内部缓存大小为12GB,缓存用于存储高频访问的数据和索引,直接影响查询性能‌
wiredTigerCacheSizeGB=12
EOF

cat  > /etc/systemd/system/mongod.service << EOF
[Unit]
Description=MongoDB database server
After=network.target
#After=syslog.target

[Service]
Type=forking
# 根据自己安装的目录进行填写
ExecStart=/opt/mongodb/bin/mongod --wiredTigerCacheSizeGB 12  -f /opt/mongodb/mongodb.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
    chown -R  mongod.mongod $INSTALL_DIR/mongodb/
    chmod +x $INSTALL_DIR/mongodb/bin/*
}

start_mongodb() { 
    mongod -f /opt/mongodb/mongodb.conf &>/dev/null
    if [ $?  -eq 0 ];then  
        echo 
        color "MongoDB 安装启动完成!" 0
    else
        color "MongoDB 安装失败!" 1
        exit
    fi 
}

system_prepare 
install_mongodb
config_mongodb
start_mongodb

3.一键安装Docker脚本

#!/bin/bash

DOCKER_VERSION="20.10.20"


COLOR_SUCCESS="echo -e \\033[1;32m"
COLOR_FAILURE="echo -e \\033[1;31m"
END="\033[m"

. /etc/os-release
UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~3-0~${ID}-`lsb_release -cs`"
#UBUNTU_DOCKER_VERSION="5:20.10.9~3-0~`lsb_release -si`-`lsb_release -cs`"
#UBUNTU_DOCKER_VERSION="5:19.03.14~3-0~lsb_release -si-`lsb_release -cs`"




color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}


install_docker (){
    if [ $ID = "centos" ];then
	yum install -y yum-utils
	yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	yum install  -y docker-ce-$DOCKER_VERSION docker-ce-cli-$DOCKER_VERSION || { color "Base,Extras的yum源失败,请检查yum源配置" 1;exit; }
    fi
    if [ $ID = "ubuntu" ];then
        apt-get	update || { color "更新包索引失败" 1 ; exit 1; }  
        apt-get  -y install  ca-certificates curl gnupg || { color "安装相关包失败" 1 ; exit 2;  } 
        curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
        sudo chmod a+r /etc/apt/keyrings/docker.gpg		
        echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
	sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
	sudo apt-get update
        sudo apt -y  install docker-ce=${UBUNTU_DOCKER_VERSION} docker-ce-cli=${UBUNTU_DOCKER_VERSION}
    fi
    if [ $? -eq 0 ];then
        color "安装软件包成功"  0
    else
        color "安装软件包失败,请检查网络配置" 1
        exit
    fi
        
}

config_docker (){
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
          "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
          "https://docker.m.daocloud.io",
          "https://hub-mirror.c.163.com",
          "https://mirror.baidubce.com",
          "https://your_preferred_mirror",
          "https://dockerhub.icu",
          "https://docker.registry.cyou",
          "https://docker-cf.registry.cyou",
          "https://dockercf.jsdelivr.fyi",
          "https://docker.jsdelivr.fyi",
          "https://dockertest.jsdelivr.fyi",
          "https://mirror.aliyuncs.com",
          "https://dockerproxy.com",
          "https://mirror.baidubce.com",
          "https://docker.m.daocloud.io",
          "https://docker.nju.edu.cn",
          "https://docker.mirrors.sjtug.sjtu.edu.cn",
          "https://docker.mirrors.ustc.edu.cn",
          "https://mirror.iscas.ac.cn",
          "https://docker.rainbond.cc"
          ],
"data-root": "/opt/docker/lib/docker",
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"log-opts": {
   "max-size": "300m",
   "max-file": "2"
 },
"live-restore": true
}
EOF
    systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker
    docker version && color "Docker 安装成功" 0 ||  color "Docker 安装失败" 1
}

install_docker
config_docker
posted @ 2025-04-09 17:52  Shine、  阅读(24)  评论(0)    收藏  举报