centos 数据库的备份

2016年5月13日

方法一:
创建备份的 目录
例如:
备份数据的存放目录

mkdir /root/mysql-data/

计划任务的脚本存放目录

mkdir /root/mysql-data/task

编辑脚本

vi mysql-backup.sh

写入如下内容:

db_user="root"
db_passwd="Ep&yicwCW8"

db_host="localhost"

# the directory for story your backup file.
backup_dir="/home/up/database/one/"

# date format for backup file (dd-mm-yyyy)
time="$(date +"%H-%M-%S-%m-%d-%y")"

# mysql, mysqldump and some other bin's path
MYSQL="/usr/bin/mysql"

MYSQLDUMP="/usr/bin/mysqldump"

MKDIR="/bin/mkdir"

RM="/bin/rm"

MV="/bin/mv"

GZIP="/bin/gzip"

# check the directory for store backup is writeable
test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0

# the directory for story the newest backup
test ! -d "$backup_dir/backup.0/" && $MKDIR "$backup_dir/backup.0/"
echo "Start to Backup...";

# get all databases
# don't backup information_schema.performance_schema
all_db="$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')"

all_db=${all_db//information_schema/};

all_db=${all_db//performance_schema/};

for db in $all_db

do

$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > "$backup_dir/backup.0/$time.$db.gz"

done

# delete the oldest backup

test -d "$backup_dir/backup.7/" && $RM -rf "$backup_dir/backup.7"

# rotate backup directory

for int in 6 5 4 3 2 1 0

do

if(test -d "$backup_dir"/backup."$int")

then

next_int='expr $int + 1'

$MV "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int"

fi

done
echo "BackUp Success!"
exit 0;

 

保存退出

修改文件属性,使其可执行

chmod +x /root/mysql-data/task/mysql_databak.sh

 

修改/etc/crontab #添加计划任务 在下面添加

vi /etc/crontab

 

30 21 * * * root /home/up/database/one/task/mysql-backup.sh #表示每天19点30分执行备份
30 21 28 * * root /home/up/database/one/task/mysql-backup.sh #表示每个月28号19点30分执行备份

重新启动crond使设置生效

/etc/rc.d/init.d/crond restart

#设为开机启动

chkconfig crond on

#启动

service crond start

 

每天你在/home/mysql_data目录下面可以看到类似00-46-18-04-19-12.mysql.gz
这样的压缩文件,如果需要恢复文件的时候,只需要把这个文件解压即可.
解压缩命令:gunzip 00-46-18-04-19-12.mysql.gz

解压的文件可以看作是 .sql 然后使用 source 命令将其导入 mysql 命令样式如下 :
source /home/mysql-data/backup.1/00-46-18-04-19-12.mysql

注: 该文件的导入如同 .sql 需要先选择数据库 在执行导入.如果表正在编辑 则备份当前表报错

1.crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务
2.cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)

3.记住几个特殊符号的含义:
"*"代表取值范围内的数字,
"/"代表"每",
"-"代表从某个数字到某个数字,
","分开几个离散的数字

任务调度设置文件的写法
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
Minute Hour Day Month Dayofweek command

分钟 小时 天 月 天每星期 命令
每个字段代表的含义如下:
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除了"Command"是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定.对于不指定的字段,要用"*"来填补其位置.
举例如下:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等.]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:","用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:"-"用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令. ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件.

30 21 30 * * root /home/up/database/one/task/webback.sh
30 1 * * 0 root /home/up/database/one/task/mysql.sh

*****************************************************************************
本地备份到其他主机

scp命令不输密码

在使用scp命令复制文件或ssh登陆到另一台主机时,会提示输入密码.但是在脚本里每次要输入密码比较麻烦,可以使用生成证书登陆.

1、在机器A上生成密钥对(均以root用户为例)

ssh-keygen -t rsa

 

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
22:2a:6a:31:b9:38:3e:c6:51:e8:b0:5e:a4:b9:7d:7d root@Client

首先提示密钥保存位置,按回车.然后提示输入证书的密码,按回车留空不设置.最后生成了私钥id_rsa和公钥id_rsa.pub.

2、将公钥证书id_rsa.pub复制到另一台机器(机器B)的root目录中/root/.ssh/authorized_keys,这样机器A就可以直接scp或ssh到机器B了.
将本地的或者需备份的主机的 id_rsa.pub 同步到备份主机 /root/.ssh/authorized_keys

#!/bin/bash
cd /home/data/www/htdocs
WebBakName=web_213.229.100.224_$(date +%y%m%d).tar.gz
#tar zcvf $WebBakName team6 team1 team2 team3 team4 team5 team7 other_team
tar zcvf $WebBakName team4
#ftp -nv 106.187.34.215 << EOF
#user backupftp 5!A$SqkGDx
#put $WebBakName
#quit
#EOF
#scp -r 109.75.163.202:/home/data/www/htdocs/$WebBackName /home/up/database
scp -r /home/data/www/htdocs/web_78.129.214.48_$(date +%y%m%d).tar.gz [email protected]:/home/up/database/78.129.214.48/web
rm -rf $WebBakName
#scp -r /home/up/database/one/backup.*/ [email protected]:/home/up/database/78.129.214.48/sql

 

#!/bin/bash
cd /home/data/www/htdocs
WebBakName=web_213.229.100.224_$(date +%y%m%d).tar.gz
#tar zcvf $WebBakName extend_cofree1 extend_cofree2 extend_cofree3 extend_other
tar zcvf $WebBakName
scp -r /home/data/www/htdocs/web_213.229.100.224_$(date +%y%m%d).tar.gz [email protected]:/home/up/database/213.229.100.224/web
rm -rf $WebBakName
#scp -r /home/up/database/one/backup.*/ [email protected]:/home/up/database/213.229.100.224/sql

 

没有评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注