写点什么

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

作者:@下一站
  • 2022-12-21
    陕西
  • 本文字数:12369 字

    阅读完需:约 41 分钟

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

对于自动化运维,诸如备份恢复之类的,DBA 经常需要将 SQL 语句封装到 shell 脚本。本文描述了在 Linux 环境下 mysql 数据库中,shell 脚本下调用 sql 语句的几种方法,供大家参考。对于脚本输出的结果美化,需要进一步完善和调整。以下为具体的示例及其方法。

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/logsuid = rootgid = rootread only = false
[web2]path = /web2/logsuid = rootgid = rootread only = false

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

web服务器上定义清理脚本
#!/bin/bash#clean logclean_log(){remote_log_server=10.1.1.2server=$1log_dir=/usr/local/apache2/logslog_tmp_dir=/tmp/loghost=`ifconfig eth0|sed -n '2p'|awk -F'[ :]+' '{print $4}'`

[ ! -d $log_tmp_dir ] && mkdir -p $log_tmp_dir
cd $log_dirfind ./ -daystart -mtime +3 -exec tar -uf $log_tmp_dir/`echo $host`_$(date +%F).tar {} \;find ./ -daystart -mtime +3 -delete
cd $log_tmp_dirrsync -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-Master2. DB2-Slave3. Web14. Web25. exitEND}
push_pubkey(){ip=$1# 判断公钥文件是否存在,没有则生成公钥[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null# 安装expect程序,与交互式程序对话(自动应答)sudo rpm -q expect &>/dev/nulltest $? -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 truedomenu2#让用户选择相应的操作read -p "请输入你要操作的主机:" hostcase $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 "输入错误,请重新输入..." ;;esacdone





复制代码

二、备份策略

# 备份策略:周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/mysqldatadir=/usr/local/mysql/dataconf_file=/usr/local/mysql/my.cnfxtra_full_dir=/mydb3307/back_fullxtra_increment_dir=/mydb3307/back_incrementxtr_full_log=/mydb3307/log/full_$(date +%F).logxtr_increment_log=/mydb3307/log/increment_$(date +%F).log


#全量备份full_back(){
#备份/usr/bin/innobackupex --user=admin --password=123 $xtra_full_dir &> $xtr_full_logfull_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/mysqldatadir=/usr/local/mysql/dataconf_file=/usr/local/mysql/my.cnfxtra_full_dir=/mydb3307/back_fullxtra_increment_dir=/mydb3307/back_incrementxtr_full_log=/mydb3307/log/full_$(date +%F).logxtr_increment_log=/mydb3307/log/increment_$(date +%F).log


#增量备份1increment1_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/mysqldatadir=/usr/local/mysql/dataconf_file=/usr/local/mysql/my.cnfxtra_full_dir=/mydb3307/back_fullxtra_increment_dir=/mydb3307/back_incrementxtr_full_log=/mydb3307/log/full_$(date +%F).logxtr_increment_log=/mydb3307/log/increment_$(date +%F).log
#增量备份2increment2_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.cnfmysql_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(){clearecho "正在安装开发工具依赖包,请稍等 ······"yum groupinstall -y "Development tools" &> /dev/nullif [ $? -eq 0 ];thenecho "已成功安装开发工具包 !!"elseecho "安装开发工具依赖包失败,请检查yum源。或者手动安装 "Development tools" 包组 * *"exit 2fiecho "正在安装相关依赖包,请稍等 ······"yum install -y wget &> /dev/nullif [ $? -eq 0 ];then	echo "已成功安装 wget 包!!"else	echo "安装依赖包 wget 失败,请检查yum源。或者手动安装 "wget" 包"	exit 2fiyum install -y cmake &> /dev/nullif [ $? -eq 0 ];then	echo "已成功安装 cmake 包!!"else	echo "安装依赖包 cmake 失败,请检查yum源。或者手动安装 "cmake" 包"	exit 2fiyum install -y ncurses-devel &> /dev/nullif [ $? -eq 0 ];then	echo "已成功安装 ncurses-devel 包!!"else        echo "安装依赖包 ncurses-devel 失败,请检查yum源。或者手动安装 "ncurses-devel" 包"	exit 2fiyum install -y pcre-devel &> /dev/nullif [ $? -eq 0 ];then	echo "已成功安装 pcre-devel 包!!"else	echo "安装依赖包 pcre-devel 失败,请检查yum源。或者手动安装 "pcre-devel" 包"	exit 2fiyum install -y libcurl-devel &> /dev/nullif [ $? -eq 0 ];then	echo "已成功安装 libcurl-devel 包!!"else        echo "安装依赖包 libcurl-devel 失败,请检查yum源。或者手动安装 "libcurl-devel" 包"	exit 2fi}to_source(){  #rm -rf $mysql_to$mysql_version#rm -rf $mysql_dir$mysql_versionrm -rf /etc/init.d$mysql_boot useradd mysql -s /sbin/nologin -M &> /dev/nullmkdir $source_dir -pmkdir $install_mysql_log/logs -pcd $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 "解压完成!!"fiif [ -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	fifi}configure(){mkdir $mysql_dir -pcd $mysql_to/$mysql_versionecho "正在配置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=mysqlif [ $? -eq 0 ];then	echo "配置mysql完成!!"else	echo "配置mysql失败!!"	echo "这可能是缺少依赖包,或者环境出现问题,也有可能是包未成功下载,请检查···"	exitfi echo "即将配置编译安装 mysql;这需要一段时间,请准备咖啡,稍等片刻······"makeif [ $? -eq 0 ];then	clear	echo "编译mysql完成!!"	echo "正在安装mysql!!"else	echo "编译mysql失败!!"	echo "未知的错误,这可能是环境出现了问题···"	exitfimake install}my_conf(){rm -rf /tmp/my.cnfrm -rf /etc/my.cnfrm -rf $mysql_dir/support-files/my.cnfcat > $mysql_dir/support-files/my.cnf <<EOF[mysqld]log_bin = $log_binrelay-log = $relay_logbasedir = $mysql_dirdatadir = $mysql_datalog-error = $log_errorsocket = $mysql_sockport = $mysql_port#server_id = 10sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES EOFcat > /tmp/my.cnf <<EOF[mysqld]log_bin = $log_binrelay-log = $relay_logbasedir = $mysql_dirdatadir = $mysql_datasocket = $mysql_sockport = $mysql_port#server_id = 10sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES EOF}initial(){chown -R mysql. $mysql_dircd $mysql_dirscripts/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/profilesource /etc/profilecp $mysql_dir/support-files/mysql.server /etc/init.d/$mysql_bootchmod +x /etc/init.d/$mysql_bootcat ~/.bashrc | grep "alias mysql='mysql -S $mysql_sock'"[ $? -ne 0 ] && echo "alias mysql='mysql -S $mysql_sock'" >> ~/.bashrcsource ~/.bashrcchkconfig --add --level 35 $mysql_bootservice $mysql_boot startcd $mysql_dir/bin/source /etc/profilesource ~/.bashrc}secure_mysql(){mysqladmin password "$mysql_passwd"{mysql_anonymous=yesif [ $rm_anonymous = yes ];thenmysql -uroot -p$mysql_passwd -e "delete from mysql.user where user=''"mysql_anonymous=nofimysql_remotely=yesif [ $rm_remotely = yes];thenmysql -uroot -p$mysql_passwd -e "delete from mysql.user where host='%'"mysql_remotely=nofimysql_test=yesif [ $rm_test = yes ];thenmysql -uroot -p$mysql_passwd -e "drop database test"mysql_test=nofimysql -uroot -p$mysql_passwd -e "flush privileges"} &> /dev/null}mysql_iptables(){v1=v2=v3=sed -i 's/enforcing/disable/' /etc/selinux/configsetenforce 0v1=`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	fifiif [ "$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防火墙卸载!"	fifi}ok_help(){clearecho "==========================================="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/profilesource ~/.bashrcif [ -n "$log_mysql" ];thenmysql -p123.comfi
复制代码

七、二进制方式安装 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.gzinstall_path=/usr/local/mysql/soft_path=/soft/mysqltmp_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 fielse 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/nullcd $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_pathecho "正在初始化数据库,请稍等...."./scripts/mysql_install_db --datadir=/usr/local/mysql/data --user=mysql
#修改配置文件,这里只是简单举个例子,根据实际情况添加相应配置cat >> $install_path/my.cnf <<EOFbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3307socket = /usr/local/mysql/mysql.sockEOF

#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 onservice mysql.server start
}

