Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本,用于运行mysqldump,对一个表进行常规备份,其中包含1天前创建的行_Mysql_Linux_Bash - Fatal编程技术网

Bash脚本,用于运行mysqldump,对一个表进行常规备份,其中包含1天前创建的行

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 这里的

下面是我放在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
这里的问题是我必须手动更改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
的参数周围加引号(但要理解其中的危险)。