Ny fanaovana ny angon-drakitra ho an'ny fifandraisana lavitra

Andeha isika hanomboka amin'ny zava-misy fa misy toe-javatra izay mila manao fampiharana amin'ny fifandraisana amin'ny database. Izany dia atao mba tsy hivoahana be loatra amin'ny fivoaran'ny backend sy hifantoka amin'ny frontend noho ny tsy fahampian'ny tanana sy ny fahaiza-manao. Tsy afaka milaza aho fa ho azo antoka ny vahaolana, fa mahomby.

Satria tsy tiako ny mandoa vola amin'ny fampiantranoana dia nampiasa ny tambajotra aho tamin'ny asako, misy IP fotsy ao. Ity ny firafiny:

Ny fanaovana ny angon-drakitra ho an'ny fifandraisana lavitra

Manana solosaina maromaro aho, ny marimarina kokoa 192.168.1.2 (aka 192.168.0.2) misy Linux napetraka ao ary 192.168.0.3 miaraka amin'ny Windows. Amin'ny ankapobeny, nisafidy ny mysql ho an'ny fampiharana aho ary nijery izay misy amin'ny Linux. Efa napetraka teo fa tsy misy mahalala ny tenimiafina, ary izay nahafantatra dia nanadino (ireo izay niasa talohako). Rehefa fantatro fa tsy nisy nila izany, dia nofafako ary nanandrana nametraka azy indray. Tsy ampy ny fitadidiana, ary satria mba hamahana ity hadisoana ity dia tsy maintsy mampifandray monitor sy klavier miaraka amin'ny totozy aho, dia nanapa-kevitra ny hiala amin'ity raharaha ity aho. Ankoatr'izay, ny milina miaraka amin'ny Windows dia mahery kokoa ary miampy, manana izany ao amin'ny solosainako ao an-trano aho. Amin'ny ankapobeny, tsy hilazalaza ny fametrahana ny tenany aho; be dia be ny boky sy horonan-tsary momba izany. Rehefa nametraka mysql tamin'ny milina Windows aho, dia nanapa-kevitra ny hamerina ny latabatra avy amin'ny solosainako mankany amin'ny toeram-piasako.

Natao toy izao izany (raha ny ahy):

mysqldump -uroot -p your_base > dump_file.sql

Manaraka, mamorona tahiry ao amin'ny tahiry vaovao isika ary mamerina ny backup amin'ny milina "vaovao".

mysql -h localhost -u root -p

create database your_base;
use your_base;

mysql -uroot -p your_base < dump_file.sql

show tables;


Ny rakitra backup dia tsy maintsy apetraka amin'ny milina vaovao ary, angamba, raha tsy ao amin'ny lahatahiry miaraka amin'ny utility, dia ny lalana feno mankany aminy. (Vao avy nampiakatra ny backup tao amin'ny GitHub aho ary nanangona azy tamin'ny milina vaovao). Hanampy ny fomba namoronana ny latabatra aho, saingy tsy nitahiry ny pikantsary aho, ary heveriko fa tsy sarotra izany na dia ho an'ny mpianatra 2-3 taona aza.

Rehefa tafaverina amin'ny laoniny ny latabatra rehetra dia tonga ny fotoana hanaovana ny fidirana lavitra amin'ny angon-drakitra. Amin'ny ankapobeny, ny baiko toy izany dia tsy nitarika fahombiazana (fanomezana alalana mamaky voafantina ihany)

create user 'client'@'%' IDENTIFIED by 'client';
grant select on your_base . * to 'client'@'%';
flush privileges;

Raha ny marimarina kokoa, afaka mifandray amin'ny angon-drakitra ihany aho miaraka amin'ny baiko,

mysql -h localhost -u client -pclient

fa ity iray ity dia tsy afaka nanao izany intsony

mysql -h 192.168.0.3 -u client -pclient

Tsy nety tamiko izany ary tsy afaka nifandray tamin'ny alΓ lan'ity adiresy ity ho root aho.

Nanampy ny programa mysql workbench; ao amin'ny toe-javatra, manova ny localhost ho % ary miasa izany, na dia tsy nanampy aza ny mpanjifa. Ankehitriny ianao dia afaka mifandray amin'ny angon-drakitra avy amin'ny console na avy amin'ny code avy amin'ny adiresy rehetra.

Ny fanaovana ny angon-drakitra ho an'ny fifandraisana lavitra

Mila manangana tambajotra an-trano na orinasa ihany koa ianao ary vonoy ny firewall Windows, raha tsy izany dia tsy ho vitanao mihitsy ny ping an'ity milina ity (avelao hifandray amin'ny angon-drakitra).

Ny antsasaky ny asa dia vita, izao dia mila afaka mifandray amin'ny angon-drakitra avy any an-trano aho.

Araka ny hitanao amin'ny diagrama tambajotra, raha te hiditra amin'ny Internet ianao dia mila mandeha amin'ny 192.168.0.3 mankany 192.168.1.1 (router), andao handeha amin'ny lalana mifanohitra. Andao amboary ny lalana 192.168.1.1 mankany 192.168.1.2 toy izao:

Ny fanaovana ny angon-drakitra ho an'ny fifandraisana lavitra

Amin'ny ankapobeny, tsy miseho ilay sary, ka hosoratako amin'ny tanana izany:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

Tsy azo atao afa-tsy amin'ny subnet iray ihany, izany hoe tsy afaka mandroso avy hatrany any amin'ny adiresy 192.168.0.2 na 192.168.0.3.

Ilaina izany mba hahafantaran'ny router hoe aiza no misy ny subnet 192.168.0.0/24 (ilaina ny fianarana ny fototry ny tambajotra).

Ankehitriny dia manampy port forwarding 3306 (ny seranan-tsambo mysql default (raha tsy nanova izany ianao nandritra ny fametrahana)) amin'ny adiresy 192.168.1.2

Ny fanaovana ny angon-drakitra ho an'ny fifandraisana lavitra

Ny zavatra sarotra indrindra sisa atao dia ny manao fandefasana amin'ny milina Linux (manana karatra tambajotra roa 192.168.1.2 (enp3s1 interface) sy 192.168.0.2 (enp3s0 interface) mba hahafantaran'ny karatra tambajotra ny tokony hamindrana azy ireo amin'ny 192.168.1.2. mankany amin'ny 192.168.0.2, ary avy eo amin'ny milina Windows miaraka amin'ny MySql.

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

Ireo. Ny andalana voalohany dia midika fa manaiky ny fifandraisana voalohany isika, ny faha-1 sy ny faha-2 dia afaka mandefa fonosana amin'ny lalana roa, ny faha-3 sy faha-4 dia midika hoe manova ny toerana haleha sy ny adiresy loharano. Ary voila, afaka mifandray avy any an-trano amin'ny mysql ianao. Ary farany, ny code C ++ izay manao izao:

//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;
};

Ankehitriny dia azonao atao ny mandefa an'io programa io amin'ny olona rehetra, ary tsy mila manoratra azy io ianao mba hampandeha azy eo an-toerana.

Source: www.habr.com

Add a comment