二进制安装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