2013-10-18 shell脚本练习题

回复 收藏

设计一个shell脚本来备份数据库,首先在本地服务器上保存一份数据,然后再远程拷贝一份,本地保存一周的数据,远程保存一个月。

假定,我们知道mysql root账号的密码,要备份的库为discuz,本地备份目录为/bak/mysql, 远程服务器ip为192.168.123.30,远程提供了一个rsync服务,备份的地址是 192.168.123.30::backup  . 写完脚本后,需要加入到cron中,每天凌晨3点执行。

参考答案:

#! /bin/bash

### backup mysql

### Writen by Aming.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/texlive/2012/bin/i386-linux:/usr/local/mysql/bin:/usr/local/mysql/bin:/root/bin

d1=`data +%w`

d2=`date +%d`

pass="your_mysql_password"

bakdir=/bak/mysql

r_bakdir=192.168.123.30::backup

exec 1>/var/log/mysqlbak.log 2>/var/log/mysqlbak.log

echo "mysql backup begin at `date +"%F %T"`."

mysqldump -uroot -p$pass --default-character-set=gbk discuz >$bakdir/$d1.sql

rsync -a $bakdir/$d1.sql $r_bakdir/$d2.sql

echo "mysql backup end at `date +"%F %T"`."

然后加入cron

0 3 * * * /bin/bash /usr/local/sbin/mysqlbak.sh

2013-10-18 14:00 举报
已邀请:
0

oszhang

赞同来自:

#!/bin/bash
myaqldump -uroot -p123456 discuz >/bak/mysql
myaqldump -uroot -p123456 -h192.168.123.30 discuz > 192.168.123.30::backup
0 3 * * * /bak/mysql
0 3 * * * 192.168.123.30::backup
0

Hello_Lemon

赞同来自:

本帖最后由 Hello_Lemon 于 2013-10-18 15:02 编辑

#!bin/sh

name=`date +%y%m%d`
name2=`date -d "5 days ago" +%y%m%d`
name3=`date -d "30 days ago" +$y$m$d`

#本地备份
mysqldump -uroot -p'password' discuz >/bak/mysql/$name

rm -rf /bak/mysql/$name2

#远程备份
rsync /bak/mysql/$name 192.168.123.30::backup

rsync --exclude=$name3 --filter="R $name3" delete-excluded --existing --ignore-existing . 192.168.123.30::backup       
#网上找的删除远程指定文件,没测试。。

crontab -e

0 3 * * * /bin/sh /bak/backup.sh
0

good

赞同来自:

看看
0

不断更新

赞同来自:

首先对本地服务器和192.168.123.30做ssh无密码验证
远程同步脚本:
vi mysqlbackup.sh
#!/bin/bash
date=`date =%F`
date7=`date -d "-7 day" +%F`
date30=`date -d "-30 day" +%F`
mysqldump -uroot -p'123456' discuz >/bak/mysql/"$date"mysql.sql
rsync -avL /bak/mysql/ root@192.168.123.30:/backup/
rm -rf /bak/mysql/"$date7"mysql.sql>/dev/null
ssh root@192.168.123.30 "rm -rf /backup/"$date30"mysql.sql"
加入任务计划:
crontab -e
0 3 * * *  /bin/bash /root/mysqlbackup.sh
0

ocean

赞同来自:

本帖最后由 ocean 于 2014-5-5 21:04 编辑

[root@OceanI sh]# cat mysqldump.sh
#!/bin/bash
#

dir=/bak/mysql
cd $dir

filename=`date +%F`
remote=`date +%F -d "30 days ago"`

# Remove old backups
find $dir -mtime +7 -exec rm -fr {} \; > /dev/null 2>&1

#Dump the database of discuz
mysqldump -uroot -ppasswd discuz > $filename

#Transfer the backup to the remote host
rsync /$dir/$name 192.168.123.30:/backup

[root@OceanI sh]# crontab -l
00 03 * * *  /bin/bash /root/sh/mysqldump.sh
0

Budweiser小王子

赞同来自:

复习
0

轩鹏

赞同来自:

111
0

木字当头

赞同来自:

0

zyfeifie

赞同来自:

