Devices can't connect after a server migration.

bytem2 years ago

Hi,

I recently migrated my traccar database and configuration to a new server. Traccar appears to be online and accessible, however all devices are showing offline and not updating their location or charging status. It doesn't appear to be a firewall issue because I disabled the firewall and flushed iptables to rule out any rules blocking the connection.

Here is a snippet from the traccar log:

2023-02-28 15:26:42  INFO: [Tb1e4ac27] connected
2023-02-28 15:26:42  INFO: [Tb1e4ac27: osmand < 127.0.0.1] 504f5354202f3f69643d3832303533362674696d657374616d703d31363737353938303032266c61743d34342e353133393732266c6f6e3d2d3132322e383937313031372673706565643d352e313237393534373437373439373534452d362662656172696e673d302e3026616c7469747564653d39302e343030303031353235383738392661636375726163793d31312e37323039393937313737313234303226626174743d3130302e30266368617267653d7472756520485454502f312e310d0a557365722d4167656e743a2044616c76696b2f322e312e3020284c696e75783b20553b20416e64726f69642031333b20506978656c203661204275696c642f545131412e3233303230352e303032290d0a582d466f727761726465642d486f73743a20747261636361722e7065727464697370617463682e636f6d0d0a582d466f727761726465642d50726f746f3a2068747470730d0a582d466f727761726465642d466f723a2037332e39362e32352e3235340d0a4163636570742d456e636f64696e673a20677a69700d0a436f6e74656e742d547970653a206170706c69636174696f6e2f782d7777772d666f726d2d75726c656e636f6465640d0a5669613a20312e31207670732e7065727464697370617463682e636f6d0d0a582d466f727761726465642d466f723a203132372e302e302e310d0a582d466f727761726465642d50726f746f3a20687474700d0a582d466f727761726465642d486f73743a203132372e302e302e313a383038320d0a582d466f727761726465642d5365727665723a203132372e302e302e310d0a486f73743a206c6f63616c686f73743a353035350d0a436f6e74656e742d4c656e6774683a20300d0a0d0a
2023-02-28 15:26:42  INFO: [Tb1e4ac27: osmand > 127.0.0.1] 485454502f312e3120323030204f4b0d0a636f6e74656e742d6c656e6774683a20300d0a0d0a
2023-02-28 15:26:42  INFO: [Tb1e4ac27] error - NullPointerException
2023-02-28 15:26:42  INFO: [Tb1e4ac27] disconnected

I appreciate any help. I am fairly new to the software so I apologize if I'm missing something obvious.

Anton Tananaev2 years ago

Try enabling full stack traces to see the more error details.

bytem2 years ago

Hi Anton,

Thank you for the quick response. I've set the logger.level to "all" and now the log shows:

2023-02-28 15:39:07  INFO: [Ta9e2e105] connected
2023-02-28 15:39:07  INFO: [Ta9e2e105: osmand < 127.0.0.1] 504f5354202f3f69643d3136333932392674696d657374616d703d31363737303239333039266c61743d32392e323030313333266c6f6e3d2d38312e3338323935322673706565643d36302e37363535393637313532383339362662656172696e673d3234382e3735323833383133343736353626616c7469747564653d342e3736383835343832323936333437362661636375726163793d342e36333135353135303733393932353226626174743d3836266368617267653d7472756520485454502f312e310d0a4163636570743a202a2f2a0d0a557365722d4167656e743a2054726163636172436c69656e742f35382043464e6574776f726b2f313430322e302e382044617277696e2f32322e322e300d0a4163636570742d4c616e67756167653a20656e2d55532c656e3b713d302e390d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174650d0a5669613a20312e31207670732e7065727464697370617463682e636f6d0d0a582d466f727761726465642d466f723a203137322e35382e3137342e3139320d0a582d466f727761726465642d50726f746f3a20687474700d0a582d466f727761726465642d486f73743a207777772e7065727464697370617463682e636f6d3a383038320d0a582d466f727761726465642d5365727665723a203137302e3234392e3233382e3232390d0a486f73743a206c6f63616c686f73743a353035350d0a436f6e74656e742d4c656e6774683a20300d0a0d0a
2023-02-28 15:39:07  INFO: [Ta9e2e105: osmand > 127.0.0.1] 485454502f312e3120323030204f4b0d0a636f6e74656e742d6c656e6774683a20300d0a0d0a
2023-02-28 15:39:07  INFO: [Ta9e2e105] error - Cannot invoke "org.traccar.model.User.getId()" because "user" is null - NullPointerException (CacheManager:151 < ... < *:152 < NotificationManager:107 < ... < *:106 < *:148 < ConnectionManager:245 < ...)
2023-02-28 15:39:07  INFO: [Ta9e2e105] disconnected
Anton Tananaev2 years ago

