MySQL8 一键部署

#!/bin/bash

定义变量

mysql_download_url=https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

mysql_package_name=mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

mysql_dec_name=mysql-8.0.33-linux-glibc2.12-x86_64

mysql_download_dir="/usr/local/src"

mysql_base_dir="/usr/local/mysql"

mysql_data_dir="/data/mysql"

mysql_root_password=!@#123QAz

ck_ok()

{

if [ $? -ne 0 ]

then

echo "$1 error."

exit 1

fi

}

dependon_install()

{

if which yum >/dev/null 2>&1

then

for pkg in "$@"

do

if ! rpm -q ${pkg} >/dev/null 2>&1

then

sudo yum install -y ${pkg}

else

echo "${pkg}已安装"

fi

done

fi

if which apt >/dev/mull 2>&1

then

for pkg in "$@"

do

if ! dpkg -l ${pkg} >/dev/null 2>&1

then

sudo apt install -y ${pkg}

else

echo "${pkg}已安装"

fi

done

fi

}

download_mysql()

{

cd ${mysql_download_dir}

if [ -f ${mysql_package_name} ]

then

echo "当前目录已经存在mysql安装包"

echo "检测MD5"

file_md5=`md5sum {mysql_package_name} \| awk '{print 1}'`

if [ ${file_md5} == '0bb9fd978d8b122d7846efc37884c0bb' ]

then

return 0

else

echo "file ${mysql_package_name} check failed"

/bin/mv -f {mysql_package_name} {mysql_package_name}.old

fi

fi

dependon_install wget

ck_ok "wget安装"

sudo wget ${mysql_download_url}

ck_ok "下载mysql"

}

install_mysql()

{

cd /usr/local

if [ -d ${mysql_base_dir} ]

then

echo "${mysql_base_dir}已存在,移走"

sudo /bin/mv -f {mysql_base_dir} {mysql_base_dir}.old

fi

sudo tar Jxf {mysql_download_dir}/{mysql_package_name}

ck_ok "解压mysql压缩包"

sudo /bin/mv -f ${mysql_dec_name} mysql

if id mysql &>/dev/null

then

echo "系统已经创建了mysql用户,跳过创建"

else

echo "创建mysql用户"

sudo useradd -s /sbin/nologin mysql

fi

ck_ok "创建mysql用户"

if [ -d ${mysql_data_dir} ]

then

echo "${mysql_data_dir}已存在,移走"

sudo /bin/mv -f {mysql_data_dir} {mysql_data_dir}.old

fi

echo "创建MySQL data_dir"

sudo mkdir -p ${mysql_data_dir}

sudo chown -R mysql ${mysql_data_dir}

if [ -f ${mysql_base_dir}/my.cnf ]

then

echo "MySQL配置文件已存在,移走"

sudo /bin/mv -f {mysql_base_dir}/my.cnf {mysql_base_dir}/my.cnf.old

fi

echo "创建MySQL配置文件my.cnf"

cat > /tmp/my.cnf <<EOF

mysqld

user = mysql

port = 3306

server_id = 1

basedir = ${mysql_base_dir}

datadir = ${mysql_data_dir}

socket = /tmp/mysql.sock

pid-file= ${mysql_data_dir}/mysqld.pid

log-error = ${mysql_data_dir}/mysql.err

EOF

sudo /bin/mv /tmp/my.cnf ${mysql_base_dir}/my.cnf

dependon_install ncurses-compat-libs libaio-devel

sudo {mysql_base_dir}/bin/mysqld --console --datadir={mysql_data_dir} --initialize-insecure --user=mysql

ck_ok "初始化"

if [ -f /usr/lib/systemd/system/mysqld.service ]

then

echo "mysql服务启动脚本已存在,移走"

sudo /bin/mv -f /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service.old

fi

echo "创建mysql服务启动脚本"

cat > /tmp/mysqld.service <<EOF

Unit

Description=MySQL server

After=network.target

Install

WantedBy=multi-user.target

Service

Type=forking

TimeoutSec=0

PermissionsStartOnly=true

ExecStart={mysql_base_dir}/bin/mysqld --defaults-file={mysql_base_dir}/my.cnf --daemonize $OPTIONS

ExecReload=/bin/kill -HUP -$MAINPID

ExecStop=/bin/kill -QUIT $MAINPID

KillMode=process

LimitNOFILE=65535

Restart=on-failure

RestartSec=10

RestartPreventExitStatus=1

PrivateTmp=false

EOF

sudo /bin/mv /tmp/mysqld.service /usr/lib/systemd/system/mysqld.service

sudo systemctl unmask mysqld

sudo systemctl daemon-reload

sudo systemctl enable mysqld

sudo systemctl start mysqld

ck_ok "启动mysql"

{mysql_base_dir}/bin/mysqladmin -S/tmp/mysql.sock -uroot password "{mysql_root_password}"

ck_ok "设置mysql密码"

unlink /usr/bin/mysql &>/dev/null

ln -s /usr/local/mysql/bin/mysql /usr/bin

}

main()

{

download_mysql

install_mysql

}

main

相关推荐
御控工业物联网5 分钟前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU1 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689762 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
九皇叔叔3 小时前
【7】PostgreSQL 事务
数据库·postgresql
kk在加油3 小时前
Mysql锁机制与优化实践以及MVCC底层原理剖析
数据库·sql·mysql
Kookoos3 小时前
ABP VNext + Cosmos DB Change Feed:搭建实时数据变更流服务
数据库·分布式·后端·abp vnext·azure cosmos
hello 早上好3 小时前
MsSql 其他(2)
数据库·mysql
高压锅_12204 小时前
SQLAlchemy数据库连接密码特殊字符处理完全指南
数据库·mysql·django·sqlalchemy