jarischaefer / docker-librenms

Docker image for LibreNMS
MIT License
115 stars 37 forks source link

setup_database Errors when using remote DB and official DB Setup Instructions #102

Closed fz883 closed 5 years ago

fz883 commented 5 years ago

I'm using a DB on a remote host. I followed the instructions here:

You should read the LibreNMS installation docs for the latest instructions regarding database setup.

And so I created a DB with the following command (as stated on the linked docs): CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;

When running setup_database, the command fails:

root@host:~# docker exec librenms setup_database
Failed to acquire lock schema

Running it again:

root@host:~# docker exec librenms setup_database
-- Updating database schema
000 -> 001 ... done (0 errors).
SQL Error! SQLSTATE[42S02]: Base table or view not found: 1146 Table 'librenms.dbSchema' doesn't exist (SQL: INSERT IGNORE INTO `dbSchema` (`version`)  VALUES (001)) (SQL: INSERT IGNORE INTO `dbSchema` (`version`)  VALUES (001))
  /opt/librenms/includes/sql-schema/update.php:109
  /opt/librenms/build-base.php:51

After a bit of debugging I found out that the instructions for your own MySQL Docker Image work. So creating the DB just with create database librenms; fixed the issue for me.

root@librenms:/# /usr/local/bin/setup_database
-- Creating base database structure
Step #0 ...
Step #1 ...
Step #2 ...
Step #3 ...
Step #4 ...
Step #5 ...
Step #6 ...
Step #7 ...
Step #8 ...
Step #9 ...
Step #10 ...
Step #11 ...
Step #12 ...
Step #13 ...
Step #14 ...
Step #15 ...
Step #16 ...
Step #17 ...
Step #18 ...
Step #19 ...
Step #20 ...
Step #21 ...
Step #22 ...
Step #23 ...
Step #24 ...
Step #25 ...
Step #26 ...
Step #27 ...
Step #28 ...
Step #29 ...
Step #30 ...
Step #31 ...
Step #32 ...
Step #33 ...
Step #34 ...
Step #35 ...
Step #36 ...
Step #37 ...
Step #38 ...
Step #39 ...
Step #40 ...
Step #41 ...
Step #42 ...
Step #43 ...
Step #44 ...
Step #45 ...
Step #46 ...
Step #47 ...
Step #48 ...
Step #49 ...
Step #50 ...
Step #51 ...
Step #52 ...
Step #53 ...
Step #54 ...
Step #55 ...
Step #56 ...
Step #57 ...
Step #58 ...
Step #59 ...
Step #60 ...
Step #61 ...
Step #62 ...
Step #63 ...
Step #64 ...
Step #65 ...
Step #66 ...
Step #67 ...
Step #68 ...
Step #69 ...
Step #70 ...
Step #71 ...
Step #72 ...
Step #73 ...
Step #74 ...
Step #75 ...
Step #76 ...
Step #77 ...
Step #78 ...
Step #79 ...
Step #80 ...
Step #81 ...
Step #82 ...
Step #83 ...
Step #84 ...
Step #85 ...
Step #86 ...
Step #87 ...
Step #88 ...
Step #89 ...
Step #90 ...
Step #91 ...
Step #92 ...
Step #93 ...
Step #94 ...
Step #95 ...
-- Updating database schema
000 -> 001 ... done (0 errors).
001 -> 002 ... done (0 errors).
002 -> 003 ... done (0 errors).
003 -> 004 ... done (0 errors).
004 -> 005 ... done (0 errors).
005 -> 006 ... done (0 errors).
006 -> 007 ... done (0 errors).
007 -> 008 ... done (0 errors).
008 -> 009 ... done (0 errors).
009 -> 010 ... done (0 errors).
010 -> 011 ... done (0 errors).
011 -> 012 ... done (0 errors).
012 -> 013 ... done (0 errors).
013 -> 014 ... done (0 errors).
014 -> 015 ... done (0 errors).
015 -> 016 ... done (0 errors).
016 -> 017 ... done (0 errors).
017 -> 018 ... done (0 errors).
018 -> 019 ... done (0 errors).
019 -> 020 ... done (0 errors).
020 -> 021 ... done (0 errors).
021 -> 022 ... done (0 errors).
022 -> 023 ... done (0 errors).
023 -> 024 ... done (0 errors).
024 -> 025 ... done (0 errors).
025 -> 026 ... done (0 errors).
026 -> 027 ... done (0 errors).
027 -> 028 ... done (0 errors).
028 -> 029 ... done (0 errors).
029 -> 030 ... done (0 errors).
030 -> 031 ... done (0 errors).
031 -> 032 ... done (0 errors).
032 -> 033 ... done (0 errors).
033 -> 034 ... done (0 errors).
034 -> 035 ... done (0 errors).
035 -> 036 ... done (0 errors).
036 -> 037 ... done (0 errors).
037 -> 038 ... done (0 errors).
038 -> 039 ... done (0 errors).
039 -> 040 ... done (0 errors).
040 -> 041 ... done (0 errors).
041 -> 042 ... done (0 errors).
042 -> 043 ... done (0 errors).
043 -> 044 ... done (0 errors).
044 -> 045 ... done (0 errors).
045 -> 046 ... done (0 errors).
046 -> 047 ... done (0 errors).
047 -> 048 ... done (0 errors).
048 -> 049 ... done (0 errors).
049 -> 050 ... done (0 errors).
050 -> 051 ... done (0 errors).
051 -> 052 ... done (0 errors).
052 -> 053 ... done (0 errors).
053 -> 054 ... done (0 errors).
054 -> 055 ... done (0 errors).
055 -> 056 ... done (0 errors).
056 -> 057 ... done (0 errors).
057 -> 058 ... done (0 errors).
058 -> 059 ... done (0 errors).
059 -> 060 ... done (0 errors).
060 -> 061 ... done (0 errors).
061 -> 062 ... done (0 errors).
062 -> 063 ... done (0 errors).
063 -> 064 ... done (0 errors).
064 -> 065 ... done (0 errors).
065 -> 066 ... done (0 errors).
066 -> 067 ... done (0 errors).
067 -> 068 ... done (0 errors).
068 -> 069 ... done (0 errors).
069 -> 070 ... done (0 errors).
070 -> 071 ... done (0 errors).
071 -> 072 ... done (0 errors).
072 -> 073 ... done (0 errors).
073 -> 074 ... done (0 errors).
074 -> 075 ... done (0 errors).
075 -> 076 ... done (0 errors).
076 -> 077 ... done (0 errors).
077 -> 078 ... done (0 errors).
078 -> 079 ... done (0 errors).
079 -> 080 ... done (0 errors).
080 -> 081 ... done (0 errors).
081 -> 082 ... done (0 errors).
082 -> 083 ... done (0 errors).
083 -> 084 ... done (0 errors).
084 -> 085 ... done (0 errors).
085 -> 086 ... done (0 errors).
086 -> 087 ... done (0 errors).
087 -> 088 ... done (0 errors).
088 -> 089 ... done (0 errors).
089 -> 090 ... done (0 errors).
090 -> 091 ... done (0 errors).
091 -> 092 ... done (0 errors).
092 -> 093 ... done (0 errors).
093 -> 094 ... done (0 errors).
094 -> 095 ... done (0 errors).
095 -> 096 ... done (0 errors).
096 -> 097 ... done (0 errors).
097 -> 098 ... done (0 errors).
098 -> 099 ... done (0 errors).
099 -> 100 ... done (0 errors).
100 -> 101 ... done (0 errors).
101 -> 102 ... done (0 errors).
102 -> 103 ... done (0 errors).
103 -> 104 ... done (0 errors).
104 -> 105 ... done (0 errors).
105 -> 106 ... done (0 errors).
106 -> 107 ... done (0 errors).
107 -> 108 ... done (0 errors).
108 -> 109 ... done (0 errors).
109 -> 110 ... done (0 errors).
110 -> 111 ... done (0 errors).
111 -> 112 ... done (0 errors).
112 -> 113 ... done (0 errors).
113 -> 114 ... done (0 errors).
114 -> 115 ... done (0 errors).
115 -> 116 ... done (0 errors).
116 -> 117 ... done (0 errors).
117 -> 118 ... done (0 errors).
118 -> 119 ... done (0 errors).
119 -> 120 ... done (0 errors).
120 -> 121 ... done (0 errors).
121 -> 122 ... done (0 errors).
122 -> 123 ... done (0 errors).
123 -> 124 ... done (0 errors).
124 -> 125 ... done (0 errors).
125 -> 126 ... done (0 errors).
126 -> 127 ... done (0 errors).
127 -> 128 ... done (0 errors).
128 -> 129 ... done (0 errors).
129 -> 130 ... done (0 errors).
130 -> 131 ... done (0 errors).
131 -> 132 ... done (0 errors).
132 -> 133 ... done (0 errors).
133 -> 134 ... done (0 errors).
134 -> 135 ... done (0 errors).
135 -> 136 ... done (0 errors).
136 -> 137 ... done (0 errors).
137 -> 138 ... done (0 errors).
138 -> 139 ... done (0 errors).
139 -> 140 ... done (0 errors).
140 -> 141 ... done (0 errors).
141 -> 142 ... done (0 errors).
142 -> 143 ... done (0 errors).
143 -> 144 ... done (0 errors).
144 -> 145 ... done (0 errors).
145 -> 146 ... done (0 errors).
146 -> 147 ... done (0 errors).
147 -> 148 ... done (0 errors).
148 -> 149 ... done (0 errors).
149 -> 150 ... done (0 errors).
150 -> 151 ... done (0 errors).
151 -> 152 ... done (0 errors).
152 -> 153 ... done (0 errors).
153 -> 154 ... done (0 errors).
154 -> 155 ... done (0 errors).
155 -> 156 ... done (0 errors).
156 -> 157 ... done (0 errors).
157 -> 158 ... done (0 errors).
158 -> 159 ... done (0 errors).
159 -> 160 ... done (0 errors).
160 -> 161 ... done (0 errors).
161 -> 162 ... done (0 errors).
162 -> 163 ... done (0 errors).
163 -> 164 ... done (0 errors).
164 -> 165 ... done (0 errors).
165 -> 166 ... done (0 errors).
166 -> 167 ... done (0 errors).
167 -> 168 ... done (0 errors).
168 -> 169 ... done (0 errors).
169 -> 170 ... done (0 errors).
170 -> 171 ... done (0 errors).
171 -> 172 ... done (0 errors).
172 -> 173 ... done (0 errors).
173 -> 174 ... done (0 errors).
174 -> 175 ... done (0 errors).
175 -> 176 ... done (0 errors).
176 -> 177 ... done (0 errors).
177 -> 178 ... done (0 errors).
178 -> 179 ... done (0 errors).
179 -> 180 ... done (0 errors).
180 -> 181 ... done (0 errors).
181 -> 182 ... done (0 errors).
182 -> 183 ... done (0 errors).
183 -> 184 ... done (0 errors).
184 -> 185 ... done (0 errors).
185 -> 186 ... done (0 errors).
186 -> 187 ... done (0 errors).
187 -> 188 ... done (0 errors).
188 -> 189 ... done (0 errors).
189 -> 190 ... done (0 errors).
190 -> 191 ... done (0 errors).
191 -> 192 ... done (0 errors).
192 -> 193 ... done (0 errors).
193 -> 194 ... done (0 errors).
194 -> 195 ... done (0 errors).
195 -> 196 ... done (0 errors).
196 -> 197 ... done (0 errors).
197 -> 198 ... done (0 errors).
198 -> 199 ... done (0 errors).
199 -> 200 ... done (0 errors).
200 -> 201 ... done (0 errors).
201 -> 202 ... done (0 errors).
202 -> 203 ... done (0 errors).
203 -> 204 ... done (0 errors).
204 -> 205 ... done (0 errors).
205 -> 206 ... done (0 errors).
206 -> 207 ... done (0 errors).
207 -> 208 ... done (0 errors).
208 -> 209 ... done (0 errors).
209 -> 210 ... done (0 errors).
210 -> 211 ... done (0 errors).
211 -> 212 ... done (0 errors).
212 -> 213 ... done (0 errors).
213 -> 214 ... done (0 errors).
214 -> 215 ... done (0 errors).
215 -> 216 ... done (0 errors).
216 -> 217 ... done (0 errors).
217 -> 218 ... done (0 errors).
218 -> 219 ... done (0 errors).
219 -> 220 ... done (0 errors).
220 -> 221 ... done (0 errors).
221 -> 222 ... done (0 errors).
222 -> 223 ... done (0 errors).
223 -> 224 ... done (0 errors).
224 -> 225 ... done (0 errors).
225 -> 226 ... done (0 errors).
226 -> 227 ... done (0 errors).
227 -> 228 ... done (0 errors).
228 -> 229 ... done (0 errors).
229 -> 230 ... done (0 errors).
230 -> 231 ... done (0 errors).
231 -> 232 ... done (0 errors).
232 -> 233 ... done (0 errors).
233 -> 234 ... done (0 errors).
234 -> 235 ... done (0 errors).
235 -> 236 ... done (0 errors).
236 -> 237 ... done (0 errors).
237 -> 238 ... done (0 errors).
238 -> 239 ... done (0 errors).
239 -> 240 ... done (0 errors).
240 -> 241 ... done (0 errors).
241 -> 242 ... done (0 errors).
242 -> 243 ... done (0 errors).
243 -> 244 ... done (0 errors).
244 -> 245 ... done (0 errors).
245 -> 246 ... done (0 errors).
246 -> 247 ... done (0 errors).
247 -> 248 ... done (0 errors).
248 -> 249 ... done (0 errors).
249 -> 250 ... done (0 errors).
250 -> 251 ... done (0 errors).
251 -> 252 ... done (0 errors).
252 -> 253 ... done (0 errors).
253 -> 254 ... done (0 errors).
254 -> 255 ... done (0 errors).
255 -> 256 ... done (0 errors).
256 -> 257 ... done (0 errors).
257 -> 258 ... done (0 errors).
258 -> 259 ... done (0 errors).
259 -> 260 ... done (0 errors).
260 -> 261 ... done (0 errors).
261 -> 262 ... done (0 errors).
262 -> 263 ... done (0 errors).
263 -> 264 ... done (0 errors).
264 -> 265 ... done (0 errors).
265 -> 266 ... done (0 errors).
266 -> 267 ... done (0 errors).
267 -> 268 ... done (0 errors).
268 -> 269 ... done (0 errors).
269 -> 270 ... done (0 errors).
270 -> 271 ... done (0 errors).
271 -> 272 ... done (0 errors).
272 -> 273 ... done (0 errors).
273 -> 274 ... done (0 errors).
274 -> 275 ... done (0 errors).
-- Done

