1GAMMU-SMSD-MYSQL(7) Gammu GAMMU-SMSD-MYSQL(7)
2
3
4
6 gammu-smsd-mysql - gammu-smsd(1) backend using MySQL database server as
7 a message storage
8
10 MYSQL backend stores all data in a MySQL database server, which parame‐
11 ters are defined by configuration (see gammu-smsdrc for description of
12 configuration options).
13
14 For tables description see gammu-smsd-tables.
15
16 This backend is based on gammu-smsd-sql.
17
19 Before running gammu-smsd you need to create necessary tables in the
20 database, which is described below.
21
22 The configuration file then can look like:
23
24 [smsd]
25 service = sql
26 driver = native_mysql
27 host = localhost
28
29 SEE ALSO:
30 gammu-smsdrc
31
33 The user accessing the database does not need much privileges, the fol‐
34 lowing privileges should be enough:
35
36 GRANT USAGE ON *.* TO 'smsd'@'localhost' IDENTIFIED BY 'password';
37
38 GRANT SELECT, INSERT, UPDATE, DELETE ON `smsd`.* TO 'smsd'@'localhost';
39
40 CREATE DATABASE smsd;
41
42 NOTE:
43 For creating the SQL tables you need more privileges, especially for
44 creating triggers, which are used for some functionality.
45
47 Depending on MySQL version and settings please choose best fitting
48 script to create tables:
49
50 · mysql.sql, requires MySQL 5.6.5 or newer
51
52 · mysql-legacy.sql supports legacy MySQL versions, but requires neither
53 of NO_ZERO_DATE, ANSI or STRICT modes to be set in the server
54
55 SQL script mysql.sql for creating tables in MySQL database:
56
57 --
58 -- Database for Gammu SMSD
59 --
60 -- In case you get errors about not supported charset, please
61 -- replace utf8mb4 with utf8.
62
63 -- --------------------------------------------------------
64
65 --
66 -- Table structure for table `gammu`
67 --
68
69 CREATE TABLE `gammu` (
70 `Version` integer NOT NULL default '0' PRIMARY KEY
71 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
72
73 --
74 -- Dumping data for table `gammu`
75 --
76
77 INSERT INTO `gammu` (`Version`) VALUES (17);
78
79 -- --------------------------------------------------------
80
81 --
82 -- Table structure for table `inbox`
83 --
84
85 CREATE TABLE `inbox` (
86 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
87 `ReceivingDateTime` timestamp NOT NULL default CURRENT_TIMESTAMP,
88 `Text` text NOT NULL,
89 `SenderNumber` varchar(20) NOT NULL default '',
90 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
91 `UDH` text NOT NULL,
92 `SMSCNumber` varchar(20) NOT NULL default '',
93 `Class` integer NOT NULL default '-1',
94 `TextDecoded` text NOT NULL,
95 `ID` integer unsigned NOT NULL auto_increment,
96 `RecipientID` text NOT NULL,
97 `Processed` enum('false','true') NOT NULL default 'false',
98 `Status` integer NOT NULL default '-1',
99 PRIMARY KEY `ID` (`ID`)
100 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
101
102 --
103 -- Dumping data for table `inbox`
104 --
105
106
107 -- --------------------------------------------------------
108
109 --
110 -- Table structure for table `outbox`
111 --
112
113 CREATE TABLE `outbox` (
114 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
115 `InsertIntoDB` timestamp NOT NULL default CURRENT_TIMESTAMP,
116 `SendingDateTime` timestamp NOT NULL default CURRENT_TIMESTAMP,
117 `SendBefore` time NOT NULL DEFAULT '23:59:59',
118 `SendAfter` time NOT NULL DEFAULT '00:00:00',
119 `Text` text,
120 `DestinationNumber` varchar(20) NOT NULL default '',
121 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
122 `UDH` text,
123 `Class` integer default '-1',
124 `TextDecoded` text NOT NULL,
125 `ID` integer unsigned NOT NULL auto_increment,
126 `MultiPart` enum('false','true') default 'false',
127 `RelativeValidity` integer default '-1',
128 `SenderID` varchar(255),
129 `SendingTimeOut` timestamp NULL default CURRENT_TIMESTAMP,
130 `DeliveryReport` enum('default','yes','no') default 'default',
131 `CreatorID` text NOT NULL,
132 `Retries` int(3) default 0,
133 `Priority` integer default 0,
134 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error','Reserved') NOT NULL default 'Reserved',
135 `StatusCode` integer NOT NULL default '-1',
136 PRIMARY KEY `ID` (`ID`)
137 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
138
139 CREATE INDEX outbox_date ON outbox(SendingDateTime, SendingTimeOut);
140 CREATE INDEX outbox_sender ON outbox(SenderID(250));
141
142 --
143 -- Dumping data for table `outbox`
144 --
145
146
147 -- --------------------------------------------------------
148
149 --
150 -- Table structure for table `outbox_multipart`
151 --
152
153 CREATE TABLE `outbox_multipart` (
154 `Text` text,
155 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
156 `UDH` text,
157 `Class` integer default '-1',
158 `TextDecoded` text,
159 `ID` integer unsigned NOT NULL default '0',
160 `SequencePosition` integer NOT NULL default '1',
161 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error','Reserved') NOT NULL default 'Reserved',
162 `StatusCode` integer NOT NULL default '-1',
163 PRIMARY KEY (`ID`, `SequencePosition`)
164 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
165
166 --
167 -- Dumping data for table `outbox_multipart`
168 --
169
170 -- --------------------------------------------------------
171
172 --
173 -- Table structure for table `phones`
174 --
175
176 CREATE TABLE `phones` (
177 `ID` text NOT NULL,
178 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
179 `InsertIntoDB` timestamp NOT NULL default CURRENT_TIMESTAMP,
180 `TimeOut` timestamp NOT NULL default CURRENT_TIMESTAMP,
181 `Send` enum('yes','no') NOT NULL default 'no',
182 `Receive` enum('yes','no') NOT NULL default 'no',
183 `IMEI` varchar(35) NOT NULL,
184 `IMSI` varchar(35) NOT NULL,
185 `NetCode` varchar(10) default 'ERROR',
186 `NetName` varchar(35) default 'ERROR',
187 `Client` text NOT NULL,
188 `Battery` integer NOT NULL DEFAULT -1,
189 `Signal` integer NOT NULL DEFAULT -1,
190 `Sent` int NOT NULL DEFAULT 0,
191 `Received` int NOT NULL DEFAULT 0,
192 PRIMARY KEY (`IMEI`)
193 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
194
195 --
196 -- Dumping data for table `phones`
197 --
198
199 -- --------------------------------------------------------
200
201 --
202 -- Table structure for table `sentitems`
203 --
204
205 CREATE TABLE `sentitems` (
206 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
207 `InsertIntoDB` timestamp NOT NULL default CURRENT_TIMESTAMP,
208 `SendingDateTime` timestamp NOT NULL default CURRENT_TIMESTAMP,
209 `DeliveryDateTime` timestamp NULL,
210 `Text` text NOT NULL,
211 `DestinationNumber` varchar(20) NOT NULL default '',
212 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
213 `UDH` text NOT NULL,
214 `SMSCNumber` varchar(20) NOT NULL default '',
215 `Class` integer NOT NULL default '-1',
216 `TextDecoded` text NOT NULL,
217 `ID` integer unsigned NOT NULL default '0',
218 `SenderID` varchar(255) NOT NULL,
219 `SequencePosition` integer NOT NULL default '1',
220 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error') NOT NULL default 'SendingOK',
221 `StatusError` integer NOT NULL default '-1',
222 `TPMR` integer NOT NULL default '-1',
223 `RelativeValidity` integer NOT NULL default '-1',
224 `CreatorID` text NOT NULL,
225 `StatusCode` integer NOT NULL default '-1',
226 PRIMARY KEY (`ID`, `SequencePosition`)
227 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
228
229 CREATE INDEX sentitems_date ON sentitems(DeliveryDateTime);
230 CREATE INDEX sentitems_tpmr ON sentitems(TPMR);
231 CREATE INDEX sentitems_dest ON sentitems(DestinationNumber);
232 CREATE INDEX sentitems_sender ON sentitems(SenderID(250));
233
234 --
235 -- Dumping data for table `sentitems`
236 --
237
238
239 NOTE:
240 You can find the script in docs/sql/mysql.sql as well.
241
242 SQL script mysql-legacy.sql for creating tables in MySQL database:
243
244 --
245 -- Database for Gammu SMSD
246 --
247 -- In case you get errors about not supported charset, please
248 -- replace utf8mb4 with utf8.
249
250 -- --------------------------------------------------------
251
252 --
253 -- Table structure for table `gammu`
254 --
255
256 CREATE TABLE `gammu` (
257 `Version` integer NOT NULL default '0' PRIMARY KEY
258 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
259
260 --
261 -- Dumping data for table `gammu`
262 --
263
264 INSERT INTO `gammu` (`Version`) VALUES (17);
265
266 -- --------------------------------------------------------
267
268 --
269 -- Table structure for table `inbox`
270 --
271
272 CREATE TABLE `inbox` (
273 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
274 `ReceivingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
275 `Text` text NOT NULL,
276 `SenderNumber` varchar(20) NOT NULL default '',
277 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
278 `UDH` text NOT NULL,
279 `SMSCNumber` varchar(20) NOT NULL default '',
280 `Class` integer NOT NULL default '-1',
281 `TextDecoded` text NOT NULL,
282 `ID` integer unsigned NOT NULL auto_increment,
283 `RecipientID` text NOT NULL,
284 `Processed` enum('false','true') NOT NULL default 'false',
285 `Status` integer NOT NULL default '-1',
286 PRIMARY KEY `ID` (`ID`)
287 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
288
289 --
290 -- Dumping data for table `inbox`
291 --
292
293
294 -- --------------------------------------------------------
295
296 --
297 -- Table structure for table `outbox`
298 --
299
300 CREATE TABLE `outbox` (
301 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
302 `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
303 `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
304 `SendBefore` time NOT NULL DEFAULT '23:59:59',
305 `SendAfter` time NOT NULL DEFAULT '00:00:00',
306 `Text` text,
307 `DestinationNumber` varchar(20) NOT NULL default '',
308 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
309 `UDH` text,
310 `Class` integer default '-1',
311 `TextDecoded` text NOT NULL,
312 `ID` integer unsigned NOT NULL auto_increment,
313 `MultiPart` enum('false','true') default 'false',
314 `RelativeValidity` integer default '-1',
315 `SenderID` varchar(255),
316 `SendingTimeOut` timestamp NULL default '0000-00-00 00:00:00',
317 `DeliveryReport` enum('default','yes','no') default 'default',
318 `CreatorID` text NOT NULL,
319 `Retries` int(3) default 0,
320 `Priority` integer default 0,
321 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error','Reserved') NOT NULL default 'Reserved',
322 `StatusCode` integer NOT NULL default '-1',
323 PRIMARY KEY `ID` (`ID`)
324 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
325
326 CREATE INDEX outbox_date ON outbox(SendingDateTime, SendingTimeOut);
327 CREATE INDEX outbox_sender ON outbox(SenderID(250));
328
329 --
330 -- Dumping data for table `outbox`
331 --
332
333
334 -- --------------------------------------------------------
335
336 --
337 -- Table structure for table `outbox_multipart`
338 --
339
340 CREATE TABLE `outbox_multipart` (
341 `Text` text,
342 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
343 `UDH` text,
344 `Class` integer default '-1',
345 `TextDecoded` text,
346 `ID` integer unsigned NOT NULL default '0',
347 `SequencePosition` integer NOT NULL default '1',
348 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error','Reserved') NOT NULL default 'Reserved',
349 `StatusCode` integer NOT NULL default '-1',
350 PRIMARY KEY (`ID`, `SequencePosition`)
351 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
352
353 --
354 -- Dumping data for table `outbox_multipart`
355 --
356
357 -- --------------------------------------------------------
358
359 --
360 -- Table structure for table `phones`
361 --
362
363 CREATE TABLE `phones` (
364 `ID` text NOT NULL,
365 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
366 `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
367 `TimeOut` timestamp NOT NULL default '0000-00-00 00:00:00',
368 `Send` enum('yes','no') NOT NULL default 'no',
369 `Receive` enum('yes','no') NOT NULL default 'no',
370 `IMEI` varchar(35) NOT NULL,
371 `IMSI` varchar(35) NOT NULL,
372 `NetCode` varchar(10) default 'ERROR',
373 `NetName` varchar(35) default 'ERROR',
374 `Client` text NOT NULL,
375 `Battery` integer NOT NULL DEFAULT -1,
376 `Signal` integer NOT NULL DEFAULT -1,
377 `Sent` int NOT NULL DEFAULT 0,
378 `Received` int NOT NULL DEFAULT 0,
379 PRIMARY KEY (`IMEI`)
380 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
381
382 --
383 -- Dumping data for table `phones`
384 --
385
386 -- --------------------------------------------------------
387
388 --
389 -- Table structure for table `sentitems`
390 --
391
392 CREATE TABLE `sentitems` (
393 `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
394 `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
395 `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
396 `DeliveryDateTime` timestamp NULL,
397 `Text` text NOT NULL,
398 `DestinationNumber` varchar(20) NOT NULL default '',
399 `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
400 `UDH` text NOT NULL,
401 `SMSCNumber` varchar(20) NOT NULL default '',
402 `Class` integer NOT NULL default '-1',
403 `TextDecoded` text NOT NULL,
404 `ID` integer unsigned NOT NULL default '0',
405 `SenderID` varchar(255) NOT NULL,
406 `SequencePosition` integer NOT NULL default '1',
407 `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error') NOT NULL default 'SendingOK',
408 `StatusError` integer NOT NULL default '-1',
409 `TPMR` integer NOT NULL default '-1',
410 `RelativeValidity` integer NOT NULL default '-1',
411 `CreatorID` text NOT NULL,
412 `StatusCode` integer NOT NULL default '-1',
413 PRIMARY KEY (`ID`, `SequencePosition`)
414 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
415
416 CREATE INDEX sentitems_date ON sentitems(DeliveryDateTime);
417 CREATE INDEX sentitems_tpmr ON sentitems(TPMR);
418 CREATE INDEX sentitems_dest ON sentitems(DestinationNumber);
419 CREATE INDEX sentitems_sender ON sentitems(SenderID(250));
420
421 --
422 -- Dumping data for table `sentitems`
423 --
424
425
426 --
427 -- Triggers for setting default timestamps
428 --
429
430 DELIMITER //
431
432 CREATE TRIGGER inbox_timestamp BEFORE INSERT ON inbox
433 FOR EACH ROW
434 BEGIN
435 IF NEW.ReceivingDateTime = '0000-00-00 00:00:00' THEN
436 SET NEW.ReceivingDateTime = CURRENT_TIMESTAMP();
437 END IF;
438 END;//
439
440 CREATE TRIGGER outbox_timestamp BEFORE INSERT ON outbox
441 FOR EACH ROW
442 BEGIN
443 IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
444 SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
445 END IF;
446 IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
447 SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
448 END IF;
449 IF NEW.SendingTimeOut = '0000-00-00 00:00:00' THEN
450 SET NEW.SendingTimeOut = CURRENT_TIMESTAMP();
451 END IF;
452 END;//
453
454 CREATE TRIGGER phones_timestamp BEFORE INSERT ON phones
455 FOR EACH ROW
456 BEGIN
457 IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
458 SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
459 END IF;
460 IF NEW.TimeOut = '0000-00-00 00:00:00' THEN
461 SET NEW.TimeOut = CURRENT_TIMESTAMP();
462 END IF;
463 END;//
464
465 CREATE TRIGGER sentitems_timestamp BEFORE INSERT ON sentitems
466 FOR EACH ROW
467 BEGIN
468 IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
469 SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
470 END IF;
471 IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
472 SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
473 END IF;
474 END;//
475
476 DELIMITER ;
477
478
479
480 NOTE:
481 You can find the script in docs/sql/mysql-legacy.sql as well.
482
484 The easiest way to upgrade database structure is to backup old one and
485 start with creating new one based on example above.
486
487 For upgrading existing database, you can use changes described in
488 smsd-tables-history and then manually update Version field in gammu ta‐
489 ble.
490
492 Michal Čihař <michal@cihar.com>
493
495 2009-2015, Michal Čihař <michal@cihar.com>
496
497
498
499
5001.42.0 Oct 03, 2020 GAMMU-SMSD-MYSQL(7)