mysql数据库运维常用的shell脚本

举报
torchstar 发表于 2022/12/21 21:31:50 2022/12/21
【摘要】 mysql数据库运维常用的shell脚本

1、清除日志




apache日志每天进行轮转:

vim /usr/local/apache2/conf/extar/httpd-vhosts.conf
...
ErrorLog "| /usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_log-%Y%m%d 86400"
CustomLog "| /usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_log-%Y%m%d 86400" common
...

说明:
1. rotatelogs程序是apache自带的一个日志切割工具。 -l参数表示使用本地系统时间为标准切割,而不是GMT时区时间。
2. /usr/local/apache2/logs/access_log-%Y%m%d 86400 
用来指定日志文件的位置和名称,其中86400用来指定分割时间默认单位为s,也就是24小时;



log-server上搭建rsync: ip 10.1.1.2
[root@log-server ~]# cat /etc/rsyncd.conf 
[web1]
path = /web1/logs
uid = root
gid = root
read only = false

[web2]
path = /web2/logs
uid = root
gid = root
read only = false


echo rsync --daemon >> /etc/rc.local


web服务器上定义清理脚本

#!/bin/bash
#clean log
clean_log(){
remote_log_server=10.1.1.2
server=$1
log_dir=/usr/local/apache2/logs
log_tmp_dir=/tmp/log
host=`ifconfig eth0|sed -n '2p'|awk -F'[ :]+' '{print $4}'`


[ ! -d $log_tmp_dir ] && mkdir -p $log_tmp_dir

cd $log_dir
find ./ -daystart -mtime +3 -exec tar -uf $log_tmp_dir/`echo $host`_$(date +%F).tar {} \;
find ./ -daystart -mtime +3 -delete

cd $log_tmp_dir
rsync -a ./ $remote_log_server::$server && find ./ -daystart -mtime +1 -delete
}


jumper-server:

#!/bin/bash
#jumper-server
#菜单打印
trap '' 1 2 3 
menu1(){
	cat <<-END
	请选择对web1的操作类型:
	1. clean_apache_log
	2. reload_apache_service
	3. test_apache_service
	4. remote login
	END
}
menu2(){
cat <<-END
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
5. exit
END
}

push_pubkey(){
ip=$1
# 判断公钥文件是否存在,没有则生成公钥
[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null
# 安装expect程序,与交互式程序对话(自动应答)
sudo rpm -q expect &>/dev/null
test $? -ne 0 && sudo yum -y install expect
#将跳板机上yunwei用户的公钥推送的指定服务器上
	/usr/bin/expect<<-EOF
	spawn ssh-copy-id -i root@$ip
	expect {
	"yes/no" { send "yes\r";exp_continue }
	"password:" { send "111111\r" }
	}
	expect eof
	EOF

}
while true
do
menu2
#让用户选择相应的操作
read -p "请输入你要操作的主机:" host
case $host in
	1)
	ssh root@10.1.1.2
	;;
	2)
	ssh root@10.1.1.3
	;;
	3)
	clear
	menu1
	read -p "请输入你的操作类型:" types
	case $types in
			1)
			ssh root@10.1.1.1 clean_log web1
			test $? -eq 0 && echo "日志清理完毕..."
			;;
			2)
			service apache reload
			;;
			3)
			wget http://10.1.1.1 &>/dev/null
			test $? -eq 0 && echo "该web服务运行正常..." || echo "该web服务无法访问,请检查..."
			;;
			4)
			ssh root@10.1.1.1
			;;
			"")
			:
			;;
	esac
	;;
	5)
	exit
	;;
	*)
	clear
	echo "输入错误,请重新输入..."
	;;
esac
done





二、备份策略

# 备份策略:周3、周5、周日全备,周1,周2,周4,周6增备

03 01 * * 0   bash /backup/full.sh 
03 01 * * 1   bash /backup/incremental1.sh 
03 01 * * 2   bash /backup/incremental2.sh 
03 01 * * 3   bash /backup/full.sh 
03 01 * * 4  bash /backup/incremental1.sh  
03 01 * * 5   bash /backup/full.sh 
03 01 * * 6   bash /backup/incremental1.sh 