Seems like some issue with the database. Did you use MyISAM database engine in the past?

bytem2 years ago

I'm not 100% sure on that. The current MySQL server's default storage engine is InnoDB and all tables in the Traccar DB are InnoDB.

[root@vps conf]# mysqladmin var | grep -i default_storage_engine
| default_storage_engine                                   | InnoDB
| pertemer_traccar | DATABASECHANGELOG      | InnoDB |
| pertemer_traccar | DATABASECHANGELOGLOCK  | InnoDB |
| pertemer_traccar | tc_attributes          | InnoDB |
| pertemer_traccar | tc_calendars           | InnoDB |
| pertemer_traccar | tc_commands            | InnoDB |
| pertemer_traccar | tc_commands_queue      | InnoDB |
| pertemer_traccar | tc_device_attribute    | InnoDB |
| pertemer_traccar | tc_device_command      | InnoDB |
| pertemer_traccar | tc_device_driver       | InnoDB |
| pertemer_traccar | tc_device_geofence     | InnoDB |
| pertemer_traccar | tc_device_maintenance  | InnoDB |
| pertemer_traccar | tc_device_notification | InnoDB |
| pertemer_traccar | tc_device_order        | InnoDB |
| pertemer_traccar | tc_device_report       | InnoDB |
| pertemer_traccar | tc_devices             | InnoDB |
| pertemer_traccar | tc_drivers             | InnoDB |
| pertemer_traccar | tc_events              | InnoDB |
| pertemer_traccar | tc_geofences           | InnoDB |
| pertemer_traccar | tc_group_attribute     | InnoDB |
| pertemer_traccar | tc_group_command       | InnoDB |
| pertemer_traccar | tc_group_driver        | InnoDB |
| pertemer_traccar | tc_group_geofence      | InnoDB |
| pertemer_traccar | tc_group_maintenance   | InnoDB |
| pertemer_traccar | tc_group_notification  | InnoDB |
| pertemer_traccar | tc_group_order         | InnoDB |
| pertemer_traccar | tc_group_report        | InnoDB |
| pertemer_traccar | tc_groups              | InnoDB |
| pertemer_traccar | tc_keystore            | InnoDB |
| pertemer_traccar | tc_maintenances        | InnoDB |
| pertemer_traccar | tc_notifications       | InnoDB |
| pertemer_traccar | tc_orders              | InnoDB |
| pertemer_traccar | tc_positions           | InnoDB |
| pertemer_traccar | tc_reports             | InnoDB |
| pertemer_traccar | tc_servers             | InnoDB |
| pertemer_traccar | tc_statistics          | InnoDB |
| pertemer_traccar | tc_user_attribute      | InnoDB |
| pertemer_traccar | tc_user_calendar       | InnoDB |
| pertemer_traccar | tc_user_command        | InnoDB |
| pertemer_traccar | tc_user_device         | InnoDB |
| pertemer_traccar | tc_user_driver         | InnoDB |
| pertemer_traccar | tc_user_geofence       | InnoDB |
| pertemer_traccar | tc_user_group          | InnoDB |
| pertemer_traccar | tc_user_maintenance    | InnoDB |
| pertemer_traccar | tc_user_notification   | InnoDB |
| pertemer_traccar | tc_user_order          | InnoDB |
| pertemer_traccar | tc_user_report         | InnoDB |
| pertemer_traccar | tc_user_user           | InnoDB |
| pertemer_traccar | tc_users               | InnoDB |

If MyISAM engine was used in the past, is there a way I can fix this now? I'll give it a try.

Anton Tananaev2 years ago

Check foreign key constraints in the database.

bytem2 years ago

Here is what I've found:

mysql> select *
    -> from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    -> where CONSTRAINT_TYPE = 'FOREIGN KEY';
+--------------------+-------------------+---------------------------+------------------+------------------+-----------------+----------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME           | TABLE_SCHEMA     | TABLE_NAME       | CONSTRAINT_TYPE | ENFORCED |
+--------------------+-------------------+---------------------------+------------------+------------------+-----------------+----------+
| def                | pertemer_traccar  | fk_device_report_deviceid | pertemer_traccar | tc_device_report | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_device_report_reportid | pertemer_traccar | tc_device_report | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_group_report_groupid   | pertemer_traccar | tc_group_report  | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_group_report_reportid  | pertemer_traccar | tc_group_report  | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_reports_calendarid     | pertemer_traccar | tc_reports       | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_user_report_reportid   | pertemer_traccar | tc_user_report   | FOREIGN KEY     | YES      |
| def                | pertemer_traccar  | fk_user_report_userid     | pertemer_traccar | tc_user_report   | FOREIGN KEY     | YES      |
+--------------------+-------------------+---------------------------+------------------+------------------+-----------------+----------+
7 rows in set (0.01 sec)

