1. 程式人生 > 其它 >二進位制安裝MySQL 5.7

二進位制安裝MySQL 5.7

#!/bin/bash
#by panwei
#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