Bash脚本,用于运行mysqldump,对一个表进行常规备份,其中包含1天前创建的行
下面是我放在cronjob上的BASH(版本4.1.2)脚本,该脚本每天23:59运行,用于备份包含当天创建的记录的表Bash脚本,用于运行mysqldump,对一个表进行常规备份,其中包含1天前创建的行,mysql,linux,bash,Mysql,Linux,Bash,下面是我放在cronjob上的BASH(版本4.1.2)脚本,该脚本每天23:59运行,用于备份包含当天创建的记录的表 /usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where="acctstarttime LIKE '2016-12-28%'" > /dbbackup/`date +%F`-salestable1.sql 这里的
/usr/bin/mysqldump --single-transaction --no-create-db
--no-create-info databasename salestable1
--where="acctstarttime
LIKE '2016-12-28%'" > /dbbackup/`date +%F`-salestable1.sql
这里的问题是我必须手动更改mysql中手动执行命令的日期部分,如“2016-12-28%”
如何构造当前脚本,使其能够备份在特定日期创建的记录表,而无需手动更改日期
我的案子的解决方案
您可以尝试引入一个变量,即: 脚本:
root@h1 ~# cat backup_table.sh
#!/bin/bash
DATE=$(date +%F)
echo "/usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where="acctstarttime LIKE \'${DATE}%\'" > /dbbackup/`date +%F`-salestable1.sql"
root@h1 ~# bash backup_table.sh
/usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where=acctstarttime LIKE '2016-12-28%' > /dbbackup/2016-12-28-salestable1.sql
启动了带有动态日期的脚本:
root@h1 ~# cat backup_table.sh
#!/bin/bash
DATE=$(date +%F)
echo "/usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where="acctstarttime LIKE \'${DATE}%\'" > /dbbackup/`date +%F`-salestable1.sql"
root@h1 ~# bash backup_table.sh
/usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where=acctstarttime LIKE '2016-12-28%' > /dbbackup/2016-12-28-salestable1.sql
如果执行它,输出如下
wzq@~>。/foo.sh
/usr/bin/mysqldump--单个事务--不创建数据库--不创建信息数据库名称salestable1--其中=“acctstarttime LIKE'2016-12-29%”>/dbbackup/2016-12-29-salestable1.sql
./foo.sh:第9行:/dbbackup/2016-12-29-salestable1.sql:没有这样的文件或目录
#!/bin/bash
/usr/bin/mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where="acctstarttime LIKE '$(date +%F)%'" > /dbbackup/databasename/`date +%F`-salestable1.sql
可能的重复项不能像
echo
语句中那样包装引号。再次运行date+%F
在文件名中创建日期戳是没有用的,因为变量中已经有此值。hi triplee,这只是为了验证日期是否正确打印,我相信可以用类似的方法解决这个问题。尽管如此,satch_boogie还是可以改进它。你必须在双引号中加上\“
,才能得到一个字面上的双引号。或者,不要在echo
的参数周围加引号(但要理解其中的危险)。