Is this correct?

Anton Tananaev2 years ago

No, looks like you're missing almost all constraints. Maybe you can recreate the database:

  1. Make data only backup
  2. Start Traccar with an empty database so it generated the correct schema
  3. Import the old data (you would have to fix the constraints issues here)
bytem2 years ago

I believe I followed the instructions correctly. The new database is showing more tables with constraints:

| def                | pertemer_newdb    | fk_device_command_commandid           | pertemer_newdb   | tc_device_command      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_command_deviceid            | pertemer_newdb   | tc_device_command      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_driver_deviceid             | pertemer_newdb   | tc_device_driver       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_driver_driverid             | pertemer_newdb   | tc_device_driver       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_geofence_deviceid           | pertemer_newdb   | tc_device_geofence     | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_geofence_geofenceid         | pertemer_newdb   | tc_device_geofence     | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_maintenance_deviceid        | pertemer_newdb   | tc_device_maintenance  | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_maintenance_maintenanceid   | pertemer_newdb   | tc_device_maintenance  | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_notification_deviceid       | pertemer_newdb   | tc_device_notification | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_notification_notificationid | pertemer_newdb   | tc_device_notification | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_geofence_calendar_calendarid       | pertemer_newdb   | tc_geofences           | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_attribute_attributeid        | pertemer_newdb   | tc_group_attribute     | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_attribute_groupid            | pertemer_newdb   | tc_group_attribute     | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_command_commandid            | pertemer_newdb   | tc_group_command       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_command_groupid              | pertemer_newdb   | tc_group_command       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_driver_driverid              | pertemer_newdb   | tc_group_driver        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_driver_groupid               | pertemer_newdb   | tc_group_driver        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_geofence_geofenceid          | pertemer_newdb   | tc_group_geofence      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_geofence_groupid             | pertemer_newdb   | tc_group_geofence      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_maintenance_groupid          | pertemer_newdb   | tc_group_maintenance   | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_maintenance_maintenanceid    | pertemer_newdb   | tc_group_maintenance   | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_notification_groupid         | pertemer_newdb   | tc_group_notification  | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_notification_notificationid  | pertemer_newdb   | tc_group_notification  | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_notification_calendar_calendarid   | pertemer_newdb   | tc_notifications       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_attribute_attributeid         | pertemer_newdb   | tc_user_attribute      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_attribute_userid              | pertemer_newdb   | tc_user_attribute      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_calendar_calendarid           | pertemer_newdb   | tc_user_calendar       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_calendar_userid               | pertemer_newdb   | tc_user_calendar       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_command_commandid             | pertemer_newdb   | tc_user_command        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_command_userid                | pertemer_newdb   | tc_user_command        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_device_attribute_attributeid  | pertemer_newdb   | tc_device_attribute    | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_device_attribute_deviceid     | pertemer_newdb   | tc_device_attribute    | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_driver_driverid               | pertemer_newdb   | tc_user_driver         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_driver_userid                 | pertemer_newdb   | tc_user_driver         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_geofence_geofenceid           | pertemer_newdb   | tc_user_geofence       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_geofence_userid               | pertemer_newdb   | tc_user_geofence       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_group_groupid                 | pertemer_newdb   | tc_user_group          | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_group_userid                  | pertemer_newdb   | tc_user_group          | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_maintenance_maintenanceid     | pertemer_newdb   | tc_user_maintenance    | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_maintenance_userid            | pertemer_newdb   | tc_user_maintenance    | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_notification_notificationid   | pertemer_newdb   | tc_user_notification   | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_notification_userid           | pertemer_newdb   | tc_user_notification   | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_groups_groupid                     | pertemer_newdb   | tc_groups              | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_user_manageduserid            | pertemer_newdb   | tc_user_user           | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_user_userid                   | pertemer_newdb   | tc_user_user           | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_device_deviceid               | pertemer_newdb   | tc_user_device         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_device_userid                 | pertemer_newdb   | tc_user_device         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_positions_deviceid                 | pertemer_newdb   | tc_positions           | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_events_deviceid                    | pertemer_newdb   | tc_events              | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_order_orderid                 | pertemer_newdb   | tc_user_order          | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_order_userid                  | pertemer_newdb   | tc_user_order          | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_order_groupid                | pertemer_newdb   | tc_group_order         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_order_orderid                | pertemer_newdb   | tc_group_order         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_order_deviceid              | pertemer_newdb   | tc_device_order        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_order_orderid               | pertemer_newdb   | tc_device_order        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_commands_queue_deviceid            | pertemer_newdb   | tc_commands_queue      | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_devices_groupid                    | pertemer_newdb   | tc_devices             | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_reports_calendarid                 | pertemer_newdb   | tc_reports             | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_report_reportid               | pertemer_newdb   | tc_user_report         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_user_report_userid                 | pertemer_newdb   | tc_user_report         | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_report_groupid               | pertemer_newdb   | tc_group_report        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_group_report_reportid              | pertemer_newdb   | tc_group_report        | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_report_deviceid             | pertemer_newdb   | tc_device_report       | FOREIGN KEY     | YES      |
| def                | pertemer_newdb    | fk_device_report_reportid             | pertemer_newdb   | tc_device_report       | FOREIGN KEY     | YES      |
+--------------------+-------------------+---------------------------------------+------------------+------------------------+-----------------+----------+