三、mysql数据库备份全量

#!/bin/bash
# Name: xtra_back_mysql.sh
# Desc:该脚本使用xtrabackup工具对mysql数据库进行增量备份,根据自己需求可以自行修改
# Path:课堂笔记目录里
# Usage:./xtra_back_mysql.sh

# 备份策略:周3、周5、周日全备,周1,周2,周4,周6增备


#变量定义
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
conf_file=/usr/local/mysql/my.cnf
xtra_full_dir=/mydb3307/back_full
xtra_increment_dir=/mydb3307/back_increment
xtr_full_log=/mydb3307/log/full_$(date +%F).log
xtr_increment_log=/mydb3307/log/increment_$(date +%F).log



#全量备份
full_back()
{

#备份
/usr/bin/innobackupex --user=admin --password=123 $xtra_full_dir &> $xtr_full_log
full_name=$(ls -d $xtra_full_dir/$(date +%F)_*)
echo $full_name > $xtra_full_dir/full.txt

#应用日志
echo "++++++++++++++++++++++++我是分割符++++++++++++++++++++++++++" >> $xtr_full_log
/usr/bin/innobackupex --apply-log --redo-only $full_name &>> $xtr_full_log

}

full_back && find $xtra_full_dir -daystart -type d -mtime +1 -exec rm -rf {} \; 2>/dev/null

四、mysql数据库增量备份之xtrabackup1

#!/bin/bash
# Name: xtra_increment1_mysql.sh
# Desc:该脚本使用xtrabackup工具对mysql数据库进行第1次增量备份,根据自己需求可以自行修改
# Path:课堂笔记目录里
# Usage:./xtra_increment1_mysql.sh

# 备份策略:周3、周5、周日全备,周1,周2,周4,周6增备

#变量定义
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
conf_file=/usr/local/mysql/my.cnf
xtra_full_dir=/mydb3307/back_full
xtra_increment_dir=/mydb3307/back_increment
xtr_full_log=/mydb3307/log/full_$(date +%F).log
xtr_increment_log=/mydb3307/log/increment_$(date +%F).log



#增量备份1
increment1_back()
{
#备份
full_name=`cat $xtra_full_dir/full.txt`
/usr/bin/innobackupex --user=admin --password=123 --incremental $xtra_increment_dir --incremental-basedir=$full_name &> $xtr_increment_log

increment1_dir=$(ls -d $xtra_increment_dir/$(date +%F)_*)
echo $increment1_dir > $xtra_increment_dir/increment1.txt

#应用日志
echo "++++++++++++++++++++++++我是分割符++++++++++++++++++++++++++" >> $xtr_increment_log

/usr/bin/innobackupex --apply-log --redo-only $full_name --incremental_dir=$increment1_dir &>> $xtr_increment_log

}

increment1_back && find $xtra_increment_dir -type d -mtime +1 -exec rm -rf {} \; 2>/dev/null

五、mysql数据库增量备份之xtrabackup2

#!/bin/bash
# Name: xtra_increment2_mysql.sh
# Desc:该脚本使用xtrabackup工具对mysql数据库进行第2次增量备份,根据自己需求可以自行修改
# Path:课堂笔记目录里
# Usage:./xtra_increment2_mysql.sh

# 备份策略:周3、周5、周日全备,周1,周2,周4,周6增备

#变量定义
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
conf_file=/usr/local/mysql/my.cnf
xtra_full_dir=/mydb3307/back_full
xtra_increment_dir=/mydb3307/back_increment
xtr_full_log=/mydb3307/log/full_$(date +%F).log
xtr_increment_log=/mydb3307/log/increment_$(date +%F).log