Btw, I'm using release 1.48.1

jarischaefer commented 5 years ago

I think this is mentioned in the docs, just before the setup_database step.

Make sure the database, user and permissions exist before running the commands.

See https://github.com/jarischaefer/docker-librenms#database---creating-librenms-tables

fz883 commented 5 years ago

I think I was not clear enough.

Database - Prerequisites If you don't have a MySQL server setup either in Docker or elsewhere then you can create a docker container here. You should read the LibreNMS installation docs for the latest instructions regarding database setup.

That's what I did. I used the description on the offical page to create a DB with this command: CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Afterwards setup_database fails. When I create the DB like you do in the Docker MySQL Image like this create database librenms; it works.

jarischaefer commented 5 years ago

I find it hard to believe that this issue is related to CHARACTER SET or COLLATE, because it works for me with UTF8.

How exactly did you create the user and grant privileges? Did you use the following instructions from the LibreNMS docs?

CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';

Because these will not work with remote databases or localhost TCP connections (localhost in MySQL refers to connections via Unix socket, whereas 127.0.0.1 refers to local TCP connections).

fz883 commented 5 years ago

Does anything I previously stated suggest that? I know that it won't work with librenms@localhost if the DB is remote. I'm not a beginner.

I understand you want to rule that out, but as I said, I only changed the create database command from the official one to the one you're using. Nothing else, and it works with that command flawlessly. Try it for yourself or just close this issue.

jarischaefer commented 5 years ago

I just tried reproducing it once again, this time using a different server (MySQL 5.7), with no luck.

Please try the following steps to determine whether it is possible to reproduce the issue using MySQL's standard image.

Database

docker run --rm --name mysql -e MYSQL_ROOT_PASSWORD=root -p 127.0.0.1:3306:3306 mysql:5.7

Once MySQL is up and running, execute the following statements:

CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'librenms'@'%' IDENTIFIED BY 'librenms';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'%';
FLUSH PRIVILEGES;

LibreNMS

docker run --rm --name librenms -p 127.0.0.1:8080:80 -v /tmp/logs:/opt/librenms/logs -v /tmp/rrd:/opt/librenms/rrd -e APP_KEY=base64:KFyAPsGNAq0+fmwGdbJrzZnj6cpGorr890mgsADjvWM= -e DB_HOST=db -e DB_NAME=librenms -e DB_USER=librenms -e DB_PASS=librenms -e BASE_URL=http://localhost:8080 --link mysql:db jarischaefer/docker-librenms:1.48.1

Once LibreNMS is up and running, execute the following command:

docker exec librenms setup_database

jarischaefer commented 5 years ago

Closing this due to inactivity.