summaryrefslogtreecommitdiff
path: root/mariadb/mariadb-persist-server-id
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2024-02-16 17:59:06 -0500
committerAndrew Cady <d@jerkface.net>2024-02-16 17:59:06 -0500
commit9bae4bec1c84abaac80e9ba4bba4fe5b28cacb20 (patch)
treefa881b3bdec82fbd7f7c0afa17a44bac846f57ba /mariadb/mariadb-persist-server-id
parent254c699347896f1faa49e1254d3fa31ae22cafd8 (diff)
renames
Diffstat (limited to 'mariadb/mariadb-persist-server-id')
-rwxr-xr-xmariadb/mariadb-persist-server-id139
1 files changed, 139 insertions, 0 deletions
diff --git a/mariadb/mariadb-persist-server-id b/mariadb/mariadb-persist-server-id
new file mode 100755
index 0000000..33c0245
--- /dev/null
+++ b/mariadb/mariadb-persist-server-id
@@ -0,0 +1,139 @@
1#!/bin/bash
2# This script edits the file:
3# /etc/mysql/mariadb.conf.d/50-server.cnf
4# The config file will set
5# the server-id to
6# the server-id of
7# the running MariaDB server.
8# The config file is assumed to look like
9# the default Debian configuration file
10# approximately.
11# MariaDB will break if the user
12# has set the server-id in another file.
13set -o pipefail
14set -e
15PATH=$(dirname "$0"):$PATH
16source rpc.bash
17
18use_real_config()
19{
20 MARIADB_CONFIG_FILE=/etc/mysql/mariadb.conf.d/50-server.cnf
21}
22
23use_fake_config()
24{
25 use_real_config
26 OUR_RUNTIME_DIR=/run/hosting-tools
27 mkdir -p "$OUR_RUNTIME_DIR"
28 REAL_MARIADB_CONFIG_FILE=$MARIADB_CONFIG_FILE
29 FAKE_MARIADB_CONFIG_FILE=$OUR_RUNTIME_DIR/50-server.cnf
30 cp -i -a -T -- "$REAL_MARIADB_CONFIG_FILE" "$FAKE_MARIADB_CONFIG_FILE"
31 MARIADB_CONFIG_FILE=$FAKE_MARIADB_CONFIG_FILE
32}
33
34remove_fake_config()
35{
36 rm -f /run/hosting-tools/50-server.cnf
37}
38
39get_mariadb_server_id_from_config()
40{
41 set -- 's/^ *server-id *= *([^ ]+) *$/\1/p'
42 sed -n -E -e "$1" < "${MARIADB_CONFIG_FILE}"
43}
44
45valid_server_id()
46{
47 case "$newid" in
48 '' | *[^0-9]* ) false ;;
49 * ) [ "$newid" -ge 1 ] ;;
50 esac
51}
52
53set_mariadb_server_id_config()
54{
55 OUR_SUFFIX='.~hosting-tools~'
56 MARIADB_CONFIG_FILE_BACKUP=$MARIADB_CONFIG_FILE$OUR_SUFFIX
57 newid=$1
58 if ! valid_server_id "$newid"
59 then
60 echo "Error: Invalid server-id: $newid" >&2
61 return 9
62 fi
63 if grep -q '^ *server-id *=' "$MARIADB_CONFIG_FILE"
64 then
65 set -- s/'^( *server-id *= *)[^ ]+ *$'/'\1'"$newid"/
66 else
67 set -- s/'^#( *server-id *= *)1 *$'/'\1'"$newid"/
68 fi
69 set -- sed -E -i"${OUR_SUFFIX}" -e "$1"
70 "$@" "$MARIADB_CONFIG_FILE"
71}
72
73run_server()
74{
75 local BASH_RPC_REMOTE_DEST="$1"
76 shift
77 remote_run_function "$@"
78}
79
80main()
81{
82 set -e
83 set -o pipefail
84 runtime_server_id=$(mariadb -s <<< 'select @@server_id')
85 if false
86 then
87 use_fake_config
88 else
89 use_real_config
90 fi
91 config_server_id=$(get_mariadb_server_id_from_config)
92 if [ "$runtime_server_id" = "$config_server_id" ]
93 then
94 printf 'Warning: %s\n' \
95 "server-id is already correct. Doing nothing." >&2
96 remove_fake_config
97 return
98 fi
99 set_mariadb_server_id_config "$runtime_server_id"
100 set +e
101 validate_new_server_id "$runtime_server_id"
102 r=$?
103 interactive_show_config_change
104 if [ "$r" = 0 ]
105 then
106 remove_fake_config
107 fi
108 return $r
109}
110
111interactive_show_config_change()
112{
113 (
114 set +e
115 diff -u --color \
116 "$MARIADB_CONFIG_FILE_BACKUP" \
117 "$MARIADB_CONFIG_FILE"
118 [ $? = 1 ]
119 )
120}
121
122validate_new_server_id()
123{
124 expected=$1
125 received=$(get_mariadb_server_id_from_config)
126 if [ "$expected" = "$received" ]
127 then
128 printf 'Success: %s: server-id = %s\n' \
129 "wrote MariaDB config" \
130 "$received" >&2
131 else
132 printf 'Error: %s: server-id = %s\n' \
133 "failed to write MariaDB config" \
134 "$received" >&2
135 false
136 fi
137}
138
139run_server "${1:-root@localhost}" main