mysql计划任务 定义变量_Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库...

本文介绍了Shell变量的使用,包括赋值、作用域和运算,并展示了如何编写Shell脚本来配合MySQL计划任务,实现远程数据库的定时备份。通过示例详细解析了如何设置变量、命令替换以及环境变量的应用,最后给出了一个完整备份脚本的实例,并指导了如何配置cron任务执行备份。
摘要由CSDN通过智能技术生成

root@localhost ~]# A=AAA

[root@localhost ~]# B=BBB

[root@localhost ~]# echo $A

AAA

[root@localhost ~]# echo $A $B

AAA BBB

当变量名称容易和紧跟其后的其他字符混淆时,需要使用 ’ { } ‘ 将变量名称括起来

[root@localhost ~]# echo $Aaaa

[root@localhost ~]# echo $A aaa

AAA aaa

[root@localhost ~]# echo ${A}aaa

AAAaaa

(3) 赋值时使用引号

- 双引号:允许通过$符号引用其他变量值 “ ”

- 单引号:禁止引用其他变量值,$视为普通字符 ‘ ‘

- 反撇号:命令替换,提取命令执行后的输出结果,也可以使用 $() 代替,可以处理嵌套命令 ``

($() 一般用的更多一点,比 反撇号更加直观,所以一般直接使用$() ,不过也可以根据个人喜好)

(4)从键盘输入内容为变量赋值

格式:read [ -p “提示信息” ] 变量名

示例:

[root@localhost ~]#a=class

[root@localhost ~]#b=36

[root@localhost ~]#echo $a $b

class 36

[root@localhost ~]#echo $aa

classa

[root@localhost ~]#c=class 36

-bash: 36:未找到命令

[root@localhost ~]#c="class 36"

[root@localhost ~]#echo $c

class 36

[root@localhost ~]#class="class $b"

[root@localhost ~]#echo $class

class 36 ($b=36)

[root@localhost ~]#class2=‘class $b‘

[root@localhost ~]#echo $class2

class $b `(单引号不引用变量$视为普通字符)`

[root@localhost ~]#which useradd

/usr/sbin/useradd

[root@localhost ~]#ls -lh `which useradd`

`(ls -lh $(which useradd) 也是一样的)`

-rexr-xr-x. 1 root root 135k 8月 9 2020 /usr/sbin/useradd

[root@localhost ~]#rpm -qf /usr/sbin/useradd

shadow-utils-4.6-5.e17.x86_64

[root@localhost ~]#rpm -qc shadow-utils-4.6-5.e17.x86_64

/etc/default/useradd

/etc/login.defs

[root@localhost ~]# rpm -qc `rpm -qf `which useradd``

`(rpm -qc $(rpm -qf $(which useradd))一样的)`

/etc/default/useradd

/etc/login.defs

[root@localhost ~]#read aaa

`(使用read给变量aaa赋值)`

/opt/backup (这个是自己输入的,也就是变量aaa的变量值)

[root@localhost ~]#echo $aaa

/opt/backup

[root@localhost ~]# read -p "请指定备份存放目录:" bbb

`(-p会输出指定的提示信息交互式变量)`

请指定备份存放目录:/opt/backup

[root@localhost ~]#echo $bbb

/opt/backup

(5)设置变量的作用范围

-局部变量与全局变量

局部变量:只在当前shell环境中有效

变量名=变量值

全局变量:在所有shell环境中有效(有两种全局变量的格式)

格式一:export 变量名 … (把已经创建好的变量变成全局变量)

格式二:export 变量名=变量值 … (创建的时候直接创建全局变量)

————两种格式可以混合使用————

[root@localhost ~]# echo "$A $B"

aaa bbb `(A=aaa B=bbb)`

[root@localhost ~]# export A

`(导出A为全局变量)`

[root@localhost ~]# bash

`(换一个shell环境)`

[root@localhost ~]# echo "$A $B"

