二进制安装MySQL 5.7 ,并设置systemd开机自启

 

====== 这里推荐直接复制脚本执行即可 ======

 

#!/bin/bash
#by mr.pan
#auto_install_mysql 5.7.37
#2022年4月2日11:18:35
##注意:脚本没有做更多的健壮性检验,若执行过程中报错,可根据末尾处的提示进行环境清理。
################################

#定义环境变量
MyPackage=mysql-5.7.37-linux-glibc2.12-x86_64
MyDir=/usr/local
DataDir=/data/mysql57
RunInit=/etc/init.d

#准备工作
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#关闭selinux
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
setenforce 0
#
#获取mysql二进制安装包
# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
#判断mysql是否存在
CHECK_MYSQL1=$(netstat -tnlp |grep mysql |grep -aicwE 3306)
CHECK_MYSQL2=$(find /etc/init.d/ -name mysqld |wc -l)

if [ $CHECK_MYSQL1 -eq 0 -a $CHECK_MYSQL2 -eq 0 ];then

#把mysql二进制包上传至/data目录,也可是其他目录,自行选择吧,值得注意的是二进制包必须与此脚本在同一目录下。
#解压二进制包,此处我解压到/usr/local/目录下
echo -e '\033[32m-----------------------------开始解压二进制包文件,请耐心等待...\033[0m'
tar -zxvf ${MyPackage}.tar.gz -C $MyDir >/dev/null
ls -lh $MyDir/$MyPackage -d
ls -lh $MyDir/$MyPackage
echo -e '\033[32m-----------------------------二进制包文件提取完成,开始初始化配置!\033[0m'
sleep 2
#重命名包名
cd $MyDir
mv $MyPackage mysql57/
cd mysql57/
#添加mysql用户
useradd -M -s /sbin/nologin mysql
#创建数据目录
mkdir -p $DataDir/
#对数据目录授权,更改目录的所属用户
chown -R mysql. $DataDir/
#复制mysql.server启动文件到/etc/init.d/目录下
cp support-files/mysql.server $RunInit/mysqld
#给启动文件授权
chmod +x $RunInit/mysqld
#修改启动文件参数
sed -i "s#^basedir=#basedir=/usr/local/mysql57/#g" $RunInit/mysqld
sed -i "s#^datadir=#datadir=/data/mysql57/#g" $RunInit/mysqld
#alias别名
#alias mysql='/usr/local/mysql57/bin/mysql'
echo "alias mysql='/usr/local/mysql57/bin/mysql'" >> ~/.bashrc
source ~/.bashrc
#
#配置my.cnf文件
cat > $MyDir/mysql57/my.cnf <<-EOF
[mysqld]
skip-grant-tables
#server-id=1
#log-bin=panwei-bin
basedir=/usr/local/mysql57
datadir=/data/mysql57
user=mysql
port=3306
pid-file=/data/mysql57/mysql.pid
socket=/data/mysql57/mysql.sock
[mysqld_safe]
log-error=/data/mysql57/mysql.log
[client]
port=3306
socket=/data/mysql57/mysql.sock
EOF
#
#初始化
./bin/mysqld --initialize --user=mysql --basedir=$MyDir/mysql57/ --datadir=$DataDir/
#./bin/mysql_ssl_rsa_setup --datadir=$DataDir/
echo -e '\033[33m----------------------------mysql初始化完成,请注意留存生成的临时密码!\033[0m'
sleep 3
echo
#
#设置systemd方式启动
cat > /usr/lib/systemd/system/mysql.service <<-EOF
[Unit]
Description=MySQL 5.7.37 Database Server
Documentation=https://www.mysql.com
After=syslog.target
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/etc/init.d/mysqld start
ExecReload=/etc/init.d/mysqld restart
ExecStop=/etc/init.d/mysqld stop
TimeoutSec=300
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
##
echo -e '\033[32m-----------------------------启动MySQL...\033[0m'
ls -lh /usr/lib/systemd/system/mysql.service
#启动mysql
#$RunInit/mysqld start
#/etc/init.d/mysqld start
systemctl start mysql.service
systemctl enable mysql.service
systemctl status mysql.service
#关闭mysql
#/etc/init.d/mysqld stop
sleep 2
#查看mysql进程
ps -ef|grep mysql
echo -e '\033[32m-----------------------------mysql启动完成,请手动执行'source ~/.bashrc'使环境生效,然后执行'mysql'命令查看是否正常免密登入!\033[0m'
#测试中遇到一个报错:Can't connect to local MySQL server through socket '/tmp/mysql.sock'
#百思不得其解,最终我做了一个软链接解决了
ln -vs $DataDir/mysql.sock /tmp/mysql.sock
else
echo -e '\033[31m-----------------------------MySQL服务已存在,跳过安装!\033[0m'
fi

#清理环境
#rm -rf /usr/local/mysql57/ && rm -rf /data/mysql57/ && rm -rf /etc/init.d/mysqld && rm -rf /tmp/mysql.sock && rm -rf /usr/lib/systemd/system/mysql.service && rm -rf /etc/systemd/system/multi-user.target.wants/mysql.service && userdel -r mysql

 

posted @ 2022-05-22 14:45  i潘小潘  阅读(888)  评论(0编辑  收藏  举报