Add lock capabilities during snapshot (#2063)

* Add service which locks database tables

Add an additional service which helds a lock on all database tables.
This allows to safely snapshot the database files.

* Lock database during snapshot operation

Fixes: #1353

* Update config.json

* Update CHANGELOG.md

Co-authored-by: Pascal Vizeli <pvizeli@syshack.ch>
This commit is contained in:
Stefan Agner
2021-06-17 14:22:17 +02:00
committed by GitHub
parent 3cb97778fd
commit 1a10f9613f
6 changed files with 36 additions and 1 deletions

View File

@@ -1,5 +1,9 @@
# Changelog # Changelog
## 2.4.0
- Add lock capabilities during snapshot
## 2.3.0 ## 2.3.0
- Option to grant user specific privileges for a database - Option to grant user specific privileges for a database

View File

@@ -1,6 +1,6 @@
{ {
"name": "MariaDB", "name": "MariaDB",
"version": "2.3.0", "version": "2.4.0",
"slug": "mariadb", "slug": "mariadb",
"description": "A SQL database server", "description": "A SQL database server",
"url": "https://github.com/home-assistant/hassio-addons/tree/master/mariadb", "url": "https://github.com/home-assistant/hassio-addons/tree/master/mariadb",
@@ -8,6 +8,8 @@
"startup": "system", "startup": "system",
"init": false, "init": false,
"timeout": 20, "timeout": 20,
"snapshot_pre": "/bin/s6-svc -wU -u /run/s6/services/mariadb-lock/",
"snapshot_post": "/bin/s6-svc -wd -d /run/s6/services/mariadb-lock/",
"services": ["mysql:provide"], "services": ["mysql:provide"],
"ports": { "ports": {
"3306/tcp": null "3306/tcp": null

View File

@@ -0,0 +1 @@
3

View File

@@ -0,0 +1,28 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Start MariaDB client to lock tables (for snapshots)
# ==============================================================================
bashio::log.info "Lock tables using mariadb client..."
exec 4> >(mariadb)
MARIADB_PID=$!
echo "FLUSH TABLES WITH READ LOCK;" >&4
# Notify s6 about successful service start
echo "" >&3
bashio::log.info "MariaDB tables locked."
# Register stop
function stop_mariadb_client() {
echo "UNLOCK TABLES;" >&4
bashio::log.info "MariaDB tables unlocked."
exec 4>&-
# Successful exit, avoid wait exit status to propagate
exit 0
}
trap "stop_mariadb_client" SIGTERM SIGHUP
wait "${MARIADB_PID}"