However, the error is still the same:

2023-02-28 19:32:07  INFO: [T6b53473d] connected
2023-02-28 19:32:07  INFO: [T6b53473d: osmand < 127.0.0.1] 504f5354202f3f69643d3832303533362674696d657374616d703d31363737363132363133266c61743d34342e35313431343033266c6f6e3d2d3132322e383937303633372673706565643d312e323831393336383333393636343635452d342662656172696e673d302e3026616c7469747564653d39302e343030303031353235383738392661636375726163793d382e33353939393936353636373732343626626174743d3130302e30266368617267653d7472756520485454502f312e310d0a557365722d4167656e743a2044616c76696b2f322e312e3020284c696e75783b20553b20416e64726f69642031333b20506978656c203661204275696c642f545131412e3233303230352e303032290d0a582d466f727761726465642d486f73743a20747261636361722e7065727464697370617463682e636f6d0d0a582d466f727761726465642d50726f746f3a2068747470730d0a582d466f727761726465642d466f723a2037332e39362e32352e3235340d0a4163636570742d456e636f64696e673a20677a69700d0a436f6e74656e742d547970653a206170706c69636174696f6e2f782d7777772d666f726d2d75726c656e636f6465640d0a5669613a20312e31207670732e7065727464697370617463682e636f6d0d0a582d466f727761726465642d466f723a203132372e302e302e310d0a582d466f727761726465642d50726f746f3a20687474700d0a582d466f727761726465642d486f73743a203132372e302e302e313a383038320d0a582d466f727761726465642d5365727665723a203132372e302e302e310d0a486f73743a206c6f63616c686f73743a353035350d0a436f6e74656e742d4c656e6774683a20300d0a0d0a
2023-02-28 19:32:07  INFO: [T6b53473d: osmand > 127.0.0.1] 485454502f312e3120323030204f4b0d0a636f6e74656e742d6c656e6774683a20300d0a0d0a
2023-02-28 19:32:07  INFO: [T6b53473d] error - Cannot invoke "org.traccar.model.User.getId()" because "user" is null - NullPointerException (CacheManager:136 < ... < *:137 < NotificationManager:103 < ... < *:102 < *:126 < ConnectionManager:245 < ...)
2023-02-28 19:32:07  INFO: [T6b53473d] disconnected

I also noticed the old server was running Traccar version 5.4 and the new server is running 5.6. I reinstalled version 5.4 on the new server but that still didn't fix the issue.

Anton Tananaev2 years ago

When you imported the data, have you fixed the constraint violations?

bytem2 years ago

Hi Anton,

Thank you again for your help. I apologize, I'm unsure how to fix constraint violations. I thought allowing Traccar to restructure a new database would resolve any constraint violations. I ended up reinstalling Traccar 5.4, created a brand new database, imported the backup of the database that was taken on the old server, then after starting Traccar it appears to be working again.
I'm impressed with your quick support and I appreciate you helping me.

Anton Tananaev2 years ago

When you import the backup, it should give you a bunch of errors that you need to resolve. If it didn't, it probably means you disabled constraints check. You shouldn't do that because you will end up with the same problem.

bytem2 years ago

That makes sense. I did get an error when trying to import the first time, so I used --force and then I got these two errors:

# mysql --force pertemer_newdb < pertemer_traccar-data-only.sql
ERROR 1062 (23000) at line 34: Duplicate entry '1' for key 'DATABASECHANGELOGLOCK.PRIMARY'
ERROR 1062 (23000) at line 2353: Duplicate entry '1' for key 'tc_servers.PRIMARY'

Are these the constraints you are talking about? I thought about modifying the .sql dump to add "INSERT IGNORE INTO" for the two problematic lines, but I'm not sure if that would be the correct approach.

Anton Tananaev2 years ago

The whole point is that you shouldn't ignore the errors. You have to fix them.

bytem2 years ago

Thanks again Anton. I guess my reasoning is if the data trying to import is a duplicate and already exists in the table it can be skipped or replaced. I don't have the slightest clue on what actual data needs to go into the table or key because that is handled by the software. Not sure how it got corrupt or had an issue to begin with. Reverting to an older version and using an old database was able to import without any errors and now connections are being made again.