Capa Como configurar um servidor web MySQL

Como configurar um servidor web MySQL Deixe um comentário

Um carro de fórmula elétrico possui uma grande quantidade de dados que são gerados a cada segundo, o sistema de telemetria do protótipo CE-22 do Cheetah E-Racing é capaz de coletar 76 valores de diversos sensores espalhados pelo carro em uma frequência de 10 Hz. Organizar essas informações não é uma tarefa simples, e por isso utilizamos um banco de dados para facilitar o acesso posterior dos dados adquiridos para uso em análises de desempenho e para manutenção. O servidor de banco de dados usado pela equipe é o MariaDB, um fork do MySQL open-source e licenciado em GPLv2/LGPL que mantém total compatibilidade com o projeto de origem.

Nesse tutorial iremos demonstrar como instalar o MariaDB, realizar uma configuração inicial e armazenar dados utilizando uma aplicação desenvolvida em Node.js

Instalando o MySQL

Em sistemas baseados em debian (como Ubuntu/Pop OS/Mint/Raspberry PI OS), basta executar como superusuário:

sudo apt update && sudo apt install apache2 mariadb-server phpmyadmin

No Windows, é possível baixar pacotes que incluem todas as ferramentas necessárias para rodar um servidor apache com MySQL/MariaDB e php em um único executável. Um exemplo recomendado é o WAMP (Windows Apache MySQL PHP) server, que pode ser baixado no link: https://www.wampserver.com/en/

Configuração Windows (WAMP Server)

Após baixar o arquivo executável no site, siga os passos do instalador:

tela de seleção de versões no processo para configurar um servidor web MySQL
Tela de seleção de versões

Na tela de seleção de versões, deixe as opções padrão (default) selecionadas.

Linux

Após instalar os pacotes necessários, execute o script mariadb-secure-installation, e siga os passos abaixo de forma a selecionar as opções conforme aparecem na tela:

  1. localhost:# mysql_secure_installation
  2. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
  3. In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here.
  4. Enter current password for root (enter for none): OK, successfully used password, moving on…
  5. Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.
  6. You already have a root password set, so you can safely answer ‘n’.
  7. Change the root password? [Y/n] n … skipping.
  8. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
  9. Remove anonymous users? [Y/n] y … Success!
  10. Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network.
  11. Disallow root login remotely? [Y/n] y … Success!
  12. By default, MariaDB comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.
  13. Remove test database and access to it? [Y/n] y – Dropping test database… … Success! – Removing privileges on test database… … Success!
  14. Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
  15. Reload privilege tables now? [Y/n] y … Success!
  16. Cleaning up…
  17. All done! If you’ve completed all of the above steps, your MariaDB installation should now be secure.
  18. Thanks for using MariaDB!

Instalando o Node.js

Para fazer a comunicação do sistema de telemetria com o banco de dados usaremos o servidor node.js. Basta seguir as instruções de instalação para seu sistema operacional:

Windows

Baixe o instalador para windows no site oficial da node: https://nodejs.org/en/download/. Execute o programa e certifique-se de que o comando foi adicionado corretamente à variável de ambiente PATH.

Linux

Em sistemas baseados em debian basta executar como super usuário:

sudo apt update && sudo apt install nodejs

Criando um banco de dados de teste

Acesse a configuração do banco de dados pelo terminal do seu sistema operacional com o comando mariadb. Em seguida, crie um banco de dados com:

CREATE DATABASE banco_teste;

E crie uma tabela chamada dados com:

USE banco_teste;
CREATE TABLE dados (
id int NOT NULL,
valor int,
PRIMARY KEY (ID)
);

Essa tabela de teste tem apenas duas colunas, uma para um id do sensor e outra para o valor medido. Para conseguir se conectar ao servidor, é necessário criar um usuário e dar as permissões de acesso. Como é um servidor de testes, podemos criar um novo administrador:

