Ukwenza isizindalwazi sitholakalele ukuxhumana okukude

Ake siqale ngeqiniso lokuthi kukhona izimo lapho udinga ukwenza isicelo ngoxhumano ku-database. Lokhu kwenzelwa ukuthi kungangeni kakhulu ekuthuthukisweni kwe-backend futhi kugxilwe ku-frontend ngenxa yokuntuleka kwezandla namakhono. Angikwazi ukusho ukuthi isisombululo sami sizobe siphephile, kodwa siyasebenza.

Njengoba ngingathandi ukukhokhela ukusingathwa, ngisebenzise inethiwekhi emsebenzini wami, kune-IP emhlophe lapho. Nasi isakhiwo sayo:

Ukwenza isizindalwazi sitholakalele ukuxhumana okukude

Nginokufinyelela kumakhompuyutha amaningana, ngokuqondile 192.168.1.2 (aka 192.168.0.2) ne-Linux efakwe lapho kanye ne-192.168.0.3 ene-Windows. Ngokuvamile, ngikhethe i-mysql yesicelo sami futhi ngabheka ukuthi yini etholakala ku-Linux. Yayivele ifakiwe lapho, kodwa akekho owazi iphasiwedi, futhi labo ababazi bakhohlwe (labo ababesebenza ngaphambi kwami). Ngemva kokufunda ukuthi akekho owayeyidinga, ngayisula futhi ngazama ukuyifaka futhi. Yayingekho inkumbulo eyanele, futhi njengoba ukuze ngilungise leli phutha kwakuzodingeka ngixhume imonitha nekhibhodi ngegundane kuyo, nganquma ukuyiyeka le ndaba. Ngaphezu kwalokho, umshini oneWindows unamandla kakhulu futhi futhi, nginawo kukhompuyutha yami ephathekayo ekhaya. Empeleni, ngeke ngikuchaze ukufakwa ngokwako; kunenqwaba yezincwadi namavidiyo ngakho. Ngemva kokufaka i-mysql emshinini we-Windows, nginqume ukwenza isipele amatafula kusuka kukhompyutha yami ephathekayo kuya endaweni yami yokusebenza.

Kwenziwa kanje (endabeni yami):

mysqldump -uroot -p your_base > dump_file.sql

Okulandelayo, sakha i-database ku-database entsha futhi sibuyisela isipele emshinini "omusha".

mysql -h localhost -u root -p

create database your_base;
use your_base;

mysql -uroot -p your_base < dump_file.sql

show tables;


Ifayela eliyisipele kufanele libekwe emshinini omusha futhi, mhlawumbe, uma lingekho kuhlu lwemibhalo olunensizakalo, khona-ke indlela ephelele eya kulo. (Ngisanda kulayisha isipele ku-GitHub futhi ngisihlanganise emshinini omusha). Ngingengeza ukuthi amatafula ngokwawo adalwe kanjani, kodwa angizange ngigcine izithombe-skrini, futhi ngicabanga ukuthi akunzima ngisho nakumfundi weminyaka engu-2-3.

Lapho wonke amathebula ebuyiselwe, sekuyisikhathi sokwenza ukufinyelela okukude kusizindalwazi kutholakale. Ngokuvamile, imiyalo enjalo ayizange iholele empumelelweni (inikeze imvume yokufunda kuphela yokukhetha)

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

Ngokunembayo, ngangikwazi ukuxhuma kusizindalwazi kuphela ngomyalo,

mysql -h localhost -u client -pclient

kodwa lokhu akakwazanga ukukwenza

mysql -h 192.168.0.3 -u client -pclient

Lokhu akuzange kungisebenzele futhi angikwazanga ukuxhuma ngaleli kheli njengempande.

Uhlelo lwe-mysql workbench lusize; kuzilungiselelo, shintsha i-localhost ibe ngu-% futhi iyasebenza, nakuba iklayenti lingazange lisize. Manje usungakwazi ukuxhuma kusizindalwazi kusuka kukhonsoli noma kukhodi kunoma yiliphi ikheli.

Ukwenza isizindalwazi sitholakalele ukuxhumana okukude

Udinga futhi ukwenza inethiwekhi yekhaya noma yebhizinisi bese uvala i-firewall ye-Windows, ngaphandle kwalokho ngeke ukwazi nokufaka i-ping lo mshini (ingasaphathwa eyokuxhuma kusizindalwazi).

Ingxenye yomsebenzi yenziwe, manje ngidinga ukukwazi ukuxhuma kusizindalwazi ngisekhaya.

Njengoba ungabona kusukela kumdwebo wenethiwekhi, ukuze ufike ku-Inthanethi udinga ukusuka ku-192.168.0.3 ukuya ku-192.168.1.1 (i-router), ake siye kolunye uhlangothi. Ake silungise umzila osuka ku-192.168.1.1 uye ku-192.168.1.2 kanje:

Ukwenza isizindalwazi sitholakalele ukuxhumana okukude

Ngokuvamile, isithombe asibonisi, ngakho-ke ngizosibhala ngesandla:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

Lokhu kungenziwa kuphela ku-subnet eyodwa, okungukuthi, awukwazi ukudlulisela ngokushesha ekhelini elithi 192.168.0.2 noma 192.168.0.3

Lokhu kuyadingeka ukuze i-router yazi lapho i-subnet 192.168.0.0/24 itholakala (ukufunda izisekelo zamanethiwekhi kuyasiza).

Manje sengeza ukudlulisa ngembobo 3306 (imbobo ezenzakalelayo ye-mysql (uma ungazange uyishintshe phakathi nokuyifaka)) ekhelini elithi 192.168.1.2

Ukwenza isizindalwazi sitholakalele ukuxhumana okukude

Into enzima kakhulu esele ukuyenza ukwenza ukudlulisela phambili emshinini we-Linux (unamakhadi amabili enethiwekhi 192.168.1.2 (enp3s1 interface) kanye ne-192.168.0.2 (enp3s0 interface) ukuze amakhadi enethiwekhi azi ukuthi adlulisele ini kusuka ku-192.168.1.2 ku-192.168.0.2, bese emshinini wethu we-Windows nge-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

Labo. Ulayini woku-1 usho ukuthi samukela uxhumano lokuqala, lwesi-2 nolwesi-3 esingathumela amaphakethe kuzo zombili izinkomba, owesi-4 nowesi-5 usho ukushintsha indawo okuyiwa kuyo namakheli omthombo. Futhi voila, ungaxhuma usekhaya nge-mysql. Futhi ekugcineni, ikhodi yami ye-C++ eyenza lokhu:

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

Manje usungakwazi ukuthumela lolu hlelo ngokuphephile kunoma ubani, futhi asikho isidingo sokuthi ulubhale kabusha ukuze lusebenze endaweni.

Source: www.habr.com

Engeza amazwana