áá±áá¬áá±á·á áºáá áºáá¯ááá¯á· áá»áááºáááºááŸá¯ááŒáá·áº á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááŒá¯áá¯ááºááẠááá¯á¡ááºááá·áºááá á¹á áá»á¬áž ááŸááá±ááŒá±á¬ááºážááᯠá ááŒáá«á áá¯á·á Backend ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠá¡ááœááºá¡áá»áœá¶ ááá·áºááœááºážááŒá®áž áááºááŸáá·áº áá»áœááºážáá»ááºááŸá¯ áááŸáááŒááºážááŒá±á¬áá·áº ááŸá±á·áááºážááᯠá¡á¬áá¯á¶á áá¯ááºááẠáááºážááᯠáá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºáááŒá±ááŸááºážáá»ááºááẠáá¯á¶ááŒá¯á¶áááºáᯠáááŒá±á¬ááá¯ááºáá±á¬áºáááºáž áááºážááẠá¡áá¯ááºáá¯ááºáá«áááºá
hosting á¡ááœáẠááá¯ááºáá¶áá±ážááᬠáááŒáá¯ááºáá²á·á¡ááœáẠá¡áá¯ááºááŸá¬ network áá¯á¶ážáááºá á¡á²áá®ááŸá¬ white IP ááŸááááºá á€ááœáẠáááºážáááœá²á·á ááºážáá¯á¶ááŸá¬-
áá»áœááºá¯ááºááœáẠLinux ááŒáá·áº ááá·áºááœááºážáá¬ážáá±á¬ 192.168.1.2 (aka 192.168.0.2) ááŸáá·áº 192.168.0.3 ááá¯á·ááᯠWindows ááŒáá·áº á¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ ááœááºáá»á°áá¬áá»á¬ážá
áœá¬ááᯠáá»áœááºá¯ááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá±áá°áá»á¡á¬ážááŒáá·áº áá»áœááºá¯ááºááẠáá»áœááºá¯ááºáá¡ááá®áá±ážááŸááºážá¡ááœáẠmysql ááá¯ááœá±ážáá»ááºááŒá®áž Linux ááœááºáááŸáááá¯ááºáá±á¬á¡áá¬áá»á¬ážááá¯ááŒáá·áºááŸá¯áá²á·áááºá áááºážááᯠááá¯áá±áá¬ááœáẠááá·áºááœááºážáá¬ážááŒá®ážááŒá
áºáá±á¬áºáááºáž á
áá¬ážááŸááºááᯠáááºáá°áá»áŸ áááááá·áºá¡ááŒáẠáá±á·ááœá¬ážáá±á¬áá°áá»á¬áž (áá»áœááºá¯ááºáááŸá±á·ááŸá±á¬ááºááœáẠá¡áá¯ááºáá¯ááºáá°ážáá°áá»á¬áž) áá±á·ááœá¬ážááŒáááºá á¡á²áá«ááᯠáááºáá°á០áááá¯á¡ááºáá°ážááá¯áᬠááááá¯ááºááá±á¬á· áá»áœááºáá±á¬áº áá»ááºááŒá®áž ááŒááºááá·áºááá¯á· ááŒáá¯ážá
á¬ážáááºá áááºááá¯áá®á¡áá¯á¶á¡áá±á¬ááºáááŸááá«á á€á¡ááŸá¬ážááá¯ááŒááºáááºá¡ááœáẠáá»áœááºá¯ááºááẠáá±á¬áºáá®áá¬ááŸáá·áº áá®ážáá¯ááºááᯠáá±á¬ááºá
áºááŒáá·áº áá»áááºáááºááááºááŒá
áºáááŒáá·áº á€ááá
á¹á
ááᯠá
áœáá·áºááœáŸááºááẠáá¯á¶ážááŒááºáá²á·áááºá ááá¯á·á¡ááŒááºá Windows áá«áá±á¬á
ááºáááºááá¯ááá¯á¡á¬ážáá±á¬ááºážááŒá®ážá¡áááºááœááºáá»áœááºá¯ááºá laptop ááœááºáááºážááá¯ááŸááááºá áááá¬áá¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááẠáááºáááºááŸá¯ááá¯ááºááá¯ááºááᯠáá±á¬áºááŒáááºááá¯ááºáá«á áááºážááŸáá·áºáááºáááºááá·áº áááºá
áœá²á
á¬á¡á¯ááºáá»á¬ážááŸáá·áº áá®áá®ááá¯áá»á¬ážá
áœá¬ááŸááááºá mysql ááᯠWindows á
ááºááœáẠááá·áºááœááºážááŒá®ážáá±á¬á¡áá«á áá»áœááºá¯ááºááẠáá»áœááºá¯ááºá áááºááºáá±á¬á·á០á
á¬ážááœá²áá»á¬ážááᯠáá»áœááºá¯ááºá á¡áá¯ááºáá¯á¶ááá¯á· áá°ážáá°ááẠáá¯á¶ážááŒááºáá²á·áááºá
(áá«á·ááá á¹á ááœááº) á€áá²á·ááá¯á·áá¯ááºáá±á¬ááºááẠá
mysqldump -uroot -p your_base > dump_file.sql
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á áºá¡áá áºááœáẠáá±áá¬áá±á·á áºáá áºáá¯ááᯠáááºáá®ážááŒá®áž âá¡áá áºâ á ááºááœáẠá¡áááºáá°ážáá°ááŸá¯ááᯠááŒááºáááºááá°áá«á
mysql -h localhost -u root -p
create database your_base;
use your_base;
mysql -uroot -p your_base < dump_file.sql
show tables;
á¡áááºááá¯ááºááᯠá
ááºá¡áá
áºááœáẠáá¬ážááŸáááááºááŒá
áºááŒá®ážá utility ááŒáá·áº áááºážááœáŸááºááœáẠáááŸááá«áá áááºážááá¯á· áááºážááŒá±á¬ááºážá¡ááŒáá·áºááŸááááºá (áá»áœááºáá±á¬áºá á¡áááºáá°ážáá¬ááᯠGitHub ááŸá¬ á¡ááºáá¯ááºáá¯ááºááŒá®áž á
ááºá¡áá
áºááŸá¬ áá¯á¶áá°áá°ážáá¬ážáá«áááºá ááá¬ážáá»á¬ážááᯠááá¯ááºááá¯ááºáááºáá®ážáá¯á¶ááá·áºáááºááŒá
áºáá±á¬áºáááºáž áááºáá¬ážááŒááºáá¬ááºáá¯á¶áá»á¬ážááᯠáááááºážáááºážáá¬ážáá² 2-3 ááŸá
Ạáá»á±á¬ááºážáá¬ážá¡ááœááºááẠááááºáá²áᯠáááºáá«áááºá
ááá¬ážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒááºáááºááá°ááŒá®ážáá±á¬á¡áá«á áá±áá¬áá±á·á áºááá¯á· á¡áá±ážááŸáááºáá±á¬ááºáá¯á¶ážááá¯ááºá á±ááẠá¡áá»áááºáá±á¬ááºáá«ááŒá®á áá±áá°áá»á¡á¬ážááŒáá·áºá ááá¯á¡áááá·áºáá»á¬ážááẠá¡á±á¬ááºááŒááºááŸá¯áá®ááá¯á· áŠážáááºáááœá¬ážáá« (áááºážááẠááœá±ážáá»ááºááẠáááºáááºááœáá·áºááŒá¯áá»ááºáá±ážáááº)á
create user 'client'@'%' IDENTIFIED by 'client';
grant select on your_base . * to 'client'@'%';
flush privileges;
ááá¯ááŒá®ážááááááááŒá±á¬áááẠáá«á command áá²á·áᬠdatabase ááá¯áá»áááºáááºááá¯ááºáááºá
mysql -h localhost -u client -pclient
áá«áá±ááá·áº áá«á ááá¯ááºááá¯ááºáá±á¬á·áá°ážá
mysql -h 192.168.0.3 -u client -pclient
áááºážááẠáá»áœááºá¯ááºá¡ááœáẠá¡áá¯ááºáááŒá áºáá«á á€ááááºá á¬ááᯠroot á¡áá±ááŒáá·áº áá»áááºáááºááááá«á
mysql workbench áááá¯ááááºá áá°áá®áá±ážáá²á·áááºá áááºáááºáá»á¬ážááœááºá client ááẠááá°áá®áá±á¬áºáááºážá áááºážááẠlocalhost ááá¯á· % ááŒá±á¬ááºážááŒá®áž áááºážááẠá¡áá¯ááºáá¯ááºáááºá ááᯠáááºááẠááœááºááá¯ážááºá០áá±áá¬áá±á·á Ạááá¯á·ááá¯áẠáááºááá·áºááááºá á¬á០áá¯ááºá០áá»áááºáááºááá¯ááºáááºá
á¡ááẠááá¯á·ááá¯áẠáá¯ááºáááºážááœááºáááºáá
áºáá¯ááŒá¯áá¯ááºááŒá®áž Windows firewall ááá¯ááááºáááºáááºáž ááá¯á¡ááºáááºá ááá¯á·ááá¯ááºáá«á áááºááẠá€á
ááºááᯠping áá¯ááºááááá« (áá±áá¬áá±á·á
áºááá¯á· áá»áááºáááºáá±áá±áá¬áá¬)á
á¡áá¯ááºáá áºáááºááŒá®ážááœá¬ážááŒá®á á¡áᯠá¡áááºááá±áá±áá¬áá±á·á áºááᯠáá»áááºáááºááá¯ááºááááºá
network diagram ááŸááŒááºááá¯ááºáááºá¡ááá¯ááºážá á¡ááºáá¬áááºááá¯á·áá±á¬ááºááẠ192.168.0.3 á០192.168.1.1 (router ááá¯á·ááœá¬ážáááºááá¯á¡ááºáááº)á ááá·áºáá»ááºáááºááá¯á·ááœá¬ážááŒáá«á áá¯á·á 192.168.1.1 á០192.168.1.2 ááá¯á· á€áá²á·ááá¯á· áááºážááŒá±á¬ááºážááᯠáááºááŸááºááŒáá«á áá¯á·á
áá±áá°áá»á¡á¬ážááŒáá·áºáá±á¬á· áá¯á¶ááŸá¬áááŒáááºáá¬ááá¯á· áááºáá²á·áá±ážáá«áááºá
route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2
áááºážááᯠsubnet áá áºáá¯ááœááºáᬠáá¯ááºáá±á¬ááºááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ áááºááẠááááºá ᬠ192.168.0.2 ááá¯á·ááá¯áẠ192.168.0.3 ááá¯á· áá»ááºáá»ááºážáááá¯á·ááá¯ááºáá«á
subnet 192.168.0.0/24 áááºáá±áá¬ááᯠrouter á ááá á±áááºá¡ááœáẠááá¯á¡ááºááẠ(ááœááºáááºáá»á¬ážá á¡ááŒá±áá¶áá»á¬ážááᯠáá±á·áá¬ááŒááºážááẠá¡áá¯á¶ážáááºáááº)á
ááᯠáá»áœááºá¯ááºááá¯á·ááẠááááºá ᬠ3306 ááá¯á· ááá¯á·ááºáááºááá·áºááŒááºáž 192.168.1.2 (áá°á mysql ááááºáááºáž (áááºáááºáá±á ááºá¡ááœááºáž áááŒá±á¬ááºážáá²áá«á)) ááᯠáá±á«ááºážááá·áºáááºá
áá¯ááºáááºá¡áááºáá¯á¶ážáá»ááºááá·áºá¡áá¬ááŸá¬ Linux á
ááºáá
áºáá¯áá±á«áºááœáẠforwarding ááŒá¯áá¯ááºáááºááŒá
áºááẠ(áááºážááœáẠnetwork cards 192.168.1.2 (enp3s1 interface) ááŸáá·áº 192.168.0.2 (enp3s0 interface) ááẠnetwork cards á០áááºážááá¯á·ááᯠ192.168.1.2 á០áááºááá¯á·ááœáŸá²ááŒá±á¬ááºážááááºááᯠááááŸáááá¯ááºá
á±áááºááŒá
áºáááºá 192.168.0.2 ááá¯á·á ááá¯á·áá±á¬áẠMySql ááŒáá·áº áá»áœááºá¯ááºááá¯á·á Windows á
ááºááá¯á·á
sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -p tcp --syn --dport 3306 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i enp3s0 -o enp3s1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i enp3s1 -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.3
sudo iptables -t nat -A POSTROUTING -o enp3s0 -p tcp --dport 3306 -d 192.168.0.3 -j SNAT --to-source 192.168.1.2
О пПÑлеЎМÑÑ ÑÑÑПÑка ÑПÑ
ÑаМÑÐµÑ Ð²Ð²ÐµÐŽÐµÐœÐœÑе ÐºÐŸÐŒÐ°ÐœÐŽÑ ÑÑÐŸÐ±Ñ ÐŸÐœÐž пÑО пеÑезапÑÑке ПÑО Ме ÑÑеÑлОÑÑ
sudo service iptables-persistent save
á¡á²áá«ááœá±á 1st line ááẠáá»áœááºá¯ááºááá¯á·ááẠáááºážááŒá±á¬ááºážááŸá áºáá¯áá¯á¶ážááœáẠpacket áá»á¬ážááᯠáá±ážááá¯á·ááá¯ááºááá·áº ááááá»áááºáááºááŸá¯ááᯠáááºáá¶ááŒá±á¬ááºážá 2nd ááŸáá·áº 3rd ááẠáááºážááŒá±á¬ááºážááŸá áºáá¯á áá¯á¶ážááᯠáááºáá¶ááŒá±á¬ááºážá 4th ááŸáá·áº 5th ááẠáŠážáááºáá¬ááŸáá·áº á¡áááºážá¡ááŒá áºááááºá á¬áá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºážááᯠááá¯ááá¯áááºá áá«ááá¯áááºáá±á¬á· mysql ááŸáááá·áº á¡áááºááá± áá»áááºáááºááá¯ááºáá«áááºá áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á áá«ááá¯áá¯ááºáá±á¬ááºáá²á· áá«á·áá²á· C++ áá¯ááº
//DataBaseConnection.cpp
#include "DataBaseConnection.h"
DataBaseConnection::DataBaseConnection()
{
}
void DataBaseConnection::Connect()
{
// ÐПлÑÑаеЌ ЎеÑкÑОпÑÐŸÑ ÑПеЎОМеМОÑ
conn = mysql_init(NULL);
if (conn == NULL)
{
// ÐÑлО ЎеÑкÑОпÑÐŸÑ ÐœÐµ пПлÑÑеМ â вÑвПЎОЌ ÑППбÑеМОе Пб ПÑОбке
fprintf(stderr, "Error: can'tcreate MySQL-descriptorn");
//exit(1); //ÐÑлО ОÑпПлÑзÑеÑÑÑ ÐŸÐºÐŸÐœÐœÐŸÐµ пÑОлПжеМОе
}
// ÐПЎклÑÑаеЌÑÑ Ðº ÑеÑвеÑÑ
if (!mysql_real_connect(conn, "192.168.0.3", "root", "password", "your_base", NULL, NULL, 0))
{
// ÐÑлО ÐœÐµÑ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑО ÑÑÑаМПвОÑÑ ÑПеЎОМеМОе Ñ ÑеÑвеÑПЌ
// Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
вÑвПЎОЌ ÑППбÑеМОе Пб ПÑОбке
fprintf(stderr, "Error: can't connect to database: %sn", mysql_error(conn));
}
else
{
// ÐÑлО ÑПеЎОМеМОе ÑÑпеÑМП ÑÑÑаМПвлеМП вÑвПЎОЌ ÑÑÐ°Ð·Ñ - "Success!"
fprintf(stdout, "Success!n");
}
}
std::vector<std::string> DataBaseConnection::Query()
{
vectordrum.clear();
std::string query = "SELECT * FROM drum where id=0";
const char * q = query.c_str();
qstate = mysql_query(conn, q);
if (!qstate)
{
res = mysql_store_result(conn);
while (row = mysql_fetch_row(res))
{
//printf("ID: %s,Position: %s, Image: %sn", row[0], row[1], row[2]);
vectordrum.push_back(row[2]);
}
}
else
{
std::cout << "Query failed:" << mysql_error(conn) << std::endl;
}
return vectordrum;
}
void DataBaseConnection::Close()
{
// ÐакÑÑваеЌ ÑПеЎОМеМОе Ñ ÑеÑвеÑПЌ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
mysql_close(conn);
}
DataBaseConnection::~DataBaseConnection()
{
vectordrum.clear();
}
//DataBaseConnection.h
#pragma once
#include <iostream>
#include <mysql.h>
#include <vector>
#pragma comment(lib,"mysqlcppconn.lib")
#pragma comment(lib,"libmysql.lib")
class DataBaseConnection
{
public:
DataBaseConnection();
void Connect();
std::vector<std::string> Query();
void Close();
~DataBaseConnection();
MYSQL *conn;
MYSQL_ROW row;
MYSQL_RES *res;
int qstate;
std::vector<std::string> vectordrum;
};
ááᯠáááºááẠá€áááá¯ááááºááᯠáááºáá°áááá¯áᶠáá¯á¶ááŒá¯á¶á
áœá¬ áá±ážááá¯á·ááá¯ááºááŒá®ááŒá
áºááŒá®áž áááºážááᯠááŒááºááœááºážááœáẠá¡áá¯ááºáá¯ááºá
á±ááẠáááºážááᯠááŒááºáááºáá±ážáá¬ážááẠáááá¯á¡ááºáá«á
source: www.habr.com