A continuación se muestra el script BASH (Versión 4.1.2) que he colocado en cronjob que se ejecuta diariamente a las 23:59 para hacer una copia de seguridad de una tabla con registros creados ese día en particular

/usr/bin/mysqldump --single-transaction --no-create-db 
--no-create-info databasename salestable1 
--where="acctstarttime 
LIKE '2016-12-28%'" >  /dbbackup/`date +%F`-salestable1.sql

Aquí el problema es que tengo que cambiar manualmente la parte de fecha LIKE '2016-12-28%' dentro del comando de ejecución mysql manualmente.

¿Cómo construir el script actual para que pueda hacer una copia de seguridad de la tabla con registros creados en un día en particular sin tener que cambiar la fecha manualmente?

Solución para mi caso

sys_date=`date +%F -d '-1 day'`
/usr/bin/mysqldump --single-transaction --no-create-db   \ 
--no-create-info ctradius radacct     \
--where="acctstarttime LIKE '${sys_date}%'" >      \
/backup/freeradius/radacct-`date +%F -d '-1 day'`.sql
2
satch_boogie 28 dic. 2016 a las 14:04

3 respuestas

La mejor respuesta

Probar esto

#!/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
3
Kamal Lama 30 dic. 2016 a las 06:58

Puede intentar introducir una variable, es decir:

El script:

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"

Script lanzado con fecha dinámica:

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
2
DevDio 10 ago. 2017 a las 13:27
#!/bin/bash
_cmd="/usr/bin/mysqldump --single-transaction --no-create-db 
--no-create-info databasename salestable1 
--where=\"acctstarttime 
LIKE '$(date +%F)%'\" >  /dbbackup/`date +%F`-salestable1.sql"

echo $_cmd

eval $_cmd

Y si lo ejecutas, la salida es como esta

Wzq @ ~> _ ./foo.sh

/ usr / bin / mysqldump --single-transaction --no-create-db --no-create-info databasename salestable1 --where = "acctstarttime LIKE '2016-12-29%'"> / dbbackup / 2016-12 -29-salestable1.sql

./foo.sh: línea 9: /dbbackup/2016-12-29-salestable1.sql: No existe tal archivo o directorio

1
dormi330 29 dic. 2016 a las 02:18