CREATE USER ‘cheetah’@’localhost’ IDENTIFIED BY ‘cheetah’;

GRANT ALL PRIVILEGES ON banco_teste.*  TO ‘cheetah’@’localhost’;

FLUSH PRIVILEGES;

Criando um programa node

Para a programação em javascript é possível utilizar qualquer IDE de sua preferência (até mesmo o bloco de notas do seu sistema operacional). Porém, para facilitar e agilizar o processo, recomendamos uma IDE como o VSCodium, que será usado nesse tutorial, ou o Atom. Crie uma nova pasta e no terminal da sua IDE ou outro ambiente de trabalho inicialize o node com:

npm init

O configurador irá apresentar uma série de opções, que podem ser mantidas em seus respectivos padrões. Dentro da pasta crie dois arquivos, um index.js que será a aplicação principal e um banco.js que será o programa de comunicação com o banco de dados. No arquivo index.js, criaremos um servidor com o pacote http. Cole o código abaixo no editor:

let porta = 8081;
let http = require("http");
 
http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Bem vindo ao servidor de telemetria\n');
}).listen(porta);
console.log('Servidor aberto na porta ' + porta)

Verifique se o programa está funcionando corretamente executando em seu terminal:

node index.js

No terminal a mensagem “Servidor aberto na porta 8081” deverá aparecer, e ao acessar o site em seu navegador no endereço localhost:8081 a mensagem “Bem vindo ao servidor de telemetria” será mostrada.

Conectando ao banco de dados

Para realizar a comunicação com o mysql usaremos o pacote mysql2 do node. A principal vantagem do pacote mysql2 em relação ao pacote mysql original é o melhor desempenho já que se baseia em versões mais modernas do javascript. Para instalá-lo, use o seguinte comando no terminal:

npm i mysql2

Com o pacote instalado, vamos ao arquivo banco.js para iniciar a programação. Criaremos uma função assíncrona para abrir a comunicação, já que a conexão com um banco de dados pode demorar um tempo variável e não queremos travar o restante do programa enquanto ela não for consolidada. Na função createConnection, substitua com os dados do seu banco de dados no formato mysql://usuario:senha@servidor:porta/database. Assim, a primeira parte do código fica:

async function connect(){
   const mysql = require("mysql2/promise");
   const connection = await mysql.createConnection("mysql://cheetah:cheetah@localhost:3306/banco_teste");
   global.connection = connection;
   return connection;
}

Para realizar a inserção de dados, criaremos uma query sql em outra função. Aqui é importante se atentar para o uso de “?” ao invés de montar a string sql manualmente, o que evita a chance de comportamento inesperado durante a execução do programa devido a SQL injection. Assim, a segunda função fica:

async function insereDados(dados){
   const conn = await connect();
   const sql = 'INSERT INTO dados(id,valor) VALUES (?,?);';
   const values = [dados.ID, dados.valor];
   return await conn.query(sql, values);
}

Finalmente, no final do programa chame a função connect() para que inicialize a comunicação quando o arquivo for chamado e exporte a função insereDados:

connect();
module.exports = {insereDados}

Voltando ao index.js, adicionaremos o seguinte código para a inserção de dados:

(async () => {
   let dados = {
       ID: 23,
       valor: 14
   }
 const db = require("./banco");
   const result = await db.insereDados(dados);
   console.log(result);
})();

Pronto! se tudo estiver certo, os dados foram inseridos no banco. Para verificar, utilize o comando 

SELECT * FROM dados;

no terminal mysql. O resultado deve ser algo parecido com:

+—-+——-+

| id | valor |

+—-+——-+

| 21 |    15 |

| 23 |    14 |

+—-+——-+

2 rows in set (0,00 sec)

E aí, gostou desse tutorial de conexão do mysql com o node.js? Então fique ligado no Blog da MakerHero, assim como no Instagram para mais conteúdo sobre telemetria de fórmula SAE!

Faça seu comentário

Acesse sua conta e participe