2009-03-02 13 views
10

He intentado hacer una copia de seguridad de la tarea cron en mi servidor web ejecutando FreeBSD. Actualmente se ve algo como esto:Copia de seguridad de la tarea cron de MySQL - my.cnf no se está leyendo

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

Funciona bien cuando ejecutarlo como root (ya raíz tiene un .my.cnf con el nombre de usuario y la contraseña utilizada para conectarse, pero cuando se ejecuta el trabajo por cron, el archivo my.cnf no se lee.

¿hay alguna forma de evitar eso sin tener que poner nombre de usuario y una contraseña en el propio comando (ya que eso es un poco inseguro)?

Extrañamente, tengo la misma configuración con PostgreSQL y un archivo .pgpass, y eso funciona a las mil maravillas.

Respuesta

16

Utilice la opción --defaults-extra-file que le indiquen dónde encontrar el archivo .my.cnf (asumiendo que es legible por lo que el usuario está ejecutando mysqldump

+0

* suspiro * a fácil;) * Votación ascendente * – Node

+0

Ah, sí. ¿Cómo extrañé eso? Lo pondré en mi trabajo nocturno. Espero recibir el mensaje de que cuando estoy durmiendo :) – mikl

+0

en realidad, no fue tan fácil de encontrar en los documentos en línea de MySQL. Ninguno de los programas individuales menciona esa opción en sus páginas de manual. – Alnitak

2

Eso es raro en realidad cron debe leer el .my.cnf. ¿Cómo ejecutas el cronjob en/etc/crontab o crontab -e? Podría intentar usar AutoMySQLBackup, que es un script de shell pequeño que usa mysqldump.

+0

Bueno, en realidad no se ejecuta directamente desde cron, sino por el sistema 'periodico' de FreeBSD. En realidad es un archivo de script en/usr/local/etc/periodic/daily Los trabajos cron periódicos se ejecutan a través de '/ etc/cron' como este: >' 1 3 * * * raíz periódica diaria' – mikl

+0

Oh, Markdown no está habilitado en los comentarios. Espero que sea legible de todos modos :) – mikl

0

En FreeBSD puede agregar lo siguiente:.

security.bsd.see_other_uids=0 

A/etc /sysctl.conf y reiniciar el sistema, o utilizar

sysctl security.bsd.see_other_uids=0 

Para establecer el valor sysctl.

Ahora, los usuarios que no sean root solo pueden ver sus propios procesos. Entonces, poner la contraseña en la línea de comando es menos arriesgado.

Además, ¿cómo se está ejecutando crontab? ¿Lo agregaste al crontab de usuarios root usando crontab -e -u root, o lo agregaste a/etc/crontab?

Verifique que los permisos correctos estén establecidos en .my.cnf, así como también las variables de entorno establecidas por crontab, ya que esto puede hacer que se vea en una ubicación diferente a su directorio de inicio (que para root en FreeBSD es/raíz).

2

Me encontré con esto también.

Parece que MySQL está codificado para buscar '~/.my.cnf', en lugar de algo como '$ HOME/.my.cnf'.

En FreeBSD, cronjobs llama desde/etc/crontab ignorará el carácter de tilde '~', y por lo tanto ignorar un valor como ~/.my.cnf

De hecho, el siguiente no funciona para mí en absoluto:

MySQL --defaults-extra-file = ~/.my.cnf

Sin embargo, el uso de una variable $ HOME funciona:

HOME =/home/admin MySQL - -defaults-extra-file = $ HOME/.my.cnf

Como alternativa, mi cronjob funcionará si lo muevo desde/etc/crontab a/var/cron/tabs/root (usando 'crontab -e' como root).

Cuestiones relacionadas