一、shell脚本自动部署mysql
#!/bin/env bash
#注意:
#(1)把安装包放入/root/my下面,脚本也放入/root/my,脚本名称设置为setup.sh,脚本名别带上mysql字样,否则第一步的杀死进程会导致脚本终端
#(2)执行脚本方式为:bash -x /root/my/setup.sh &> /root/setup.sh
#(3)centos版本为CentOS Linux release 7.9.2009 (Core)
exedir=/root/my
log=/root/mysqlresult.log
exe=$exedir/`ls -l -crt *tar*| awk '{print $9 }'`
function kill()
{
ps -ef | grep mysql|awk -F" " '{print $2}'|xargs kill -9
}
#检查是否安装mariadb,如果安装执行删除
function mariadb()
{
echo
echo "------------------------"
echo "1、检查是否安装mariadb"
yum list installed | grep mariadb
if [ $? -eq 0 ]
then
yum -y remove mariadb*
echo "已删除mariadb"
else
echo "不存在mariadb"
fi
echo "------------------------"
echo
}
function mysqlfile()
{
echo
echo "------------------------"
echo "2、删除所有mysql目录"
find / -name mysql
if [ $? -eq 0 ]
then
find / -name mysql -exec rm -rf {} \;
echo "已删除含有mysql目录"
fi
echo "------------------------"
echo
}
function mysqluser()
{
echo
echo "------------------------"
echo "3、建立mysql用户和mysql用户组"
id mysql
if [ $? -eq 0 ]
then
userdel -r mysql
groupdel mysql
groupadd mysql
useradd -r -g mysql mysql
echo "已删除mysql用户和用户组并重新建立组!"
else
groupadd mysql
useradd -r -g mysql mysql
echo "不存在mysql用户和用户组,重新建立完成!"
fi
echo "------------------------"
echo
}
function jieya()
{
echo
echo "------------------------"
echo "4、解压安装包"
cd $exedir
tar xvf $exe
anzhuagnbao=`ls -l -crt| awk '{print $9 }'|tail -1`
mv $anzhuagnbao /usr/local/
cd /usr/local/
mv $anzhuagnbao mysql
cd /usr/local/mysql
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
cd /usr/local/mysql/bin
yum -y install libaio-devel.x86_64
yum -y install libaio.so.1
yum -y install numactl
yum -y install libstdc++.so.6
yum -y install libnuma.so.1
yum -y install libtinfo.so.5
cd /usr/local/mysql/bin
echo "------------------------"
echo
}
function init()
{
echo
echo "------------------------"
echo "5、初始化"
cd /usr/local/mysql/bin/
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
echo "------------------------"
echo
}
function mycnf()
{
echo
echo "------------------------"
echo "6、修改mysql配置文件"
rm -rf /etc/my.cnf
touch /etc/my.cnf
cat >> /etc/my.cnf <<EOF
[mysqld]
datadir=/usr/local/mysql/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
log-error=/usr/local/mysql/data/error.log
EOF
echo "------------------------"
echo
}
function start()
{
echo "------------------------"
echo "7、启动数据库"
/usr/local/mysql/support-files/mysql.server start
echo "------------------------"
echo
}
function link()
{
echo "------------------------"
echo "8-1、链接mysql命令"
ln -s /usr/local/mysql/bin/mysql /usr/bin
echo "8-2、链接mysql命令"
echo "------------------------"
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
service mysql restart
echo
}
function passwd()
{
pass1=`awk -F' ' '/password/{print $NF}' /usr/local/mysql/data/error.log`
pass2=`awk -F' ' '/A temporary password/{print $NF}' /root/mysqlresult.log`
if [ -z $pass1 ]
then
echo "数据库密码是:$pass2"
else
echo "数据库密码是:$pass1"
fi
}
function login()
{
echo "------------------------"
echo "9、登录数据库修改密码"
loginname=root
mysqlpasswd=`awk -F: '/数据库密码是/{print $NF}' $log`
mysql -hlocalhost -P3306 -u$loginname -p$mysqlpasswd --connect-expired-password -e "
ALTER USER USER() IDENTIFIED BY '123456';
flush privileges;
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
exit;"
}
function check()
{
kill #杀死进程
mariadb #mariadb检测
mysqlfile #mysql文件检测
mysqluser #mysql用户检测
jieya #安装包解压
init #初始化并生成登录密码
mycnf #my.cnf配置文件修改
start #启动数据库
link #连接mysql相关命令
passwd #输出mysql密码
login #登录数据库修改密码
}
check > $log