<<INFO
AUTHOR:运维@小兵
DATE:2021-06-26
DESCRIBE:Docker方式安装MySQL
SYSTEM:CentOS7/RedHat7
WARNING:
MODIFY:
INFO
set -e
MYSQL_PORT="3306"
MYSQL_DATA_DIR="/var/mysql"
MYSQL_CONTAINER_NAME="mysql"
MYSQL_ROOT_PASSWORD="123456"
HARBOR_USER="admin"
HARBOR_PWD="12345"
HARBOR_URL="192.168.1.2"
IMAGE_ADDR="192.168.1.2/common/mysql:5.7.32"
#环境检查
Check_Env(){
echo "INFO:Begin Check Env..."
local pid=$(lsof -i:${MYSQL_PORT} -t)
if ss -nutlp | grep -w ':${MYSQL_PORT}\b' &> /dev/null;then
echo "ERROR:${MYSQL_PORT} Is Used" && exit 1
fi
[[ -d ${MYSQL_DATA_DIR} ]] && echo "ERROR:${MYSQL_DATA_DIR} Is Already" && exit 1
if ! command -v docker &> /dev/null;then
echo "ERROR:Please Install Docker" && exit 1
fi
}
#配置docker信任
Config_Docker(){
if ! docker info | grep -w "${HARBOR_IP}" &> /dev/null;then
mkdir -p /etc/docker
if [[ -f /etc/docker/daemon.json ]];then
[[ ! -f /etc/docker/daemon.json.bak ]] && cp /etc/docker/daemon.json{,.bak}
fi
tee /etc/docker/daemon.json << EOF
{
"registry-mirrors":["https://7bezldxe.mirror.aliyuncs.com/"],
"log-driver":"json-file","log-opts":{"max-size":"5m"},
"storage-driver":"overlay2",
"storage-opts":["overlay2.override_kernel_check=true"],
"insecure-registries": ["${HARBOR_IP}","${HARBOR_IP}:80"]
}
EOF
systemctl restart docker
fi
}
#拉取镜像
Pull_Image(){
echo "INFO:Begin Pull Image ${IMAGE_ADDR}..."
Config_Docker
docker login -u ${HARBOR_USER} -p ${HARBOR_PWD} ${HARBOR_URL}
docker pull ${IMAGE_ADDR}
}
#获取MySQL的配置文件
Get_Mysql_Conf(){
echo "INFO:Begin Get MySQL Conf..."
local temp_container_name=$(date "+%Y%m%d%H%M")
docker run -itd --name ${temp_container_name} ${IMAGE_ADDR}
docker cp ${temp_container_name}:/etc/mysql/mysql.conf.d/mysqld.cnf /tmp/
docker rm -f ${temp_container_name}
}
#安装MySQL容器
Install_Mysql(){
Check_Env
Pull_Image
Get_Mysql_Conf
echo "INFO:Begin Create Mysql Container..."
mkdir -p ${MYSQL_DATA_DIR}/{data,conf}
mv /tmp/mysqld.cnf ${MYSQL_DATA_DIR}/conf/
docker run -d --name=${MYSQL_CONTAINER_NAME} --restart unless-stopped \
-v ${MYSQL_DATA_DIR}/data:/var/lib/mysql \
-v ${MYSQL_DATA_DIR}/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-p ${MYSQL_PORT}:3306 \
-e MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}" \
${IMAGE_ADDR} \
--default-authentication-plugin=mysql_native_password \
--character-set-server=utf8
sleep 5
if ss -nutlp | grep -w ":${MYSQL_PORT}\b" &> /dev/null;then
echo "INFO:${MYSQL_CONTAINER_NAME} Container Create Success"
else
echo "ERROR:${MYSQL_CONTAINER_NAME} Container Create Fail" && exit 1
fi
}
#卸载MySQL
Uninstall_Mysql(){
read -p "数据无价,请确认是否执行卸载,(yes/no)": select
case ${select} in
yes)
if docker ps | egrep -w "\b${MYSQL_CONTAINER_NAME}$" &> /dev/null;then
docker rm -f ${MYSQL_CONTAINER_NAME}
rm -rf ${MYSQL_DATA_DIR}
echo "INFO:${MYSQL_CONTAINER_NAME} Container uninstall Success" && exit 0
else
echo "WARN:${MYSQL_CONTAINER_NAME} Container Is Without" && exit 0
fi
;;
no)
exit 0;;
*)
echo "ERROR:Input Is Invalid" && exit 1
esac
}
######################主程序######################
[[ $# -ne 1 ]] && echo "ERROR:Invalid Param!!! eg:bash $0 install or uninstall" && exit 1
case $1 in
install)
Install_Mysql;;
uninstall)
Uninstall_Mysql;;
*)
echo "ERROR:Invalid Param!!! eg:bash $0 install or uninstall" && exit 1
esac