main_install(){echo "#***********************************#"echo "#*******欢迎使用mysql安装脚本*******#"echo "#*******如有问题请联系管理员********#"echo "#***********************************#"sleep 2#开始执行,调用检测函数user_funtest $? -eq 5 && package_fun || package_fun}main_install
#环境变量设置echo "export PATH=/usr/local/mysql/bin:$PATH" >>/etc/profilesource /etc/profilesource /etc/profile#设置密码mysqladmin -uroot password '123456' &>/dev/nullecho "数据库管理员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/mysqldatadir = /usr/local/mysql/dataconf_file= $basedir/my.cnfxtra_full_dir = /mydb3307/back_fullxtra_increment_dir = /mydb3307/back_incrementxtr_full_log = /mydb3307/log/full_`$date '+%F %T'`.logxtr_increment_log = /mydb3307/log/increment_`$date '+%F %T'`.log

#全量备份full_back(){#备份/usr/bin/innobackupex --user=admin --password=123 $xtra_full_dir &> $xtr_full_logfull_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
}

#增量备份1increment1_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
}


#增量备份2increment2_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 86400else increment2_back sleep 86400fi
复制代码


发布于: 2022-12-21阅读数: 16
用户头像

@下一站

关注

懒人 2020-11-22 加入

都是黄泉预约客,何必难为每一天,执念太强,无法豁然。

评论

发布
暂无评论
mysql数据库运维常用的shell脚本_12月日更_@下一站_InfoQ写作社区