የውሂብ ጎታውን ለርቀት ግንኙነት እንዲገኝ ማድረግ

ከመረጃ ቋት ጋር ግንኙነት ያለው መተግበሪያ ማድረግ የሚያስፈልግዎ አጋጣሚዎች እንዳሉ እንጀምር። ይህ የሚደረገው በእጆች እና በክህሎት እጦት ምክንያት ወደ ኋላ ቀር ልማት ውስጥ ላለመዝለቅ እና በግንባር ቀደምትነት ላይ ለማተኮር ነው። መፍትሄዬ ደህና ይሆናል ማለት አልችልም ግን ይሰራል።

ለማስተናገጃ ክፍያ መክፈል ስለማልወድ በስራዬ ላይ ኔትወርክን ተጠቀምኩኝ፣ እዚያ ነጭ አይፒ አለ። አወቃቀሩ እነሆ፡-

የውሂብ ጎታውን ለርቀት ግንኙነት እንዲገኝ ማድረግ

ብዙ ኮምፒውተሮችን ማግኘት አለብኝ፣ የበለጠ በትክክል 192.168.1.2 (በ 192.168.0.2) ሊኑክስ እዚያ ከተጫነ እና 192.168.0.3 በዊንዶውስ። በአጠቃላይ፣ mysqlን ለመተግበሪያዬ መርጫለሁ እና በሊኑክስ ላይ ያለውን ተመለከትኩ። ቀድሞውኑ እዚያ ተጭኗል, ግን የይለፍ ቃሉን ማንም አያውቅም, እና የሚያውቁት ረስተዋል (ከእኔ በፊት የሠሩት). ማንም እንደማያስፈልገው ካወቅኩ በኋላ ሰረዝኩት እና እንደገና ለመጫን ሞከርኩ። በቂ ማህደረ ትውስታ አልነበረም ፣ እናም ይህንን ስህተት ለማስተካከል ሞኒተሩን እና የቁልፍ ሰሌዳውን ከመዳፊት ጋር ማገናኘት ስላለብኝ በዚህ ጉዳይ ላይ ለመተው ወሰንኩ ። ከዚህም በላይ በዊንዶውስ ያለው ማሽን በጣም ኃይለኛ እና በተጨማሪ, በቤት ውስጥ ላፕቶፕ ላይ አለኝ. በመርህ ደረጃ, መጫኑን እራሱ አልገልጽም, ስለ እሱ ብዙ መመሪያዎች እና ቪዲዮዎች አሉ. በዊንዶውስ ማሽን ላይ mysql ን ከጫንኩ በኋላ ሰንጠረዦቹን ከላፕቶፕ ወደ ሥራ ጣቢያዬ ምትኬ ለማስቀመጥ ወሰንኩ።

እንዲህ ነው የተደረገው (በእኔ ሁኔታ)፡-

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;


የመጠባበቂያ ፋይሉ በአዲሱ ማሽን ላይ መቀመጥ አለበት እና ምናልባትም, ከመገልገያው ጋር በማውጫው ውስጥ ካልሆነ, ወደ እሱ የሚወስደው ሙሉ መንገድ. (መጠባበቂያ ቅጂውን ወደ GitHub ሰቅዬ ወደ አዲስ ማሽን ዘጋሁት)። ጠረጴዛዎቹ እራሳቸው እንዴት እንደሚፈጠሩ እጨምራለሁ, ነገር ግን ቅጽበታዊ ገጽ እይታዎችን አላስቀመጥኩም, እና ለ 2-3 አመት ተማሪ እንኳን አስቸጋሪ አይደለም ብዬ አስባለሁ.

ሁሉም ሠንጠረዦች ወደነበሩበት ሲመለሱ፣ የውሂብ ጎታውን የርቀት መዳረሻ ለማድረግ ጊዜው አሁን ነው። በአጠቃላይ እንደዚህ ያሉ ትዕዛዞች ወደ ስኬት አላመሩም (ለመምረጥ የማንበብ ፍቃድ ብቻ ሰጥቷል)

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

የበለጠ በትክክል ፣ ከመረጃ ቋቱ ጋር መገናኘት የምችለው በትእዛዙ ብቻ ነው ፣