aaa `(因为A是全局变量B不是,所以只会显示A的变量值)`

(6)整数变量的运算

格式:expr 变量1 运算符 变量2 运算符 变量3 …

(7)常用运算符

加法运算: +

减法运算: -

乘法运算: *

除法运算: /

求模(取余)运算: %

命令嵌套: $()

解决变量名混淆问题: ${}

实现整数的混合运算: $(())

变量运算示例

[root@localhost ~]# x=3

[root@localhost ~]# echo $x

3

[root@localhost ~]# y=4

[root@localhost ~]# expr $x + $y

7

[root@localhost ~]# expr $x % $y

3

[root@localhost ~]# expr $y % $x

1

[root@aaa ~]# B="$(expr $A + 1 )"

`(可以这样去定义变量的算数,中间有空格)`

[root@aaa ~]# A=0

[root@aaa ~]# echo "$(expr $A + $B )"

1

二、特殊的shell变量

(1)环境变量

由系统提前创建,用来设置用户的工作环境

配置文件: /etc/profile 、 ~/.bash_profile (家目录下的)

查看当前环境变量

env

(2)常见的环境变量

PWD 、 PATH

USER、SHELL、HOME

[root@localhost ~]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:

/usr/bin:/root/bin

[root@localhost ~]# PATH="$PATH:/root"

`(改变系统变量)`

[root@localhost ~]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:

/usr/bin:/root/bin:/root

`(在末尾加了:root)`

示例:制作用户登录的欢迎脚本

[root@localhost ~]# vim /opt/welcome.sh

#!/bin/bash

echo "用户 $USER

您好!欢迎你登录!"

[root@localhost ~]# chmod +x /opt/welcome.sh

[root@localhost ~]# vim /etc/profile

在文件末尾添加

source /opt/welcome.sh (每次登录时执行脚本)

[root@localhost ~]# su - ly

上一次登录:一 7月 1 11:19:51 CST 2019pts/0 上

用户 ly

您好!欢迎你登录!

[ly@localhost ~]$

(2)位置变量

表示为 $n ,n 为 1 ~ 9之间的数字

[root@localhost ~]# ./myprog.sh one two three four five six

$1,第1个位置参数 (如one 就是第一个位置参数)

$2,第2个位置参数 (如two就是第二个位置参数)

$6,第6个位置参数 (如six就是第六个位置参数)

$0 为当前脚本的位置,即当前脚本

(3)预定义变量

$#:命令行中位置变量的个数 (即脚本后面跟的位置变量的总和)

$*:所有位置变量的内容 (即脚本后面跟的所有的位置变量的名称)

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错 (一般都输出1)

$0:当前执行的进程/程序名 (即当前脚本名)

预定义变量与特殊变量的结合示例

[root@localhost ~]# vim mybak.sh

#!/bin/bash

A=beifen-$(date +%F).tgz

tar zcf $A $* &> /dev/null (tar zcf 使用归档)

echo "已执行 $0 脚本,"

echo "共完成 $# 个对象的备份"

echo “具体内容包括: $*”

