无法通过socket连接到本地MySQL服务器

无法通过socket连接到本地MySQL服务器

debian9 的交互式非登录 shell 中的所有命令(图形模式)。
我想在重新启动或关闭之前备份 mysql。

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

现在以下三个命令就可以备份mysql数据库了。

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

创建一个在重新启动或关闭之前运行的服务。

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

test.sh 文件。

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

启用该服务。

sudo systemctl enable test.service
sudo reboot

现在登录交互式非登录 shell(图形模式)。

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'

这三个命令可以在终端中运行,而不是包含在test.service中,如何编写一个在重新启动或关闭时备份所有mysql datadb的服务?

答案1

首先,使用ExecStop=/bin/bash /home/test/test.sh而不是ExecStart.看如何在关机前使用 systemd 运行脚本?了解更多信息。您似乎在启动时运行脚本,大概是在 mysql 完全启动之前。

其次,考虑添加After=mariadb.service以确保脚本在关闭 mysql 之前运行。请记住,在考虑关闭顺序时,一切都是相反的。

答案2

[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

debian9中是mariadb而不是mysql。

相关内容