#增量备份2
increment2_back()
{
#备份
full_name=`cat $xtra_full_dir/full.txt`
increment1_dir=`cat $xtra_increment_dir/increment1.txt`

/usr/bin/innobackupex --user=admin --password=123 --incremental $xtra_increment_dir --incremental-basedir=$increment1_dir &> $xtr_increment_log

increment2_dir=$(ls -d $xtra_increment_dir/$(date +%F)_*)
echo $increment2_dir > $xtra_increment_dir/increment2.txt

#应用日志
echo "+++++++++++++++++++++我是分割符++++++++++++++++" >> $xtr_increment_log

/usr/bin/innobackupex --apply-log $full_name  --incremental_dir=$increment2_dir &>> $xtr_increment_log

}

increment2_back

六、安装包方式安装mysql

#!/bin/bash
##########################################################
# Script Name:install_mysql.sh                          #
# Describe:This Is Install From Source Mysql software.  #
##########################################################
#
#=================================分割线==============================================
#
## mysql变量配置部分;
## 可根据需求修改变量选择网络自动安装或者本地源码包安装。
## 定制你的mysql;更改变量而无需更改脚本,不修改则使用默认配置。
#
# 是否已经下载源码包,随便写,只要这里有值就会直接找源码包而不是从网络自动下载
mysql_source_tar=
# 使用source_dir变量定义mysql源码包的存放位置;
source_dir=/root/tar
# 使用mysql_link变量定义mysql网络源码下载,下载的网站要写在 "" 中否则shell会认为这是一个文件或者目录;
mysql_link="wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.41.tar.gz"
# 使用mysql_version变量定义mysql版本信息;
mysql_version=mysql-5.6.41
# 使用mysql_to变量定义mysql的解压路径;
mysql_to=/usr/src/
# 使用mysql_boot变量定义mysql启动时的启动命令(默认启动命令service mysqld start);
mysql_boot=mysqld
# 使用mysql_dir变量定义mysql的安装路径;
mysql_dir=/usr/local/$mysql_version
# 使用mysql_port变量定义mysql的端口号;
mysql_port=3307
# 使用mysql_passwd变量设置mysql密码;此密码只可用于第一次登陆mysql;务必更改!
mysql_passwd=123.com
# 使用rm_anonymous变量设置是否移除匿名用户;y移除/n不移除;默认y移除;
rm_anonymous=yes
# 使用rm_remotely变量设置是否移除root用户远程登录;y移除/n不移除;默认y移除;
rm_remotely=yes
# 使用rm_test变量设置是否移除test测试表;y移除/n不移除;默认y移除;
rm_test=yes
# 是否开启防火墙;y开启/n不开启;默认y开启;
mysql_iptables=y
# 使用network变量定义对外网卡的名称;
network=eth0
# 使用mysql_tar变量定义mysql源码包名称(支持gz、bz、bz2、xz压缩方式的源码包);
mysql_tar=$mysql_version.tar.gz
# 使用mysql_data变量定义mysql数据文件(表、库等)的存储路径;
mysql_data=$mysql_dir/data
# 使用mysql_sock变量定义mysql启动时产生的.sock的文件存放位置;
mysql_sock=$mysql_data/mysql.sock
# 使用mysql_cnf变量定义mysql启动时产生的my.cnf
mysql_cnf=$mysql_dir/my.cnf
# 使用log_err变量来指定mysql的错误日志路径;
log_error=$mysql_data/mysql.log.err
# 使用log_bin变量来指定mysql的binlog日志存放路径;
log_bin=$mysql_data/mybinlog
# 使用relay_log变量来指定relaylog日志存放路径;
relay_log=$mysql_data/relay_log
# 使用install_mysql_log变量定义安装mysql的配置信息存放位置;
install_mysql_log=$source_dir/logs/
# 使用 mysql_file_log变量定义安装mysql的配置导入的文件名称;
mysql_file_log=install_mysql_log
# 安装完成自动登录mysql,有值则自动登录,无值则不自动登录;
log_mysql=y
#
#====================================分割线===========================================
#
## 函数部分;
rely_on(){
clear
echo "正在安装开发工具依赖包,请稍等 ······"
yum groupinstall -y "Development tools" &> /dev/null
if [ $? -eq 0 ];then
echo "已成功安装开发工具包 !!"
else
echo "安装开发工具依赖包失败,请检查yum源。或者手动安装 "Development tools" 包组 * *"
exit 2
fi
echo "正在安装相关依赖包,请稍等 ······"
yum install -y wget &> /dev/null
if [ $? -eq 0 ];then
	echo "已成功安装 wget 包!!"
else
	echo "安装依赖包 wget 失败,请检查yum源。或者手动安装 "wget" 包"
	exit 2
fi
yum install -y cmake &> /dev/null
if [ $? -eq 0 ];then
	echo "已成功安装 cmake 包!!"
else
	echo "安装依赖包 cmake 失败,请检查yum源。或者手动安装 "cmake" 包"
	exit 2
fi
yum install -y ncurses-devel &> /dev/null
if [ $? -eq 0 ];then
	echo "已成功安装 ncurses-devel 包!!"
else
        echo "安装依赖包 ncurses-devel 失败,请检查yum源。或者手动安装 "ncurses-devel" 包"
	exit 2
fi
yum install -y pcre-devel &> /dev/null
if [ $? -eq 0 ];then
	echo "已成功安装 pcre-devel 包!!"
else
	echo "安装依赖包 pcre-devel 失败,请检查yum源。或者手动安装 "pcre-devel" 包"
	exit 2
fi
yum install -y libcurl-devel &> /dev/null
if [ $? -eq 0 ];then
	echo "已成功安装 libcurl-devel 包!!"
else
        echo "安装依赖包 libcurl-devel 失败,请检查yum源。或者手动安装 "libcurl-devel" 包"
	exit 2
fi
}
to_source(){  
#rm -rf $mysql_to$mysql_version
#rm -rf $mysql_dir$mysql_version
rm -rf /etc/init.d$mysql_boot 
useradd mysql -s /sbin/nologin -M &> /dev/null
mkdir $source_dir -p
mkdir $install_mysql_log/logs -p
cd $source_dir
}
link_source(){
if [ -n "$mysql_source_tar" ];then
	echo "正在解压 mysql 源码包 !!"
	cd $source_dir
	tar xf $mysql_tar -C $mysql_to &> /dev/null
	#       rm -rf $mysql_tar
	if [ $? -ne 0 ];then
		clear
                echo "==未检测到你的本地源码包=="
                echo "《《请将源码包放在 $source_dir 目录下》》"
                echo "!! 注意:如果源码包的版本不是 $mysql_version 请修改脚本变量 mysql_version 。"
		echo "或者修改脚本变量 mysql_source_tar 。"
		echo "或者这个源码包不可使用或者名字冲突···"
                exit
	fi
	echo "解压完成!!"
fi
if [ -z "$mysql_source_tar" ];then
	ping -c 1 -W 3 www.baidu.com &>/dev/null
	if [ $? -eq 0 ];then
		echo "正在下载 $mysql_version 源码包···"
		cd $source_dir
		rm -rf $mysql_tar
		$mysql_link
		if [ $? -eq 0 ];then
			echo "下载 $mysql_version 源码包完成!!"
		else
			echo "下载 $mysql_version 源码包失败**"
			exit
		fi
		echo "正在解压 mysql 源码包 !!"
		cd $source_dir
		tar xf $mysql_tar -C $mysql_to &> /dev/null
	#	rm -rf $mysql_tar
		if [ $? -eq 0 ];then
			echo "解压完成!!"
		else
			echo "解压失败!!"
			exit
		fi
		#echo "已删除 mysql 源码包!"
	else
        	clear
		echo "==检测到您的网络未连接;这将使用本地源码包=="
        	echo "《《请将源码包放在 $source_dir 目录下》》"
		echo "!! 注意:如果源码包的版本不是 $mysql_version 请修改脚本变量 mysql_version 。"
		exit 2
	fi
fi
}
configure(){
mkdir $mysql_dir -p
cd $mysql_to/$mysql_version
echo "正在配置mysql!!"
cmake . \
-DCMAKE_INSTALL_PREFIX=$mysql_dir/ \
-DMYSQL_DATADIR=$mysql_data \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DSYSCONFDIR=$mysql_dir/etc \
-DMYSQL_UNIX_ADDR=$mysql_sock \
-DSYSCONFDIR=$mysql_cnf \
-DMYSQL_TCP_PORT=$mysql_port \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql
if [ $? -eq 0 ];then
	echo "配置mysql完成!!"
else
	echo "配置mysql失败!!"
	echo "这可能是缺少依赖包,或者环境出现问题,也有可能是包未成功下载,请检查···"
	exit
fi 
echo "即将配置编译安装 mysql;这需要一段时间,请准备咖啡,稍等片刻······"
make
if [ $? -eq 0 ];then
	clear
	echo "编译mysql完成!!"
	echo "正在安装mysql!!"
else
	echo "编译mysql失败!!"
	echo "未知的错误,这可能是环境出现了问题···"
	exit
fi
make install
}
my_conf(){
rm -rf /tmp/my.cnf
rm -rf /etc/my.cnf
rm -rf $mysql_dir/support-files/my.cnf
cat > $mysql_dir/support-files/my.cnf <<EOF
[mysqld]
log_bin = $log_bin
relay-log = $relay_log
basedir = $mysql_dir
datadir = $mysql_data
log-error = $log_error
socket = $mysql_sock
port = $mysql_port
#server_id = 10
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
EOF
cat > /tmp/my.cnf <<EOF
[mysqld]
log_bin = $log_bin
relay-log = $relay_log
basedir = $mysql_dir
datadir = $mysql_data
socket = $mysql_sock
port = $mysql_port
#server_id = 10
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
EOF
}
initial(){
chown -R mysql. $mysql_dir
cd $mysql_dir
scripts/mysql_install_db --user=mysql --basedir=$mysql_dir --datadir=$mysql_data
}
follow(){
cat /etc/profile | grep "PATH=$mysql_dir/bin:\$PATH"
[ $? -ne 0 ] && echo "PATH=$mysql_dir/bin:\$PATH" >> /etc/profile
source /etc/profile
cp $mysql_dir/support-files/mysql.server /etc/init.d/$mysql_boot
chmod +x /etc/init.d/$mysql_boot
cat ~/.bashrc | grep "alias mysql='mysql -S $mysql_sock'"
[ $? -ne 0 ] && echo "alias mysql='mysql -S $mysql_sock'" >> ~/.bashrc
source ~/.bashrc
chkconfig --add --level 35 $mysql_boot
service $mysql_boot start
cd $mysql_dir/bin/
source /etc/profile
source ~/.bashrc
}
secure_mysql(){
mysqladmin password "$mysql_passwd"
{
mysql_anonymous=yes
if [ $rm_anonymous = yes ];then
mysql -uroot -p$mysql_passwd -e "delete from mysql.user where user=''"
mysql_anonymous=no
fi
mysql_remotely=yes
if [ $rm_remotely = yes];then
mysql -uroot -p$mysql_passwd -e "delete from mysql.user where host='%'"
mysql_remotely=no
fi
mysql_test=yes
if [ $rm_test = yes ];then
mysql -uroot -p$mysql_passwd -e "drop database test"
mysql_test=no
fi
mysql -uroot -p$mysql_passwd -e "flush privileges"
} &> /dev/null
}
mysql_iptables(){
v1=
v2=
v3=
sed -i 's/enforcing/disable/' /etc/selinux/config
setenforce 0
v1=`uname -r | awk -F. '{print $4}'`
v2=`test $v1 = el6 &>/dev/null && echo "C6" || echo "C7"`
[ "$v2" = 'C6' ] && v3='Centos 6'
[ "$v2" = 'C7' ] && v3='Centos 7'
if [ "$mysql_iptables" = 'y' ];then
	if [ "$v2" = 'C6' ];then
		iptables -A INPUT -p TCP -i $network --dport $mysql_port --sport 1024:65534 -j ACCEPT # mysql
		/etc/init.d/iptables save &> /dev/null
		[ $? -eq 0 ] && echo "mysql 防火墙规则已经保存!!"
		service iptables restart &> /dev/null
		[ $? -eq 0 ] && echo "重启 iptables 成功!!"
	fi
	if [ $v2 = 'C7' ];then
		yum -y remove firewalld &>/dev/null
		[ $? -eq 0 ] && echo "已将firewalld防火墙卸载!"
		yum -y install iptables-services &>/dev/null
		[ $? -eq 0 ] && echo "安装iptables防火墙,成功!!"
		systemctl enable iptables
		[ $? -eq 0 ] && echo "已将iptables防火墙设置为开机自启动!"
		iptables -A INPUT -p TCP -i $network --dport $mysql_port --sport 1024:65534 -j ACCEPT # mysql
		service iptables save &>/dev/null
		[ $? -eq 0 ] && echo "mysql 防火墙规则已经保存!!"
		service iptables restart &> /dev/null
		[ $? -eq 0 ] && echo "重启 iptables 成功!!"
		sleep 1
	fi
fi
if [ "$mysql_iptables" = 'n' ];then
	if [ "$v2" = 'C6' ];then
		service iptables stop &>/dev/null
		chkconfig iptables off
		echo "已永久关闭iptables防火墙!"
	fi
	if [ "$v2" = 'C7' ];then
		yum -y remove firewalld &>/dev/null
		[ $? -eq 0 ] && echo "已将firewalld防火墙卸载!"
	fi
fi
}
ok_help(){
clear
echo "==========================================="
echo "= you are install software  mysql [OK] !! ="
echo "==========================================="
echo "注意:"
echo " > 1.您的数据库密码被设置为 $mysql_passwd ; 默认密码被记录在 $install_mysql_log$mysql_file_log 文件中;"
echo " > 2.默认密码是十分不安全的!请使用命令 mysqladmin -uroot -p$mysql_passwd password 进行修改密码"
echo " > 3.您的 sock 的文件被指定在$mysql_sock 目录下。"
echo " > 4.您的mysql端口为$mysql_port;已为你添加防火墙规则!默认使用iptables防火墙并且会将您的selinux永久关闭!"
echo " > 5.已为你启动mysql;mysql的启动命令为 service $mysql_boot start 。"
echo " > 6.您的mysql安装配置信息已被导入到 $install_mysql_log$mysql_file_log 中。"
}
install_log(){
soft_date=`date -r $mysql_data | gawk -F' ' '{print $1,$2,$3,$5}' | sed 's/ //g'`
cat > $install_mysql_log$mysql_file_log <<-EOF
《《 You are install software MYSQL and configure message 》》
 |
 | > 您的系统版本为:$v3
 |
 | > 软件名称:MySql
 |
 | > 安装方式:编译安装
 | 
 | > 软件版本:$mysql_version
 |
 | > 端口号:$mysql_port
 |
 | > 软件包解压路径:$mysql_to
 |
 | > 软件的安装路径:$mysql_dir
 |
 | > 数据的存储路径:$mysql_data
 |
 | > 软件的启动方式:service $mysql_boot start
 |
 | > .sock文件存放路径:$mysql_sock
 |
 | > 错误日志存储路径:$log_error
 |
 | > binlog存储路径:$log_bin
 |
 | > relaylog存储路径:$relay_log
 |
 | > 添加的防火墙规则:iptables -A INPUT -p TCP -i $network --dport $mysql_port --sport 1024:65534 -j ACCEPT # mysql
 |
 | > 配置文件路径:$mysql_cnf
 |
 | > 允许匿名用户登录:$mysql_anonymous
 |
 | > 允许mysql root 用户远程登录:$mysql_remotely
 |
 | > 是否存在test表:$mysql_test
 |
 | > 默认密码:$mysql_passwd
 |
 | > 软件的安装时间:$soft_date
 |
 | 
EOF
}
#
#==================================分割线=====================================
#
## 脚本部分
# 安装依赖包
rely_on 
# 安装源码包前的环境清理&&准备
to_source
# 网络下载|解压|清理源码包
link_source
# 进入mysql解压目录;配置、编译、安装;
configure
# 清理系统自带my.cnf文件导入自定义my.cnf配置
my_conf
# 更改目录属主属组;初始化 mysql 数据库
initial
# 添加mysql环境变量;添加mysql启动脚本;使用别名方式指定启动mysql的sock的文件;添加mysql自启动;启动mysql;进入mysql_secure_installation文件的目录;
follow
# 配置mysql密码;经过判断是否移除匿名用;禁止root远程登录;删除test表;刷新权限
secure_mysql
# 增加防火墙规则
mysql_iptables 
# 安装完成后提示的信息
ok_help
# 导出安装 mysql 的配置信息
install_log

