Skip to content

Arduino unable to connect to database #237

@PaulRB

Description

@PaulRB

As recommended in the wiki documentation, I tested that I can connect to the database from a different system:

paul@paul-desktop:~$ sudo mysql -h192.168.1.201 -ugranary_sensors -ppassword  --port=3306
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 122
Server version: 10.11.5-MariaDB-log Alpine Linux

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select * from granary_sensors.granary_sensors
    -> ;
ERROR 1142 (42000): SELECT command denied to user 'granary_sensors'@'paul-desktop.lan' for table `granary_sensors`.`granary_sensors`
MariaDB [(none)]> insert into granary_sensors.granary_sensors (sensor_name, sensor_value) values ('tt', -999);
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> exit
Bye

The above is as expected. I have granted permission to the user granary_sensors to insert records into only that one table, and nothing else. That is why the select command fails but the insert command succeeds. So far, great.

Next, I took the example sketch from this library, amended it with my desired details and uploaded it to a Wemos D1 Mini Pro (an ESP8266 board):

/*
  MySQL Connector/Arduino Example : connect by wifi

  This example demonstrates how to connect to a MySQL server from an
  Arduino using an Arduino-compatible Wifi shield. Note that "compatible"
  means it must conform to the Ethernet class library or be a derivative
  with the same classes and methods.
  
  For more information and documentation, visit the wiki:
  https://github.com/ChuckBell/MySQL_Connector_Arduino/wiki.

  INSTRUCTIONS FOR USE

  1) Change the address of the server to the IP address of the MySQL server
  2) Change the user and password to a valid MySQL user and password
  3) Change the SSID and pass to match your WiFi network
  4) Connect a USB cable to your Arduino
  5) Select the correct board and port
  6) Compile and upload the sketch to your Arduino
  7) Once uploaded, open Serial Monitor (use 115200 speed) and observe

  If you do not see messages indicating you have a connection, refer to the
  manual for troubleshooting tips. The most common issues are the server is
  not accessible from the network or the user name and password is incorrect.

  Created by: Dr. Charles A. Bell
*/
#include <ESP8266WiFi.h>           // Use this for WiFi instead of Ethernet.h
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

IPAddress server_addr(192,168,1,201);  // IP of the MySQL *server* here
char user[] = "granary_sensors";              // MySQL user login username
char password[] = "password";        // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO granary_sensors.granary_sensors (sensor_name, sensor_value) VALUES ('TT', -999)";

// WiFi card example
char ssid[] = "granary";         // your SSID
char pass[] = "password";     // your SSID Password

WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // print out info about the connection:
  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");
  
  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
}

void loop()
{
  if (conn.connected())
    cursor->execute(INSERT_SQL);

  delay(5000);
}

I get the following error in Serial Monitor:

14:34:55.908 -> ..............
14:35:03.128 -> Connected to network
14:35:03.128 -> My IP address is: 192.168.1.76
14:35:03.128 -> Connecting to SQL...  ...trying...
14:35:03.460 -> Error: 88 = Access denied for user 'granary_sensors'@'ESP-D091A2.lan' (using password: YES).
14:35:03.460 -> FAILED.

Can anyone please help me spot my error, or suggest next steps to diagnose?

Arduino IDE: 1.8.19
MySQL_Connector_Arduino library version installed: 1.2.0
ESP8266 board core version: 3.1.2

Permissions for the granary_sensors user:

paul@paul-desktop:~$ mysql -uroot -ppassword -h192.168.1.201 --port=3306
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 150
Server version: 10.11.5-MariaDB-log Alpine Linux

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SHOW GRANTS FOR granary_sensors;
+----------------------------------------------------------------------------------------------------------------+
| Grants for granary_sensors@%                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `granary_sensors`@`%` IDENTIFIED BY PASSWORD '*733B51F92EB06BE45A3761D5B53B881709A82C03' |
| GRANT INSERT ON `granary_sensors`.`granary_sensors` TO `granary_sensors`@`%` WITH GRANT OPTION                 |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions