தொலைநிலை இணைப்பிற்கு தரவுத்தளத்தை கிடைக்கச் செய்தல்

தரவுத்தளத்துடன் இணைக்கப்பட்ட ஒரு பயன்பாட்டை நீங்கள் செய்ய வேண்டிய சந்தர்ப்பங்கள் உள்ளன என்ற உண்மையுடன் ஆரம்பிக்கலாம். கைகள் மற்றும் திறன்கள் இல்லாததால், பின்தளத்தில் மேம்பாட்டை அதிகம் ஆராயாமல் இருக்கவும், முன்பகுதியில் கவனம் செலுத்தவும் இது செய்யப்படுகிறது. எனது தீர்வு பாதுகாப்பாக இருக்கும் என்று என்னால் கூற முடியாது, ஆனால் அது வேலை செய்கிறது.

ஹோஸ்டிங்கிற்கு பணம் செலுத்துவது பிடிக்காததால், என் வேலையில் நெட்வொர்க்கைப் பயன்படுத்தினேன், அங்கு ஒரு வெள்ளை ஐபி உள்ளது. அதன் அமைப்பு இதோ:

தொலைநிலை இணைப்பிற்கு தரவுத்தளத்தை கிடைக்கச் செய்தல்

என்னிடம் பல கணினிகளுக்கான அணுகல் உள்ளது, இன்னும் துல்லியமாக 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

இது எனக்கு வேலை செய்யவில்லை மேலும் இந்த முகவரியை ரூட்டாக இணைக்க முடியவில்லை.

mysql வொர்க்பெஞ்ச் நிரல் உதவியது; அமைப்புகளில், லோக்கல் ஹோஸ்ட்டை % ஆக மாற்றவும், ஆனால் கிளையன்ட் உதவவில்லை. இப்போது நீங்கள் கன்சோலில் இருந்து தரவுத்தளத்துடன் அல்லது எந்த முகவரியிலிருந்தும் குறியீட்டிலிருந்து இணைக்கலாம்.

தொலைநிலை இணைப்பிற்கு தரவுத்தளத்தை கிடைக்கச் செய்தல்

நீங்கள் ஒரு வீடு அல்லது வணிக நெட்வொர்க்கை உருவாக்க வேண்டும் மற்றும் விண்டோஸ் ஃபயர்வாலை அணைக்க வேண்டும், இல்லையெனில் நீங்கள் இந்த இயந்திரத்தை பிங் செய்ய முடியாது (தரவுத்தளத்துடன் இணைக்கவும்).

பாதி வேலை முடிந்தது, இப்போது நான் வீட்டிலிருந்தே தரவுத்தளத்துடன் இணைக்க முடியும்.

நெட்வொர்க் வரைபடத்திலிருந்து நீங்கள் பார்க்க முடியும் என, இணையத்தைப் பெற நீங்கள் 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 என்ற முகவரியில் போர்ட் பகிர்தல் 192.168.1.2 (இயல்புநிலை mysql போர்ட் (நிறுவலின் போது நீங்கள் அதை மாற்றவில்லை என்றால்)) சேர்க்கிறோம்.

தொலைநிலை இணைப்பிற்கு தரவுத்தளத்தை கிடைக்கச் செய்தல்

ஒரு லினக்ஸ் கணினியில் முன்னனுப்புவது மிகவும் கடினமான காரியம் (இதில் இரண்டு பிணைய அட்டைகள் 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;
};

இப்போது நீங்கள் இந்த திட்டத்தை யாருக்கும் பாதுகாப்பாக அனுப்பலாம், மேலும் உள்நாட்டில் வேலை செய்ய நீங்கள் அதை மீண்டும் எழுத வேண்டியதில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்