source /etc/profile
source ~/.bashrc
if [ -n "$log_mysql" ];then
mysql -p123.com
fi

七、二进制方式安装mysql

#!/bin/bash
# Name: install_mysql_glibc.sh
# Desc:该脚本用于通用的二进制包mysql的安装,根据自己需求可以自行修改
# Path:课堂笔记目录里
# Usage:./install_mysql_glibc.sh
#变量定义
MySQLPro="mysql-5.6.35-linux-glibc2.5-x86_64"
package_name=${MySQLPro}.tar.gz
install_path=/usr/local/mysql/
soft_path=/soft/mysql
tmp_dir=/usr/src

#mysql用户检查
user_fun()
{
echo "###############mysql用户检查,请稍等片刻###############"
username=`grep -w mysql /etc/passwd|cut -d: -f1`
        if [ $username = "mysql" ];then
                echo "mysql用户已经存在."
                return 5
        else
                echo "mysql用户不存在,马上帮您添加用户."
                useradd -s /sbin/nologin mysql
                return 6
        fi
}

#判断mysql是否安装(rpm、source)
package_fun()
{ 
rpm1_name=`rpm -aq |grep mysql-server`
rpm2_name=`rpm -aq|grep MySQL-server`
rpm3_name=`rpm -aq|grep mysql-community-server`
if [ -z "$rpm1_name" -a -z "$rpm2_name" -a -z "$rpm3_name" ];then
   echo "开始检测源码包是否安装,请小憩一会......"
    if [ -d $install_path ];then
	read -p "源码包默认路径:$install_path目录已存在,是否清空该目录?[yes/no]:" choice1
	if [ $choice1 = yes ];then
	pkill -9 mysqld
	rm -rf $install_path/*
	install_fun
	else
           exit 0
        fi  
    else
       echo "本机可以默认安装mysql程序,将为您开始安装$package_name.请稍等......"
        install_fun
    fi
else	
		package1=`echo $rpm1_name`
		package2=`echo $rpm2_name`
		package3=`echo $rpm3_name`
		for i in $package1 $package2 $package3
			do
			test -n "$i" &&  name=`echo $i` 
			done
			echo $name
		read -p "rpm版本mysql已经安装,是否卸载?[yes/no]" choice2
		if [ $choice2 = yes ];then
			rpm -e $name --nodeps
			rm -f /var/log/mysqld.log
			package_fun
		else
			exit 0
		fi
        fi
}

#安装MySQL数据库
install_fun()
{
mkdir -p $install_path &>/dev/null
cd $soft_path

echo "正在解压软件包,请稍等......"
tar xf $package_name -C $tmp_dir/
echo "正在拷贝文件到安装位置,请稍等...."
cp -a $tmp_dir/$MySQLPro/* $install_path/
chown -R mysql:mysql $install_path

#数据库初始化
cd $install_path
echo "正在初始化数据库,请稍等...."
./scripts/mysql_install_db  --datadir=/usr/local/mysql/data --user=mysql

#修改配置文件,这里只是简单举个例子,根据实际情况添加相应配置
cat >> $install_path/my.cnf <<EOF
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3307
socket = /usr/local/mysql/mysql.sock
EOF


#ServerID=`cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep "IPADDR" | awk -F '.' '{print $4}'`
#echo "server_id=${ServerID}" >> ./my.cnf

#复制启动脚本到/etc/init.d/下
cp support-files/mysql.server /etc/init.d/
chkconfig --add mysql.server

#启动数据库并且开机自启动
chkconfig mysql.server on
service mysql.server start

}


main_install()
{
echo "#***********************************#"
echo "#*******欢迎使用mysql安装脚本*******#"
echo "#*******如有问题请联系管理员********#"
echo "#***********************************#"
sleep 2
#开始执行,调用检测函数
user_fun
test $? -eq 5 && package_fun || package_fun
}
main_install

#环境变量设置
echo "export PATH=/usr/local/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
source /etc/profile
#设置密码
mysqladmin -uroot password '123456' &>/dev/null
echo "数据库管理员root初始密码为:123456,请及时修改密码。"
exit 0

八、用xtrabackup工具对mysql增量备份

#!/bin/bash
# Name: xtra_back_mysql.sh
# Desc:该脚本使用xtrabackup工具对mysql数据库进行增量备份,根据自己需求可以自行修改
# Path:课堂笔记目录里
# Usage:./xtra_back_mysql.sh

# 备份策略:周3、周5、周日全备,周1,周2,周4,周6增备


#变量定义
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
conf_file= $basedir/my.cnf
xtra_full_dir = /mydb3307/back_full
xtra_increment_dir = /mydb3307/back_increment
xtr_full_log = /mydb3307/log/full_`$date '+%F %T'`.log
xtr_increment_log = /mydb3307/log/increment_`$date '+%F %T'`.log


#全量备份
full_back()
{
#备份
/usr/bin/innobackupex --user=admin --password=123 $xtra_full_dir &> $xtr_full_log
full_name=$(ls -d $xtra_full_dir/$(date +%F)_*)
echo $full_name > $xtra_full_dir/full.txt

#应用日志
echo "++++++++++++++++++++++++我是分割符++++++++++++++++++++++++++" >> $xtr_full_log
/usr/bin/innobackupex --apply-log --redo-only $full_name &>> $xtr_full_log

}


#增量备份1
increment1_back()
{
#备份
full_name=`cat $xtra_full_dir/full.txt`
/usr/bin/innobackupex --user=admin --password=123 --incremental $xtra_increment_dir --incremental-basedir=$full_name &> $xtr_increment_log

increment1_dir=$(ls -d $xtra_increment_dir/$(date +%F)_*)
echo $increment1_dir > $xtra_increment_dir/increment1.txt

#应用日志
echo "++++++++++++++++++++++++我是分割符++++++++++++++++++++++++++" >> $xtr_increment_log

/usr/bin/innobackupex --apply-log --redo-only $full_name --incremental_dir=$increment1_dir &>> $xtr_increment_log

}



#增量备份2
increment2_back()
{
#备份
full_name=`cat $xtra_full_dir/full.txt`
increment1_dir=`cat $xtra_increment_dir/increment1.txt`

/usr/bin/innobackupex --user=admin --password=123 --incremental $xtra_increment_dir --incremental-basedir=$increment1_dir &> $xtr_increment_log

increment2_dir=$(ls -d $xtra_increment_dir/$(date +%F)_*)
echo $increment2_dir > $xtra_increment_dir/increment2.txt

#应用日志
echo "+++++++++++++++++++++我是分割符++++++++++++++++" >> $xtr_increment_log

/usr/bin/innobackupex --apply-log $full_name  --incremental_dir=$increment2_dir &>> $xtr_increment_log

}


system_time=`date +%A`
if [ '$system_time' = 'Sunday' -o '$system_time' = 'Wednesday' -o '$system_time' = 'Friday' ];then
	full_back && find $xtra_full_dir -daystart -type d -mtime +1 -exec rm -rf {} \; 2>/dev/null
	sleep 86400
	elif [ '$system_time' = 'Thursday' -o '$system_time' = 'Saturday' -o '$system_time' = 'Monday'];then
		increment1_back && find $xtra_increment_dir -type d -mtime +1 -exec rm -rf {} \; 2>/dev/null
		sleep 86400
else
	increment2_back
	sleep 86400
fi
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。