#!/bin/bash
#导入环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:~/bin
export PATH
MYSQL_VERSION="5.7.29"
MYSQL_WEBSITE="http://mirrors.e6.e6gpshk.com/centos/7/download/mysql-5.7.29-el7-x86_64.tar.gz"
MYSQL_BACKUP="http://mirrors.e6.e6gpshk.com/centos/7/download/xtrabackup.sh"
MYSQL_BAKTOOLS="http://mirrors.e6.e6gpshk.com/centos/7/download/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm"
#检查是否root用户
function check_root(){
[[ $EUID != 0 ]] && echo -e "${Error} 当前账号非ROOT(或没有ROOT权限),无法继续操作,请使用 sudo -i来获取临时ROOT权限(执行后会提示输入当前账号的密码)。" && exit 1
}
#创建MySQL组和用户
function create_group_user(){
egrep "^mysql" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
groupadd mysql
fi
egrep "^mysql" /etc/passwd >& /dev/null
if [ $? -ne 0 ]
then
useradd -r -g mysql mysql
fi
}
#安装包上传方式
function wget_or_upload(){
read -p "是否远程下载二进制包:[Y/N]:" num
case $num in
Y | y)
wget $MYSQL_WEBSITE
;;
N | n)
echo "请确保上传的二进制文件和自动安装脚本为同一目录!"
echo "若是不在同一目录,请Ctrl+C停止自动安装脚本!"
;;
*)
echo "输入错误"
;;
esac
}
#解压安装包并移动到默认目录
function decompression_tar(){
MYSQL_FILE=$(ls ./mysql*.tar.gz)
if [ ! -z $MYSQL_FILE ]
then
tar -zxvf $MYSQL_FILE
MYSQL_FILE=${MYSQL_FILE%%.tar.gz*}
mv ./$MYSQL_FILE /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
else
echo "数据库二进制文件不存在!!! 请确保二进制文件和安装脚本目录一致!!!"
exit 1
fi
}
#覆盖默认配置文件
function config_mycnf(){
if [ -z `grep 'port=3306' /etc/my.cnf` ]
then
echo "开始配置参数文件..."
mv /etc/my.cnf /etc/my.cnf_bak
echo "[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8mb4
[mysqld]
port = 3306
user=mysql
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysql/mysql.sock
explicit_defaults_for_timestamp
slow_query_log=ON #开启慢查询日志
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=1
innodb_file_per_table=1 #独立表空间
innodb_file_format=barracuda #压缩表
innodb_flush_log_at_trx_commit=2 #提交方式
max_allowed_packet = 300M #接受的数据包大小用户mysqldump导入数据
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
event_scheduler=on
lower_case_table_names=1
innodb_large_prefix=1
max_connections =1000
max_connect_errors =1000
server-id=1 #每台机器不重复
log_bin=mysql-bin #bin日志路径
expire_logs_days=7 #日志保存时间
skip_ssl
skip-name-resolve #跳过反向解析
skip-host-cache
innodb_large_prefix=1
thread_stack=1048576
log_bin_trust_function_creators=ON
innodb_strict_mode=off
open_files_limit=65535
innodb_open_files=3000
transaction_isolation=READ-COMMITTED
">/etc/my.cnf
if [ $? -eq 0 ]
then
sed -i 's/ //g' /etc/my.cnf
echo "修改配置文件完成!"
else
echo "修改配置文件执行失败,请检查!"
exit 1
fi
else
echo "配置文件已修改,无需重复操作!"
fi
}
#是否修改数据文件路径
function move_dataurl(){
read -p "是否需要更换数据文件路径[Y/N]:" num
case $num in
Y | y)
read -p "请输入需要移动的数据文件路径,例如 /data/mysql :" url
echo "更改路径:$url属主为mysql"
if [ ! -d $url ];then
echo "路径不存在,自动创建.."
mkdir -p $url
fi
chown -R mysql:mysql $url
sed -i "s#/var/lib/mysql#$url#g" `grep var -rl /etc/my.cnf`
sed -i "s#/var/log#$url#g" `grep var -rl /etc/my.cnf`
sed -i "s#/var/run/mysqld#$url#g" `grep var -rl /etc/my.cnf`
;;
N | n)
echo "无需移动数据文件路径!"
;;
*)
echo "输入错误"
;;
esac
echo "MySQL安装及配置已完成!!!"
}
#数据库初始化
function initialize_db(){
/usr/local/mysql/bin/mysqld --user=mysql --initialize
#配置环境变量
CHECK_PATH=`grep mysql /etc/profile`
if [ -z "$CHECK_PATH" ]
then
echo "export PATH=/usr/local/mysql/bin:\$PATH">>/etc/profile
source /etc/profile
fi
source /etc/profile
#开机自启
chkconfig --add mysqld
}
#开启数据库防火墙
function config_firewall(){
CHECK_EXIST=`firewall-cmd --list-ports`
if [ -z "$CHECK_EXIST" ]
then
echo -e "防火墙已关闭,请手动增加规则\nfirewall-cmd --zone=public --add-port=3306/tcp --permanent\n并通过netstat -lntp检查所有需要添加的端口,完成后启动防火墙\nsystemctl start firewalld"
else
echo "开始配置防火墙..."
if [ -e "/etc/firewalld/zones/public.xml" ]
then
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
echo "防火墙配置完成"
fi
fi
}
#数据库密码安全调整
function config_security(){
var=`grep "mysqld.log" /etc/my.cnf`
mysqld_log=${var##*=}
CHECK_EXEC=`grep "Plugin 'validate_password' is disabled" $mysqld_log`
if [ -z "$CHECK_EXEC" ]
then
start_db
echo "开始运行安全设置向导..."
DB_PASSWD=`grep 'A temporary password' $mysqld_log|awk '{print $(11)'}`
echo "MySQL初始密码为:${DB_PASSWD}"
/usr/local/mysql/bin/mysql_secure_installation
if [ $? -eq 0 ]
then
echo "安全设置向导已完成!"
else
echo "安全设置向导执行失败,请检查!"
exit 1
fi
#stop_db
else
echo "安全设置向导已运行,无需重复操作!"
fi
}
function start_db(){
if [ -z "`ps -ef|grep mysqld|grep -v "grep"`" ]
then
echo '启动MySQL数据库...'
service mysqld start
if [ $? -eq 0 ]
then
echo 'MySQL数据库已成功启动!'
else
echo "MySQL数据库启动失败,请检查!"
exit 1
fi
else
echo "MySQL数据库已启动,无需重复操作!"
fi
}
function stop_db(){
if [ -z "`ps -ef|grep mysqld|grep -v "grep"`" ]
then
echo 'MySQL数据库没有启动!'
else
echo '正在停止MySQL数据库...'
service mysqld stop
if [ $? -eq 0 ]
then
echo 'MySQL数据库已停止!'
fi
fi
}
function restart_db(){
echo '重启MySQL数据库...'
service mysqld restart
if [ $? -eq 0 ]
then
echo 'MySQL数据库已重启!'
fi
}
#备份脚本上传方式
function backup_wget_or_upload(){
read -p "是否远程下载备份脚本和备份工具:[Y/N]:" num
case $num in
Y | y)
wget $MYSQL_BACKUP
wget $MYSQL_BAKTOOLS
yum localinstall ./percona-xtrabackup* -y
;;
N | n)
echo "请确保备份脚本/备份工具和自动安装脚本为同一目录!"
echo "若是不在同一目录,请Ctrl+C停止自动安装脚本!"
if [ -f "./xtrabackup-centos7-nonetwork.tar.gz" ];then
评论5