[root@vm***** wewang]# ls
autobackupmysql_qas.sh qas_db_bak
打开脚本文件:
[root@vm***** wewang]# vi autobackupmysql_qas.sh
在脚本中添加内容:
#!/bin/bash backupdir=/home/**/wewang/qas_db_bak Now=$(date +"%Y-%m-%d--%H:%M:%S") /usr/bin/mysqldump -u ghs -pacxiom qas|gzip > $backupdir/qas_bak_$Now.sql.gz find $backupdir -name "qas_bak_*.sql.gz" -type f -mtime +10 -exec rm {} ; > /dev/null 2>&1 |
:wq 返回退出后,对文件进行执行权限的更改,保证脚本可以被执行:
[root@vm***** wewang]# chmod +xautobackupmysql_qas.sh
截图如下:
解析:
name:自定义备份文件前缀标识。
-type f 表示查找普通类型的文件,f表示普通文件。
-mtime +10 按照文件的更改时间来查找文件,+10表示文件更改时间距现在10天以前;如果是 -mmin +10 表示文件更改时间距现在5分钟以前。
-exec rm {} ; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个,最后是一个分号。
/dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的&表示让该命令在后台执行。
Step 2: 更改定时执行脚本,这里有两种case:
Case 1: 一般情况。打开自动执行文件 /etc/crontab,在crontab文件中加入如下内容,让其自动执行任务
[root@vm10074 wewang]# vi /etc/crontab
添加如下代码:
这里的例子是每小时26分的时候执行:
26 * * * * root /home/**/wewang/autobackupmysql_qas.sh
若是每天三点执行,则:
00 3 * * * root /home/**/wewang/autobackupmysql_qas.sh
Case 2: Redhat情况。(也就是当前用的Linux系统)将刚才编辑的脚本复制到相应的目录即可
[root@vm***** wewang]# cp autobackupmysql_qas.sh /etc/cron.daily/ |
截图如下:
解析: 这里是每天4点28分左右才执行,但是这个job执行的时间也是随机的。
Redhat的crontab采用按时间调用4个目录(
/etc/cron.hourly:每小时;
/etc/cron.daily:每天;
/etc/cron.weekly:每周;
/etc/cron.monthly:每月)中脚本出来运行的方式。
Step 3: 重启etc
[root@vm10074 wewang]# /etc/rc.d/init.d/crondrestart
Stopping crond: [ OK ]
Starting crond: [ OK ]
定时备份的效果如下:
Ps: 如果想要解压查看,则通过命令查看:gunzip -c qas-bak-2015-07-30--04:29:02.gz > 1.bak
版权声明:本文为博主原创文章,未经博主允许不得转载。
程序猿(媛)Shell脚本必备技能之一: 在Linux下如何自动备份mysql数据
标签:shell linux mysql 自动备份
小编还为您整理了以下内容,可能对您也有帮助:
linux备份mysql
mysql如何备份和还原数据库?
备份数据库使用mysqlmp命令备份数据库复制代码代码如下:#如果要将game数据库进行备份:mysqlmp-uroot-pgame>game_backup.sql#如果希望备份所有的数据库:mysqlmp-uroot-p--all-databases>all_backup.sql还原数据库
1、使用mysql命令还原数据库将game_backup.sql还原至game数据库:复制代码代码如下:mysql-uroot-pgamegame_backup.sql
2、使用source命令还原数据库如果数据库过大,建议可以使用source命令复制代码代码如下:mysql>sourcegame_backup.sql
mysql备份问题,mysql版本5.7.2?
1、你用mysqlpump压缩备份lz4的后缀名不应该是sql,你要.lz4才行。
mysqlpump--compress-output=LZ4>mp.lz4
lz4_decompressmp.lz4mp.txt
2、mysqlpump和mysqlmp一样,属于逻辑备份,备份以SQL形式的文本保存。
3、这个没啥好建议,你数据库太大了,本来还想说用XtraBackup工具,但是这个只支持linux系统。
MySQL中,备份数据库的命令是?
使用mysqlmp工具进行备份:
1)备份所有数据库:$mysqlmp-uroot-p--all-database>all.sql(2)备份数据库test$mysqlmp-uroot-ptest>test.sql(3)备份数据库test下的表emp$mysqlmp-uroot-ptestemp>emp.sql(4)备份数据库test下的表emp和dept$mysqlmp-uroot-ptestempdept>emp_dept.sql
Mysql实时备份实现方法?
数据备份是数据容灾的最后一道防线,即便有着两地三中心的架构,备份也依然重要。如果备份出问题,备份时影响了交易业务,备份数据无法恢复,这些也是企业难以承受的。所以选择合适的备份工具尤为重要。
每个企业级数据库都会有配套的备份工具,MEB(MySQLEnterpriseBackup)就是MySQL企业版中非常重要的工具之一,是为企业级客户提供的数据备份方案。
Xtrabackup一直作为MEB开源版备胎而存在,从MySQL8.0开始情况可能会变得有所不同。
在MySQL8.0的BackupLock、RedoLogArchiving、PageTracking等新特性的加持下,MEB备份/恢复体验会更好,目前xtrabackup还不支持这些特性。
MySQL企业版还有哪些功能?
特性1:BackupLock
8.0之前使用xtrabackup或MEB做物理备份,为了保证备份时InnoDB引擎表与其他引擎数据文件、及binlog日志的一致性会上全局读锁,再拷贝非InnoDB文件,这期间MySQL会变成只读,数据无法写入。表数量越多,可能加上时间越长,如果使用的xtrabackup不小心没加rsync参数,逐个拷贝frm文件,锁定时间会更长,对业务影响较大。
我曾遇到过部署在虚拟机的实例有12000多张表,当时使用的xtrabackup,备份脚本中没加rsync参数,结果锁了十几分钟,而MEB就没有这样的问题。
MySQL8.0支持轻量级备份锁LOCKINSTANCEFORBACKUP,数据字典也重构了由InnoDB存储。若不创建非InnoDB表,MEB默认使用备份锁获取binlog日志一致性位置,并阻止DDL操作,但不影响DML操作。
只有InnoDB表,仅上备份锁
若有非InnoDB表,上全局锁
特性2:RedoLogArchiving
MEB能做到在线热备,备份时不影响数据库读写,这是利用了InnoDB事务日志,在备份期间持续监视redolog的变化,读取增量变化,写入到ibbackup_logfile,也就不需要上锁来保障备份一致性。(对非InnoDB的文件需要上读锁拷贝)
如果备份期间数据库写入负载特别大,而写入ibbackup_logfile速度较慢,redologsize也不大,很可能会出现ibbackup_logfile的写入速度跟不上redolog记录生成速度,redolog空间不够时需要覆写日志文件,那么来不及写入ibbackup_logfile的记录会丢失,导致备份失败。
MEB4.1对此做了优化,将redolog处理线程拆分成多线程分工合作,提高处理redolog的效率,降低了redolog覆写造成备份失败的概率,但redolog新增速度和ibbackup_logfile写入速度悬殊太大,问题依然会发生。
MySQL8.0.17支持了redologarchiving彻底解决了此问题,备份前设置innodb_redo_log_archive_dirs,指定redolog归档目录。MEB备份时自动开启日志归档,当checkpoint时会将旧记录归档到此目录,后续从归档文件中读取redo日志记录,避免了覆写可能导致的redo记录丢失。
注意:innodb_redo_log_archive_dirs不能在数据目录下,目录权限要求是700
特性3:PageTracking
PageTracking是为优化增量备份效率,减少不必要的数据页扫描。
增量备份当前有3种扫描模式:
page-track:利用LSN精确跟踪上次备份之后被修改页面,仅复制这些页面,效率最快。
optimistic:扫描上次备份之后被修改的InnoDB数据文件中,找出并拷贝修改的页面。依赖系统时间,使用存在。
full-scan:扫描所有InnoDB数据文件,找出并拷贝自上次备份之后修改的页面,效率最慢
1、利用page-track增量备份,需先安装备份组件
2、在全备前开启page-track
3、全备之后,做增量备份时指定若满足pagetracking条件,默认会使用page-track模式,否则会使用full-scan模式,也可以指定--incremental=page-track。
incremental-base有3种选择
last_backup:基于前一次备份做增备,前一次备份可能是增备,也可能是全备。这种方式全备之间可能会有多个增备,每次增量可能比较小,但恢复时需要逐个合并。
last_full_backup:基于前一次全备做增备。这种方式增备会越往后体积可能越大,但恢复时只需要合并最后一次增量备份。
dir:基于前一次的备份目录,前一次备份可能是增备,也可能是全备。
测试对比full-scan和page-track,在变更页小于总体50%的情况下,备份效率至少能有1倍的速度提升。
page-track模式磁盘读写均衡,说明读写的都是修改页面。
full-scan模式磁盘读写差别很大,说明读了很多未修改的页面。
关于linux如何实现mysql数据库每天自动备份与定时备份的示例详解
备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。这篇文章主要介绍了linux实现mysql数据库每天自动备份定时备份,需要的朋友可以参考下
概述
备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。而对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!
备份是什么?
为什么要备份
容灾方案建设
存储介质
光盘
磁带
硬盘
磁盘阵列
DAS:直接附加存储
NAS:网络附加存储
SAN:存储区域网络
云存储
这里主要以本地磁盘为存储介质讲一下计划任务的添加使用,基本的备份脚本,其它存储介质只是介质的访问方式可能不大一样。
1、查看磁盘空间情况:
既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果!
存储到当前磁盘这是最简单,却是最不推荐的;服务器有多块硬盘,最好是把备份存放到另一块硬盘上;有条件就选择更好更安全的存储介质;
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 46G 1.6G 97% /
tmpfs 1.9G 92K 1.9G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 534G 3.6G 503G 1% /home2、创建备份目录:
上面我们使用命令看出/home下空间比较充足,所以可以考虑在/home保存备份文件;
cd /home
mkdir backup
cd backup3、创建备份Shell脚本:
注意把以下命令中的DatabaseName换为实际的数据库名称;
当然,你也可以使用其实的命名规则!
vi bkDatabaseName.sh输入/粘贴以下内容:
#!/bin/bash
mysqlmp -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql对备份进行压缩:
#!/bin/bash
mysqlmp -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz注意:
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把 DatabaseName 替换为实际的数据库名;
4、添加可执行权限:
chmod u+x bkDatabaseName.sh添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;
./bkDatabaseName.sh
5、添加计划任务
检测或安装 crontab
确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
# crontab
-bash: crontab: command not found如时没有安装 crontab,需要先安装它,具体步骤请参考:
CentOS下使用yum命令安装计划任务程序crontab
使用rpm命令从CentOS系统盘安装计划任务程序crontab
添加计划任务
执行命令:
crontab -e这时就像使用vi编辑器一样,可以对计划任务进行编辑。
输入以下内容并保存:
*/1 * * * * /home/backup/bkDatabaseName.sh具体是什么意思呢?
意思是每一分钟执行一次shell脚本“/home/backup/bkDatabaseName.sh”。
6、测试任务是否执行
很简单,我们就执行几次“ls”命令,看看一分钟过后文件有没有被创建就可以了!
如果任务执行失败了,可以通过以下命令查看任务日志:
# tail -f /var/log/cron输出类似如下:
Sep 30 14:01:01 bogon run-parts(/etc/cron.hourly)[2503]: starting 0anacron
Sep 30 14:01:01 bogon run-parts(/etc/cron.hourly)[2512]: finished 0anacron
Sep 30 15:01:01 bogon CROND[3092]: (root) CMD (run-parts /etc/cron.hourly)
Sep 30 15:01:01 bogon run-parts(/etc/cron.hourly)[3092]: starting 0anacron
Sep 30 15:01:02 bogon run-parts(/etc/cron.hourly)[3101]: finished 0anacron
Sep 30 15:50:44 bogon crontab[3598]: (root) BEGIN EDIT (root)
Sep 30 16:01:01 bogon CROND[3705]: (root) CMD (run-parts /etc/cron.hourly)
Sep 30 16:01:01 bogon run-parts(/etc/cron.hourly)[3705]: starting 0anacron
Sep 30 16:01:01 bogon run-parts(/etc/cron.hourly)[3714]: finished 0anacron
Sep 30 16:15:29 bogon crontab[3598]: (root) END EDIT (root)总结
如何在linux下实现mysql数据库每天自动备份
方法/步骤
1. 在根目录下新建定时备份存储文件夹mkdir /mysql_backup
2.新建备份的脚本vim /root/mysql_backup.sh
3.在mysql_backup.sh中输入内容:
backupdir=/mysqlbackup time=` date +%Y%m%d%H`mysqlmp -uroot -proot abc | gzip > $backupdir/abc$time.sql.gzfind $backupdir -name “abc*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1
——————————————————————————————
说明:
backupdir = 备份文件存储文件夹time = 获取当前时间 年月日时(2014111417)2014年11月14日17点mysqlmp 备份数据库指令 abc要备份的数据库find $backupdir -name “abc*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1 删除5天前的备份文件
3 :wq 文件保存成功后
先按一下键盘上的 " esc " 然后输入 ” :wq “
执行一下脚本,看根目录下的mysql_backup文件夹是否有.sql.gz后缀名的文件
./mysql_backup.sh
写入每天的定时任务 修改 /etc/crontabvi /etc/crontab
按键盘上的"i",开始输入
02 4 * * * root /root/mysql_backup.sh
表示每天4点2分执行备份任务
先按一下键盘上的 " esc " 然后输入 ” :wq “ 表示保存
重新启动crond
service crond restart 或 /etc/rc.d/init.d/crond restart
linux怎么备份数据库(linux如何备份mysql数据库)
一、使用mysql相关命令进行简单的本地备份
1mysqllmp命令
mysqlmp是采用SQL级别的备份机制,它将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
使用mysqlmp进行备份非常简单,如果要备份数据库”db_backup”,使用命令:
#mysqlmp_u-pphpbb_db_backup
还可以使用gzip命令对备份文件进行压缩:
#mysqlmpdb_backup|gzip
只备份一些频繁更新的数据库表:
##mysqlmpsample_dbarticlescommentslinks
上面的命令会备份articles,comments,和links三个表。
恢复数据使用命令:
#mysql_u-pdb_backup
注意使用这个命令时必须保证数据库正在运行。
2使用SOURCE语法
其实这不是标准的SQL语法,而是mysql客户端提供的功能,例如:
#SOURCE/tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是mysqld运行用户(例如nobody)有权限读取的文件。
3备份
只能用于备份MyISAM,并且只能运行在linux和Unix和NetWare系统上。支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:
#-h=localhost-u=goodcjh-p=goodcjhdb_name/tmp
(把数据库目录db_name拷贝到/tmp下)
注意,想要使用,必须要有SELECT、RELOAD(要执行FLUSHTABLES)权限,并且还必须要能够有读取datadir/db_name目录的权限。
还原数据库方法:
备份出来的是整个数据库目录,使用时可以直接拷贝到mysqld指定的目录(在这里是/usr/local/mysql/data/)目录下即可,同时要注意权限的问题,另外首先应当删除数据库旧副本如下例:
#/bin/rm-rf/mysql-backup/**//*old
关闭mysql服务器、复制文件、查询启动mysql服务器的三个步骤:
#/etc/init.d/mysqldstop
StoppingMySQL:[OK]
#cp-af/mysql-backup/**//*/var/lib/mysql/
#/etc/init.d/mysqldstart
StartingMySQL:[OK]
#chown-Rnobody:nobody/usr/local/mysql/data/(将db_name目录的属主改成mysqld运行用户)
二、使用网络备份
将MYSQL数据放在一台计算机上是不安全的,所以应当把数据备份到局域网中其他Linux计算机中。假设Mysql服务器IP地址是:192.168.1.3。局域网使用Linux的远程计算机IP地址是192.168.1.4;类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。linux系统NFS服务端配置方法如下:
(1)修改/etc/exports,增加共享目录
/export/home/sunky192.168.1.4(rw)
/export/home/sunky1*(rw)
/export/home/sunky2linux-client(rw)
linux怎么备份数据库(linux如何备份mysql数据库)
一、使用mysql相关命令进行简单的本地备份
1mysqllmp命令
mysqlmp是采用SQL级别的备份机制,它将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
使用mysqlmp进行备份非常简单,如果要备份数据库”db_backup”,使用命令:
#mysqlmp_u-pphpbb_db_backup
还可以使用gzip命令对备份文件进行压缩:
#mysqlmpdb_backup|gzip
只备份一些频繁更新的数据库表:
##mysqlmpsample_dbarticlescommentslinks
上面的命令会备份articles,comments,和links三个表。
恢复数据使用命令:
#mysql_u-pdb_backup
注意使用这个命令时必须保证数据库正在运行。
2使用SOURCE语法
其实这不是标准的SQL语法,而是mysql客户端提供的功能,例如:
#SOURCE/tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是mysqld运行用户(例如nobody)有权限读取的文件。
3备份
只能用于备份MyISAM,并且只能运行在linux和Unix和NetWare系统上。支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:
#-h=localhost-u=goodcjh-p=goodcjhdb_name/tmp
(把数据库目录db_name拷贝到/tmp下)
注意,想要使用,必须要有SELECT、RELOAD(要执行FLUSHTABLES)权限,并且还必须要能够有读取datadir/db_name目录的权限。
还原数据库方法:
备份出来的是整个数据库目录,使用时可以直接拷贝到mysqld指定的目录(在这里是/usr/local/mysql/data/)目录下即可,同时要注意权限的问题,另外首先应当删除数据库旧副本如下例:
#/bin/rm-rf/mysql-backup/**//*old
关闭mysql服务器、复制文件、查询启动mysql服务器的三个步骤:
#/etc/init.d/mysqldstop
StoppingMySQL:[OK]
#cp-af/mysql-backup/**//*/var/lib/mysql/
#/etc/init.d/mysqldstart
StartingMySQL:[OK]
#chown-Rnobody:nobody/usr/local/mysql/data/(将db_name目录的属主改成mysqld运行用户)
二、使用网络备份
将MYSQL数据放在一台计算机上是不安全的,所以应当把数据备份到局域网中其他Linux计算机中。假设Mysql服务器IP地址是:192.168.1.3。局域网使用Linux的远程计算机IP地址是192.168.1.4;类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。linux系统NFS服务端配置方法如下:
(1)修改/etc/exports,增加共享目录
/export/home/sunky192.168.1.4(rw)
/export/home/sunky1*(rw)
/export/home/sunky2linux-client(rw)
linux下如何备份还原mysql数据库_MySQL
本文介绍了linux下如何备份与恢复mysql数据库。
数据库备份是非常重要的。如果定期做好备份,这样就可以在发生系统崩溃时恢复数据到最后一次正常的状态,把损失减小到最少。
一、用命令实现备份
MySQLl提供了一个mysqlmp命令,我们可以用它进行数据备份。
按提示输入密码,这就把tm数据库所有的表结构和# mysqlmp -u root -p tm > tm_050519.sql数据备份到tm_050519.sql了,因为要总进行备份工作,如果数据量大会占用很大空间,这时可以利用gzip压缩数据,命令如下:
# mysqlmp -u root -p tm | gzip > tm_050519.sql.gz系统崩溃,重建系统时,可以这样恢复数据:
# mysqlmp -u root -p tm < tm_050519.sql从压缩文件直接恢复:
#gzip < tm_050519.sql.gz | mysqlmp -u root -p tm当然,有很多MySQL工具提供更直观的备份恢复功能,比如用phpMyAdmin就很方便。但我认为,mysqlmp是最基本、最通用的。
二、利用crontab,系统每天定时备份mysql数据库
利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。
1、创建保存备份文件的路径/var/backup/mysqlbak
# mkdir -p /var/backup/mysqlbak2、创建/usr/sbin/bakmysql文件
#vi /usr/sbin/bakmysql.sh
#!/bin/bash# mysql备份脚本cd /var/backup/mysqlbak/dateDIR=`date +"%y-%m-%d"`mkdir -p $dateDIR/datafor i in `/usr/local/www/mysql/bin/mysql -uroot -plin31415926 -e "show databases" | grep -v "Database" | grep -v "information_schema"`do /usr/local/www/mysql/bin/mysqlmp -uroot -plin31415926 $i | gzip > /var/backup/mysqlbak/$dateDIR/${i}_${dateDIR}.gzdone3、修改文件属性,使其可执行
# chmod +x /usr/sbin/bakmysql4、修改/etc/crontab
# crontab -e在下面添加01 3 * * * root /usr/sbin/bakmysql#表示每天3点钟执行备份
这样每天就可以在/var/backup/mysqlbak下看到备份的sql文件 了!
Linux下mysql数据库备份方法
通过mysql提供的功能
导出
命令:
mysqlmp -u 用户名 -p 数据库 数据库.sql
示例:
代码如下 复制代码
mysqlmp -u root -p db1 db1.sql(将数据库db1备份到db1.sql中)
提示输入密码,完成即可。
导入
需要先创建一个空数据库
mysql -u root -p(输入密码后进入mysql)
create database db1;(创建一个名为db1的数据库)
exit(退出mysql)
命令:
mysql -u 用户名 -p 数据库 数据库.sql
示例:
代码如下 复制代码
mysql -u root -p db1 db1.sql(从备份文件db1.sql中导入数据到数据库db1中)
提示输入密码,完成即可。
通过拷贝文件
如果数据库特别大,可以使用拷贝的方式进行备份,不过不同的操作系统间可能会导致不兼容。
导出
进入mysql目录,打包需要备份的数据库目录
示例:
代码如下 复制代码
cd /var/lib/mysql(进入mysql目录)
tar -zcvf db1.tar.gz db1(打包db1目录,如果提示没有权限,在前面加上sudo,提示输入密码后即可)
导入
首先创建一个空数据库,将打包的文件拷贝到mysql目录后解压
示例:
代码如下 复制代码
mysql -u root -p(输入密码后进入mysql)
create database db1;(创建一个名为db1的数据库)
exit(退出mysql)
cp db1.tar.gz /var/lib/mysql(将打包文件拷贝到mysql目录下)
cd /var/lib/mysql(进入mysql目录)
tar -zxvf db1.tar.gz(解压到当前目录)
后现在linux中脚本
代码如下 复制代码
#!/bin/bash
#Mysql autobackup shell#write by tuspark.cn
#-------------------数据库相关的用户名、密码、需要备份的数据库名、备份目录等
dbuser=root
dbpasswd=XXXXX
dbserver=localhost
dbname=XXXXX
dbopt=--opt
backupdir=/dcbackup/
#-------------------是否开启FTP远程备份,0为否,1为是。
copytoftp=1
ftpserver=XXXXX
ftpuser=XXXXX
ftppasswd=XXXXX
#-------------------以下参数
fileprefix=dcradiusmp
filename=$backupdir`date +%F`.sql
newfile=$fileprefix-`date +%F`.tar.gz
keepdays=10
#-------------------以下为备份时的日志
logfile=/var/log/mysqlbackup.log
logtmp=/var/log/mybackup.tmp
#===============================================
if [ ! -d $backupdir ]
then
echo "$backupdir is not exist, then make ..." $logfile
mkdir -p $backupdir
fi
echo "start===================================="$logfile
echo "Beginning backup `date '+%F %T'`" $logfile
echo "Delete $keepdays days ago files ..." $logfile
find $backupdir -name $fileprefix* -mtime +$keepdays -fls $logtmp -exec rm {} ;
echo "Deleted Backup file is :"$logfile
cat $logtmp $logfile
echo "Delete old file Success!" $logfile
if [ -f $backupdir$newfile ]
then
echo "$newfile backup exist, backup stop ..." $logfile
else
if [ -z $dbpasswd ]
then
mysqlmp -u$dbuser -h$dbserver $dbopt $dbname $mpfilename
else
mysqlmp -u$dbuser -p$dbpasswd -h$dbserver $dbopt $dbname $mpfilename
fi
tar czvf $backupdir$newfile $mpfilename $logfile 21
echo "$backupdir$newfile Backup Success!" $logfile
rm -fr $mpfilename
if [ $copytoftp = 1 ]; then
if [ -z $ftpserver ];then
echo "Ftp Server not set,Copy to Ftp Failed ..." $logfile
exit 1
elif [ -z $ftpuser ];then
echo "Ftp user not set, Copy to Ftp Failed ..." $logfile
exit 2
elif [ -z $ftppasswd ]; then
echo "Ftp password not set, Copy to Ftp Failed ..." $logfile
exit 3
else
echo "Start copy to Ftp server ...." $logfile
ftp -n$logfile
fi