#!/bin/bash
USER=root
PASSWORD=password
DBNAME=discuz
time=`date +%F`
mysqldump -u$USER -p$PASSWORD $DNAME | gzip -9 > /bak/mysql/$time.sql.gz
rsync -avpz /bak/mysql/  192.168.123.30::backup
find /bak/mysql -name “*.sql.gz” -mtime +7 | xargs rm -rf >/dev/null
crontab -e
0 3 * * * /bin/bash /pwd/mysql_backup.sh
备份机上
find /backup -name *.sql.gz -mtime +30 | xargs rm -rf > /dev/null
加到crontab里面去即可
0

泡沫。

赞同来自:

11111111111111
0

鸵鸟

赞同来自:

xx
0

huifeidexiaxia

赞同来自:

学学MYSQL
0

齐天大圣

赞同来自:

kankan
0

nihao426181

赞同来自:

^^^^^^^^^^^^^^^^^^^^^^^
0

齐天大圣

赞同来自:

又看了遍,觉得老师的答案挺不错{:4_91:}
0

追梦人

赞同来自:

SC
0

jade

赞同来自:

参考 学习...............
0

Agatha-cn

赞同来自:

study!。。
0

lidunhuai

赞同来自:

  1. #!/bin/bash
  2. #Backup the mysql for discuz
  3. backup_path=/bak/mysql
  4. date=`date +%Y%m%d`
  5. /usr/local/mysql/bin/mysqldump -uroot -pwpmysql --default-character-set=utf8 --single-transaction  --lock-tables=false $1 > $backup_path/mysql_$1_$date.sql
  6. find $backup_path/* -mtime +6 |xargs rm -rf
  1. /usr/bin/rsync -av --delete --password-file=/etc/rsync_passwd /bak/mysql/ rsync@192.168.123.30::backup
  1. 00 03 * * * /bin/bash  /root/script/mysql.sh discuz
  2. 00 04 * * * /bin/bash /root/script/rsync.sh
0

王肖强

赞同来自:

  1. #!/bin/bash
  2. # backup mysql for mysql.myDB.
  3. # Writen by Wangxiaoqiang 2014.11.25.
  4. # crontab -e { * 3 * * * sh /myscipts/backup.sh }

  5. mysqlDB=mydb
  6. sqluser=root
  7. sqlpasswd=123456
  8. bakpath=/data/sql

  9. mysqldump -u${sqluser} -p${sqlpasswd} -R ${mysqlDB} > ${bakpath}/`date +%F`_${mysqlDB}.sql

  10. expect -c "
  11.   spawn rsync -a /data/sql/2014-11-25_mydb.sql root@192.168.1.81:/data/sql_bak/
  12.   expect {
  13.     \"(yes/no)?\" { send \"yes\r\"; exp_continue }
  14.     \"password:\" { send \"123456\r\"; expect eof }
  15.   }
  16.   spawn ssh root@192.168.1.81
  17.   expect {
  18.     \"(yes/no)?\" { send \"yes\r\"; exp_continue }
  19.     \"password:\" { send \"123456\r\"; exp_continue }
  20.     \"#\" { send \"find /data/sql_bak/ -type f -name *.sql -mtime +30 | xargs -i rm -f {}\rexit\r\" ; expect eof }
  21.   }
  22. "
  23. find ${bakpath} -type f -name *.sql -mtime +7 -exec rm -f {} \;


这种很蹩脚的方法可以实现了 ,还可以优化到更好。
0

xuyl

赞同来自:

学习,学习。。。
0

zhangw

赞同来自:

学习下
0

zq13054480665

赞同来自:

看看
0

2422606568

赞同来自:

学习
0

yaabb163

赞同来自:

ddddddddd
0

cmzsteven

赞同来自:

{:4_91:}
0

黑色的梦

赞同来自:

1
0

wuhen

赞同来自:

看看
0

wuhen

赞同来自:

#/bin/bash
d1=`date +%F`
d2=`date -d '-7days' +%F`
d3=`date -d '-30days' +%F`
d=root
p=passwd
mysqldump -u$d -p$p discuz >/bak/mysql/$d1.sql
rm -rf /bak/mysql/$d2
rsync -av /bak/mysql/$d1.sql 192.168.123.30::backup/$d1.sql
远程主机上执行rm -rf /bak/mysql/$d3
0

GAARA

赞同来自:

{:4_109:}
0

qq20847697

赞同来自:

!!!!!!!!!!!!!!!
0

寻@轨迹

赞同来自:

看看答案
0

hehong

赞同来自:

看一下
0

dantes

赞同来自:

#! /bin/bash datedir=`date +%Y%m%d` datedir7=`date -d  ‘-7 day’ +%Y%m%d` cd /bak/mysql mysqldump -uroot -pxxxx  wordpress > wordpress.$datedir  rm -rf  wordpress.$datedir7 rsync -av /bak/mysql  test@xx.xx.xx.xx::backup     --password-file=/etc/web.passwd
0

Wagskun

赞同来自:

看看
0

hangtiangazi

赞同来自:

看看
0

wangdi244

赞同来自:

#!/bin/bash
#
mkdir -p bak/mysql
mysqldump -uroot -p'123456' discuz >/bak/mysql/discuz.bak.`date +%Y%m%d`
rsync -av  discuz.bak root@192.168.1.108::backup

本地cron
0 3 * * * /bin/sh /root/rsync_discuz.sh
* * * * * 5 /bin/rm -rf /bak/mysql/discuz.bak.`date -d "5 days ago" +%y%m%d`

远程cron:* * 1 1 * * /bin/rm -rf discuz.bak.`date -d "30 days ago" +$y$m$d`
0

苏苏苏苏

赞同来自:

支持阿铭111
0

sss

赞同来自:

本帖最后由 sss 于 2015-6-4 15:06 编辑

#!/bin/bash
#backup mysql
#Up to a remote server
time=`date +%F`
time2=`date -d "10 days ago" +%F`
mysqldump -u root -p `123456` discuz > /bak/mysql/$time
rm -rf /bak/mysql/$time2
rsync /bak/mysql/$time 192.168.123.30::backup
crontab -e
0 3 * * * /bin/sh /bak/backup.sh
0

sss

赞同来自:

  1. #!/bin/bash
  2. #backup mysql
  3. #Up to a remote server

  4. time=`date +%F`
  5. time2=`date -d "10 days ago" +%F`

  6. mysqldump -u root -p `123456` discuz > /bak/mysql/$time

  7. rm -rf /bak/mysql/$time2

  8. rsync /bak/mysql/$time 192.168.123.30::backup

  9. crontab -e
  10. 0 3 * * * /bin/sh /bak/backup.sh


0

一岁拽起

赞同来自:

看看学习一下
0

qin521ne

赞同来自:

1
0

hyc123

赞同来自:

看看学习
0

tjlygdx

赞同来自:

看一下
0

andreking

赞同来自:

学习下
0

huchiwen

赞同来自:

进来学习
0

丶小作

赞同来自:

kk
0

iwannachange

赞同来自:

1
0

iwannachange

赞同来自:

1
0

鑫柏

赞同来自:

kankan
0

剑在飞

赞同来自:

{:4_93:}{:4_92:}{:4_91:}
0

一笑而过

赞同来自:

{:4_91:}
0

307141950

赞同来自:

kjankan
0

哈哈琨少

赞同来自:

学习学习

0

xebszw

赞同来自:

1
0

liang1990

赞同来自:

mysqldump -uroot -p123456 discuz > /bak/mysql/discuz`date +%F`.sql
* 3 * * * rsync -avL /bak/mysql/ user@ 192.168.123.30::backup
0

渐行渐远

赞同来自:

学习
0

放牛

赞同来自:

{:7_173:}
0

timfeng3535

赞同来自:

dd
0

ifconfig2

赞同来自:

学习学习
0

wudi61

赞同来自:

学习
0

汤小东

赞同来自:

learn
0

Shawn

赞同来自:

mysqldump -uroot -p'password' discuz >/bak/mysql;rsync -av /bak/mysql 192.168.123.30::backup;设置时间差值,ifd1=7,rm -rf/bak/mysql ···;不过应该还考虑第二天备份的数据和不和前一天重复吧。
0

tutu

赞同来自:

q
0

Rohero

赞同来自:

学习
0

Rohero

赞同来自:

老师,exec 1>/var/log/mysqlbak.log 2>/var/log/mysqlbak.log 是什么意思?
0

ldp840611

赞同来自:

看看
0

石头

赞同来自:

{:4_91:}
0

ヾSun

赞同来自:

学习一下
0

wanjj

赞同来自:

ding
0

hlymlv

赞同来自:

看看
0

ringle000

赞同来自:

学习下
0

licengceng

赞同来自:

学习
0

lin19890913

赞同来自:

看看
0

lyhabc

赞同来自:

d=`date -d "- 1day" +"%F-%T"`   #日期这里要注意,一定要"%F-%T" 否则生成的文件 是2016-01-27 18:33:33.sql 中间有空格会报错
bash: /tmp/discuz.$d.sql: ambiguous redirect
/usr/local/mysql/bin/mysqldump -uroot -p123456 --single-transaction --databases discuz > /bak/mysql/discuz.$d.sql|gzip -f /bak/mysql/discuz.$d.sql
rsync -a /bak/mysql/*  192.168.123.30::backup
find /bak/mysql/ -name '*.gz' -mtime +7 -type f |xargs rm -f
0

lyhabc

赞同来自:

感觉铭哥用太多变量  
0

KICAZ629

赞同来自:

qq
0

jokerhuman

赞同来自:

学习
0

落涧飞鹰

赞同来自:

看看
0

thedawn

赞同来自:

1
0

maria

赞同来自:


0

ruhua

赞同来自:

{:5_136:}
0

xteplinux

赞同来自:

{:4_91:}
0

lin13750529011

赞同来自:

看看
0

北辰星

赞同来自:

学习
0

sy0258

赞同来自:

看看
0

q913555

赞同来自:

学习了
0

gxp2008

赞同来自:

  1. #!/bin/bash
  2. ## gxp is mysql bak rsync
  3.        echo "It\'s OK"
  4. ## 2016-03-08

  5. mysqldump -uroot --databases mysql > /tmp/bak/mysql/`date +%F`.sql
  6. a=`echo $?`
  7. if [$a -eq 0]
  8.   then
  9.        echo "mysql bacakup error"
  10.   else
  11.        echo "It's OK"
  12. fi
  13. rsync -avzP --port 8730 --password-file=/etc/rsync_pass.txt /tmp/bak/mysql/`date
  14. +%F`.sql aming@192.168.193.130::backup
  15. b=`echo $?`
  16. if [$b -eq 0]
  17.   then
  18.        echo "rsync remote error"
  19.   else
  20.        echo "It's OK"
  21. fi     
0

zmh0415

赞同来自:

#!/bin/bash
[  -f /bak/mysql ] || [ mkdir /bak/nysql ]
mysqldump -uroot -p discuz > /bak/mysql/discuz_`date +%F`
/usr/bin/rsync -t /bak/mysql root@192.168.123.30::backup

crontab -e
3 * * * * /usr/bin/bash bak.sh
0

zyos

赞同来自:

kan kan
0

cxiaodian

赞同来自:

good
0

online189

赞同来自:

学习了
0

linux-小莫

赞同来自:

学习
0

qiqige

赞同来自:

。。

0

wangzai

赞同来自:

学习
0

qq895933723

赞同来自:

kankan
0

starry

赞同来自:

# cat /usr/local/sbin/rsync-mysql-discuz.sh
#!/bin/bash

dt=`date +%F`
/bin/mkdir /data/backup 2> /dev/null
/usr/bin/mysqldump -uroot -p123456 discuz> /data/backup/discuz_$dt.sql
/usr/bin/rsync -av --password-file=/etc/rsync.passwd /data/backup/discuz_$dt.sql repl@192.168.0.161::backup/

/bin/find /data/backup/ -name "discuz*.sql" -mtime +7 -exec rm -f {} \;
/usr/bin/ssh root@192.168.0.161 "find /data/backup/ -name "discuz*.sql" -mtime +30 -exec rm -f {} \;"
--------------------------------------分割线--------------------------------------
# crontab -l
* 3 * * * /bin/sh /usr/local/sbin/rsync-mysql-discuz.sh

先粗略的写了下


0

andyaaa

赞同来自:

{:4_91:}
0

Linuxpp

赞同来自:

good
0

huguihua2002

赞同来自:

look

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: