mysql在Linux环境下shell脚本一键式安装

最近,遇见一个需求,项目中需要在linux环境下一键部署。这其中涉及到mysql安装,设置密码,用户授权,数据初始化,启动服务。网上找了很多文档,发现写的都不是很全面,踩了不少坑,发现mysql版本5.6和5.7有一些区别,最后终于实现了该需求。

环境:centos7及以上,mysql5.7.14

mysql5.7安装需要依赖libaio包,也可能需要依赖其它包,这个根据安装时候的提示,具体情况具体对待。

 

项目目录

package下是mysql安装所需文件,web目录是项目文件

 

shell脚本

mysql.sh

#! /bin/bash
#mysql install shell

BASE_DIR=$(cd "$(dirname "$0")"; pwd)
PACKAGE_PATH=${BASE_DIR}
PARENT_PATH=$(dirname "${PACKAGE_PATH}")

#define uninstall mysql
function uninstallOldMysql {
        for item in `rpm -qa | grep -i mysql`
        do
                  rpm -e --nodeps ${item}
          done
          for item in `find / -name mysql`
          do
                    rm -rf ${item}
            done
    }

#mysql is running,if running,return 1,else return 0
function judgeMysqlRunning() {
        port=`netstat -nlt | grep 3306 | wc -l`
        if [ $port -eq 1 ]; then
                  return 0
          else
                    return 1
        fi
}

#stop running mysql
function stopRunningMysql() {
        service mysql stop
}

echo `date "+%Y-%m-%d %T"`    "******start install mysql......"
service iptables stop
setenforce 0
echo `date "+%Y-%m-%d %T"`    "---->>uninstall old mysql......"
judgeMysqlRunning
if [ $? -eq 0 ]; then
          stopRunningMysql
fi
uninstallOldMysql
rm -rf /root/.mysql_secret
rm -rf /usr/my.cnf
rm -rf /var/lib/mysql*
rm -rf /var/log/mysqld.log
rm -rf /var/run/mysqld
sleep 2

echo `date "+%Y-%m-%d %T"`    "---->>finish delete mysql"

cd $PACKAGE_PATH
echo `date "+%Y-%m-%d %T"`    "---->>install mysql rpm......"
rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
rpm -ivh mysql-community-common-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.14-1.el7.x86_64.rpm
echo `date "+%Y-%m-%d %T"`    "---->>mysql rpm finished"

chown -R mysql:mysql /var/log/mysqld.log
chown -R mysql:mysql /var/run/mysqld

mysqld --initialize
sleep 2
chown -R mysql:mysql /var/lib/mysql

service mysqld start

init_passwd=`sudo grep "A temporary password" /var/log/mysqld.log| awk '{ print $NF}'`
echo init password:${init_passwd}

initpass.sh

init_passwd=`sudo grep "A temporary password" /var/log/mysqld.log| awk '{ print $NF}'`
sleep 2
mysql --connect-expired-password -uroot -p${init_passwd} << EOF
set password=password('Ale_123');
exit
EOF
echo `date "+%Y-%m-%d %T"`    "******install mysql finished"
sleep 2

mysql -uroot -p"Ale_123" << EOF
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Ale_123' WITH GRANT OPTION;
flush privileges;
exit
EOF

initdb.sh

mysql --connect-expired-password -uroot -p"Ale_123" <./init.sql

然后,集成到一键执行的文件中

install.sh

#! /bin/bash
BASE_DIR=$(cd "$(dirname "$0")"; pwd)

echo ${BASE_DIR}

cd ${BASE_DIR}/package
./mysql.sh

cd ${BASE_DIR}
./initpass.sh
./initdb.sh

cd ${BASE_DIR}/web
./stop.sh
./startup_mysql.sh

最后,提供一些有用的shell命令,仅供参考

install.conf文件内容

conf_file=/home/package/install.conf
user_mysql_passwd=`sed -e '/^[ ]*define_passwd[ ]*=/!d;s/.*=[ ]*//' ${conf_file}`
mysql_passwd=${user_mysql_passwd:-Ale_123}//获取自定义配置文件的密码,没有会默认Ale_123

mysqladmin -uroot -p${init_passwd} password \"${mysql_passwd}\" //mysqladmin在5.6版本的mysql可以使用修改密码

echo "skip-grant-tables" >> /etc/my.cnf  //把字符放到my.cnf的最后

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值