说明:
在项目的实施过程中,多次遇到安装MySQL的工作,尤其在内网环境下,无法使用在线yum源,只能使用源码或采用rpm离线安装的方式进行安装,在安装过程中会遇到各种各样的问题,小编特地就rpm离线安装方式进行了整理及验证,并通过shell脚本的方式实现一键安装。使用此脚本可以实现一键非交互式安装。
脚本使用方式如下:
-
将安装包上传到服务器指定目录,如/opt/software
-
解压软件包
tar -xvf centos6_mysql-5.7.40.tar
-
进入安装目录
cd centos6_mysql-5.7.40
-
目录内容
-
阅读README.txt
******************************************************************
* Author :wenhua.dong *
* E-mail : wenhua.dong@aliyun.com *
* 如有问题请联系作者。 *
******************************************************************
脚本执行方式如下:
1)sh install.sh "123456" --密码
2)sh install.sh "123456" "9999" --密码+端口
3)sh install.sh "123456" "9999" "/data/mysql" --密码+端口+数据路径
4)sh install.sh --使用默认值 密码:123456 端口:33066 数据路径:/data/mysql (默认值可以通过手动修改install.sh脚本的值来指定)
默认值:
#默认的端口
DEFAULT_PORT="33066"
#默认的数据目录
DEFAULT_DATA_DIR="/data/mysql"
#默认的数据密码
DEFAULT_PASS="123456"
#默认的密码长度
PASS_LENGTH=6
-
脚本内容:
#!/bin/bash
# by dongwenhua
# centos 6 rpm方式安装MySQL
# 注:
# mysql-community-client 客户端
# mysql-community-devel 开发库
# mysql-community-common 服务端和客户端的公共文件
# mysql-community-embedded 嵌入式
# mysql-community-serve 服务端
# mysql-community-test 测试组件
# mysql-community-libs 共享库
# mysql-community-libs-compat MySQL之前版本的共享兼容库
#手动卸载重新安装:
# /etc/init.d/mysqld stop
# rpm -e mysql-community-server
# rpm -e mysql-community-client
# rpm -e mysql-community-devel
# rpm -e mysql-community-libs-compat
# rpm -e mysql-community-libs
# rpm -e mysql-community-common
# rm -rf /etc/my.cnf.rpmsave
# rm -rf /var/log/mysqld.log
# rm -rf /data/mysql #数据目录为自己指定的目录,如未指定,默认为/data/mysql
#默认的端口
DEFAULT_PORT="33066"
#默认的数据目录
DEFAULT_DATA_DIR="/data/mysql"
#默认的数据密码
DEFAULT_PASS="123456"
#默认的密码长度
PASS_LENGTH=6
# 输出脚本用法
echo -e "\033[34mUsage: sh $0 {|password | password port| password port data_dir}\033[0m"
echo -e "\033[34mEg: \n 1、sh $0\n 2、sh $0 "123456"\n 3、sh $0 \"123456\" \"3306\"\n 4、sh $0 \"123456\" \"3306\" \"/data/mysql\"\n\033[0m"
# 判断当前服务器是否有正在运行的MySQL
MYSQL_RUNNING_NUM=`ps -ef |grep mysqld|grep -v grep|awk '{print $2}'|wc -l`
if [[ ${MYSQL_RUNNING_NUM} -gt 0 ]]; then
echo -e "\033[5;41;32m检测到有正在运行的MySQL,如需重新安装,请先停止原MySQL服务,并备份数据以免丢失!!! \033[1;m"
for pid in `ps -ef |grep mysqld|grep -v grep|awk '{print $2}'`
do
echo -e "\033[31m正在运行的MySQL的pid为:${pid} \033[0m"
done
exit
fi
# MySQL root 密码
if [[ ! -z $1 ]]; then
MY_PASS=$1
# echo $MY_PASS
else
MY_PASS=${DEFAULT_PASS}
fi
# MySQL root 端口号
if [[ ! -z $2 ]]; then
MY_PORT=$2
# echo $MY_PORT
else
MY_PORT=${DEFAULT_PORT}
fi
# MySQL 数据存放目录
if [[ ! -z $3 ]]; then
[[ ! -f $3 ]] && {mkdir -p $3; MY_DIR=$3;} || { echo -e "\033[31m 目录 $3 已存在,请更换目录 \033[0m";exit; }
else
[[ ! -f "${DEFAULT_DATA_DIR}" ]] && { mkdir -p ${DEFAULT_DATA_DIR}; MY_DIR="${DEFAULT_DATA_DIR}"; } || { echo -e "\033[31m 目录 ${DEFAULT_DATA_DIR} 已存在,请更换目录 \033[0m"; exit; }
fi
# 1、关闭selinux 防火墙
echo -e "\033[32m 关闭防火墙 \033[0m"
service iptables stop && chkconfig iptables off
echo -e "\033[32m 关闭selinux \033[0m"
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 2、卸载centos6自带MySql
for i in `rpm -qa |grep -i mysql`
do
echo -e "\033[32m 开始卸载${i} \033[0m"
rpm -e --nodeps $i
done
# 3、删除MySQL遗留文件
[[ -d /var/lib/mysql ]] && { echo -e "\033[32m 删除目录【/var/lib/mysql】 \033[0m"; rm -rf /var/lib/mysql; }
[[ -f /etc/my.cnf ]] && { echo -e "\033[32m 删除文件【/etc/my.cnf】 \033[0m"; rm -rf /etc/my.cnf; }
[[ -f /etc/my.cnf.rpmsave ]] && { echo -e "\033[32m 删除文件【/etc/my.cnf.rpmsave】 \033[0m"; rm -rf /etc/my.cnf.rpmsave; }
[[ -f /var/log/mysqld.log ]] && { echo -e "\033[32m 删除文件【/var/log/mysqld.log】 \033[0m"; rm -rf /var/log/mysqld.log; }
# 4、安装MySql
CURRENT_DIR=$(cd $(dirname $0); pwd)
cd ${CURRENT_DIR}
rpm -qa |grep libaio
if [[ $? -ne 0 ]]; then
echo -e "\033[32m 安装MySQL5.7.40 依赖软件包【libaio】 \033[0m"
rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
fi
echo -e "\033[32m 安装MySQL5.7.40 软件包 \033[0m"
rpm -ivh mysql-community-common-5.7.40-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.40-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.40-1.el6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.40-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.40-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.40-1.el6.x86_64.rpm --force --nodeps
# 5、拷贝配置文件
echo -e "\033[32m 拷贝MySQL模板配置文件到/etc/my.cnf \033[0m"
cp -rf conf/my.cnf.template /etc/my.cnf
sed -i "s#^datadir.*#datadir=${MY_DIR}#g" /etc/my.cnf
sed -i "s#^port.*#port=${MY_PORT}#g" /etc/my.cnf
# 6、启动服务
echo -e "\033[32m 启动MySQL服务 \033[0m"
/etc/init.d/mysqld start && chkconfig mysqld on
# 7、修改密码
LOG_PASS=`grep 'temporary password' /var/log/mysqld.log|awk -F"root@localhost:" '{print $NF}'`
OLD_PASS=`echo ${LOG_PASS}`
mysql -uroot -P${MY_PORT} -p${OLD_PASS} --connect-expired-password -e "set global validate_password_policy=LOW;set global validate_password_length=${PASS_LENGTH};alter user 'root'@'localhost' identified by \"${MY_PASS}\";flush privileges;"
# 8、安装完成
mysql -uroot -P${MY_PORT} -p${MY_PASS} -e "show databases;"
if [[ $? -eq 0 ]]; then
echo -e "\033[32m MySQL安装完成,数据目录:${MY_DIR}请使用: mysql -uroot -P${MY_PORT} -p${MY_PASS} 命令进行连接\033[0m"
else
echo -e "\033[5;41;32m MySql安装失败,请排查错误信息,重新安装请参考脚本15行手动卸载后,重新执行脚本 \033[1;m"
fi