Não é possível conectar-se ao servidor MySQL local por meio do soquete

0

Todos os comandos no shell não-login interativo do debian9 (modo gráfico).
Eu quero fazer backup do mysql antes de reiniciar ou desligar.

who 
test tty7         2018-02-01 18:26 (:0)
test@world:~$ pwd
/home/test

Agora, os três comandos a seguir podem fazer backup do banco de dados mysql.

USERNAME="xxxx"
PASSWORD="yyyy"
mysqldump -u root -p${PASSWORD} database > /home/test/wp.sql.bak

Crie um serviço em execução antes de reinicializar ou desligar.

vim  /etc/systemd/system/test.service  

[Unit]
Description=Run command at shutdown
Before=shutdown.target reboot.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/bash  /home/test/test.sh

[Install]
WantedBy=multi-user.target

O arquivo test.sh.

cat  /home/test/test.sh
USERNAME="xxxx"
PASSWORD="yyyy"
mysqldump -u root -p${PASSWORD} database > /home/test/wp.sql.bak

Ativar o serviço.

sudo systemctl enable test.service
sudo reboot

Agora faça o login no shell interativo não-login (modo gráfico).

sudo systemctl enable test.service
-- Logs begin at Thu 2018-02-01 18:26:04 HKT, end at Thu 2018-02-01 18:27:23 HKT. --
Feb 01 18:26:13 world systemd[1]: Starting Run command at shutdown...
Feb 01 18:26:18 world bash[480]: mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")"
Feb 01 18:26:19 world systemd[1]: test.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 01 18:26:19 world systemd[1]: Failed to start Run command at shutdown.
Feb 01 18:26:19 world systemd[1]: test.service: Unit entered failed state.
Feb 01 18:26:19 world systemd[1]: test.service: Failed with result 'exit-code'

Os três comandos podem ser executados no terminal em vez de conter no test.service, como gravar um serviço de backup de todos os datadb do mysql ao reinicializar ou desligar?

    
por scrapy 01.02.2018 / 15:28

2 respostas

1

Primeiro, use ExecStop=/bin/bash /home/test/test.sh em vez de ExecStart . Veja Como executar um script com o systemd antes desligamento? para mais informações. Você parece estar executando seu script na inicialização, presumivelmente antes que o mysql seja iniciado.

Segundo, considere adicionar After=mariadb.service para ter certeza de que o script é executado antes que o mysql seja desligado. Lembre-se de que, ao considerar a ordem de desligamento, tudo ocorre ao contrário.

    
por 01.02.2018 / 19:19
0
[Unit]
Description=Run command at shutdown
Before=shutdown.target reboot.target  
After=mariadb.service 

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash  /home/test/test.sh

[Install]
WantedBy=multi-user.target

É o mariadb no debian9 em vez do mysql.

    
por 02.02.2018 / 02:33