mysql -h localhost -u client -pclient

ነገር ግን ይህ ከአሁን በኋላ ማድረግ አልቻለም

mysql -h 192.168.0.3 -u client -pclient

ይህ ለእኔ አልሰራም እና በዚህ አድራሻ እንደ root መገናኘት አልቻልኩም።

የ mysql workbench ፕሮግራም ረድቷል፣ በቅንብሮች ውስጥ፣ localhost ወደ % ቀይር እና ይሰራል፣ ምንም እንኳን ደንበኛው ባይረዳም። አሁን ከኮንሶል ወይም ከማንኛውም አድራሻ ወደ ዳታቤዝ ማገናኘት ይችላሉ።

የውሂብ ጎታውን ለርቀት ግንኙነት እንዲገኝ ማድረግ

እንዲሁም የቤት ወይም የንግድ አውታረመረብ መስራት እና የዊንዶውስ ፋየርዎልን ማጥፋት አለብዎት, አለበለዚያ ይህን ማሽን እንኳን ፒንግ ማድረግ አይችሉም (ከመረጃ ቋቱ ጋር መገናኘት ይቅርና).

ግማሹ ስራው ተጠናቅቋል፣ አሁን ከቤት ወደ ዳታቤዝ መገናኘት መቻል አለብኝ።

ከአውታረ መረቡ ዲያግራም እንደሚታየው ወደ በይነመረብ ለመድረስ ከ 192.168.0.3 ወደ 192.168.1.1 (ራውተር) መሄድ ያስፈልግዎታል ፣ ወደ ተቃራኒው አቅጣጫ እንሂድ ። ከ192.168.1.1 እስከ 192.168.1.2 ያለውን መንገድ በዚህ መልኩ እናዋቅር፡

የውሂብ ጎታውን ለርቀት ግንኙነት እንዲገኝ ማድረግ

በአጠቃላይ ፣ ምስሉ አይታይም ፣ ስለዚህ በእጄ እጽፋለሁ-

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

ይህ በአንድ ንኡስ መረብ ውስጥ ብቻ ነው, ማለትም, ወዲያውኑ ወደ አድራሻው 192.168.0.2 ወይም 192.168.0.3 ማስተላለፍ አይችሉም.

ይህ አስፈላጊ ነው ራውተር ንዑስኔት 192.168.0.0/24 የት እንደሚገኝ እንዲያውቅ (የአውታረ መረቦችን መሰረታዊ ነገሮች መማር ጠቃሚ ነው)።

አሁን ወደብ ማስተላለፊያ 3306 (ነባሪው mysql ወደብ (በጭነት ጊዜ ካልቀየሩት)) ወደ አድራሻ 192.168.1.2 እንጨምራለን

የውሂብ ጎታውን ለርቀት ግንኙነት እንዲገኝ ማድረግ

በጣም አስቸጋሪው ነገር በሊኑክስ ማሽን ላይ ማስተላለፍን ማድረግ ነው (ሁለት የኔትወርክ ካርዶች 192.168.1.2 (enp3s1 በይነገጽ) እና 192.168.0.2 (enp3s0 በይነገጽ) የኔትወርክ ካርዶች ከ 192.168.1.2 ምን እንደሚያስተላልፍላቸው እንዲያውቁ ነው ። ወደ 192.168.0.2, እና ከዚያ በ 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

እነዚያ። 1 ኛ መስመር ማለት የመጀመሪያውን ግንኙነት እንቀበላለን, 2 ኛ እና 3 ኛ ፓኬጆችን በሁለቱም አቅጣጫዎች መላክ እንችላለን, 4 ኛ እና 5 ኛ ማለት የመድረሻ እና የምንጭ አድራሻዎችን መለወጥ ማለት ነው. እና voila፣ በ 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;
};

አሁን ይህንን ፕሮግራም ለማንም ደህንነቱ በተጠበቀ ሁኔታ መላክ ይችላሉ፣ እና በአገር ውስጥ እንዲሰራ እንደገና መፃፍ አያስፈልግዎትም።

ምንጭ: hab.com

አስተያየት ያክሉ