[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow

已执行 ./mybak.sh 脚本,

共完成 2 个对象的备份

具体包括:/etc/passwd /etc/shadow

[root@localhost ~]#vim myprog.sh

#!/bin/bash

# 这是一个显示位置变量和预定义变量的脚本

# 计算求和

A=$(expr $1 + $2 + $3 + $4 )

echo "命令行中位置变量的个数: $#"

echo "所有位置变量的内容:$*"

echo "第2个位置变量为:$2 "

echo "当前脚本的名称:$0"

echo "这4个数字的和为:$A"

[root@localhost ~]# chmod +x myprog.sh (给可执行权限)

[root@localhost ~]#./myprog.sh 10 20 30 40

[root@localhost ~]#./myprog.sh 10 20 30

[root@localhost ~]#./myprog.sh 10 20 30 40 50

93978ada7c913caaf3667dba96ce694e.png

01a3a1b8ad8954916bd9e5745bb472dc.png

362d6d3d892c5de8fb5a79402cff14d5.png

(发现当脚本后的位置变量不够或者多的话,有些是无法计算,或者无法显示的)

shell脚本与计划任务

一、脚本应用思路

(1)确定命令操作(设计并执行任务)

mysql数据库服务器 192.168.10.1

(得先安装mysql 数据库,或者mairadb也可以,mysql用源码包,mairadb用本地光盘yum源就可以)

[root@localhost ~]# netstat -anput | grep 3306

`(看一下mysql是否开启)`

[root@localhost ~]# mysql -uroot -p123

`(登录mysql,这里使用-p123密码登录,先设置一下密码在登陆)`

mysql> create database test1;

mysql> create database test2; `创建两个库一个test1,一个test2`

mysql> create table test1.student(id int not null,name varchar(8));

mysql> create table test2.student(id int not null,name varchar(8)); `分别在两个库里写下表`

mysql> grant all on test1.* to ‘test1‘@‘192.168.10.%‘ identified by ‘123‘;

mysql> grant all on test2.* to ‘test2‘@‘192.168.10.%‘ identified by ‘123‘; `分别赋权给两个库相应的mysql用户`

mysql> flush privileges; `更新数据库的用户数据与权限`

mysql> exit

客户机 192.168.10.2 (直接安装mariadb)

[root@localhost ~]# yum -y install mariadb

[root@localhost ~]# mysql -utest1 -p123 -h 192.168.10.1

先远程登录服务器看能不能登录

[root@localhost ~]# mysqldump -utest1 -p123 -h 192.168.10.1 test1 > test1.sql

远程数据库进行备份

[root@localhost ~]# ll test1.sql

[root@localhost ~]# cat test1.sql

查看是否备份成功

利用shell脚本进行远程备份

(1)使用不同用户对数据库 test1、test2进行远程备份

(2)每天 2:30执行备份

(3)每个库备份为独立的sql文件,压缩为“.tar.gz”格式的文件,文件中嵌套执行备份时的日期和时间

tar zcf *.tar.gz 源文件名称

date +%F-%H:%M (时间变量)

c58088e45f8a7e80584dea35ab80cf67.png

mysqldump -u用户名 -p密码 -h 目标主机 --databases 数据库名称 > *.sql

/usr/bin/tar zcf bf-$(date +%F-%H:%M:%S).tar.gz test1.sql

制作脚本

[root@localhost opt]# vim ly.sh

#!/bin/bash

`用户名`

user1="test1"

user2="test2"

`密码`

pass1="123"

pass2="123"

`数据库服务器主机ip`

data_host="192.168.10.1"

`数据库名称`

data1="test1"

data2="test2"

`备份名称`

dumpfile1="${data1}.sql"

dumpfile2="${data2}.sql"

`归档名称`

file1="${data1}-$(date +%F-%H-%M-%S).tar.gz"

file2="${data2}-$(date +%F-%H-%M-%S).tar.gz"

`备份时各参数连接`

conn_name1="-u$user1 -p$pass1 -h$data_host --databases $data1"

conn_name2="-u$user2 -p$pass2 -h$data_host --databases $data2"

` 备份数据库`

/usr/bin/mysqldump $conn_name1 > $dumpfile1

/usr/bin/mysqldump $conn_name2 > $dumpfile2

`归档`

/usr/bin/tar zcf /opt/$file1 $dumpfile1

/usr/bin/tar zcf /opt/$file2 $dumpfile2

设值计划任务(控制时间,调用任务脚本)

[root@localhost ~]# crontab -e (进入计划任务)

30 2 * * * source /opt/ly.sh `(每天的两点半执行脚本)`

Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库

标签:思路   技术   特殊变量   变化   变量赋值   空格   art   $()   需要

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/phyger/p/14069464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值