Systemd
無法通過套接字連接到本地 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的服務?
首先,使用
ExecStop=/bin/bash /home/test/test.sh
而不是ExecStart
. 請參閱如何在關機前使用 systemd 執行腳本?了解更多資訊。您似乎在啟動時執行腳本,大概是在 mysql 完全啟動之前。其次,考慮添加
After=mariadb.service
以確保腳本在 mysql 關閉之前執行。請記住,在考慮關閉順序時,一切都是相反的。
[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。