Sicrhau bod y gronfa ddata ar gael ar gyfer cysylltiad o bell

Gadewch i ni ddechrau gyda'r ffaith bod yna achosion pan fydd angen i chi wneud cais gyda chysylltiad â chronfa ddata. Gwneir hyn er mwyn peidio ag ymchwilio'n ormodol i ddatblygiad pen ôl a chanolbwyntio ar y blaen oherwydd diffyg dwylo a sgiliau. Ni allaf ddweud y bydd fy ateb yn ddiogel, ond mae'n gweithio.

Gan nad wyf yn hoffi talu am westeio, defnyddiais y rhwydwaith yn fy ngwaith, mae IP gwyn yno. Dyma ei strwythur:

Sicrhau bod y gronfa ddata ar gael ar gyfer cysylltiad o bell

Mae gen i fynediad i nifer o gyfrifiaduron, yn fwy manwl gywir 192.168.1.2 (aka 192.168.0.2) gyda Linux wedi'i osod yno a 192.168.0.3 gyda Windows. Yn gyffredinol, dewisais mysql ar gyfer fy nghais ac edrychais ar yr hyn oedd ar gael ar Linux. Fe'i gosodwyd yno eisoes, ond nid oes neb yn gwybod y cyfrinair, ac anghofiodd y rhai a oedd yn gwybod (y rhai a oedd yn gweithio o'm blaen). Ar ôl dysgu nad oedd ei angen ar unrhyw un, fe wnes i ei ddileu a cheisio ei osod eto. Nid oedd digon o gof, ac oherwydd er mwyn trwsio'r gwall hwn byddai'n rhaid i mi gysylltu monitor a bysellfwrdd â llygoden ag ef, penderfynais roi'r gorau iddi ar y mater hwn. Ar ben hynny, mae'r peiriant gyda Windows yn llawer mwy pwerus ac yn ogystal, mae gen i ar fy ngliniadur gartref. Mewn egwyddor, ni fyddaf yn disgrifio'r gosodiad ei hun; mae yna lawer o lawlyfrau a fideos amdano. Ar ôl gosod mysql ar beiriant Windows, penderfynais wneud copi wrth gefn o'r tablau o'm gliniadur i'm gweithfan.

Mae wedi'i wneud fel hyn (yn fy achos i):

mysqldump -uroot -p your_base > dump_file.sql

Nesaf, rydym yn creu cronfa ddata yn y gronfa ddata newydd ac yn adfer y copi wrth gefn ar y peiriant “newydd”.

mysql -h localhost -u root -p

create database your_base;
use your_base;

mysql -uroot -p your_base < dump_file.sql

show tables;


Rhaid gosod y ffeil wrth gefn ar y peiriant newydd ac, efallai, os nad yw yn y cyfeiriadur gyda'r cyfleustodau, yna'r llwybr llawn ato. (Fe wnes i uwchlwytho'r copi wrth gefn i GitHub a'i glonio ar beiriant newydd). Byddwn yn ychwanegu sut mae'r tablau eu hunain yn cael eu creu, ond wnes i ddim arbed y sgrinluniau, a dwi'n meddwl nad yw'n anodd hyd yn oed i fyfyriwr 2-3 blwyddyn.

Pan fydd yr holl dablau wedi'u hadfer, mae'n bryd sicrhau bod mynediad o bell i'r gronfa ddata ar gael. Yn gyffredinol, nid oedd gorchmynion o'r fath yn arwain at lwyddiant (dim ond caniatâd darllen a roddodd i ddewis)

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

Yn fwy manwl gywir, dim ond gyda'r gorchymyn y gallwn gysylltu â'r gronfa ddata,

mysql -h localhost -u client -pclient

ond ni allai hwn ei wneud mwyach

mysql -h 192.168.0.3 -u client -pclient

Ni weithiodd hyn i mi ac ni allwn gysylltu trwy'r cyfeiriad hwn fel gwraidd.

Helpodd rhaglen meinciau gwaith mysql; yn y gosodiadau, newidiwch localhost i % ac mae'n gweithio, er na wnaeth y cleient helpu. Nawr gallwch chi gysylltu â'r gronfa ddata o'r consol neu o god o unrhyw gyfeiriad.

Sicrhau bod y gronfa ddata ar gael ar gyfer cysylltiad o bell

Mae angen i chi hefyd wneud rhwydwaith cartref neu fusnes a diffodd wal dân Windows, fel arall ni fyddwch hyd yn oed yn gallu pingio'r peiriant hwn (heb sôn am gysylltu â'r gronfa ddata).

Mae hanner y gwaith wedi'i wneud, nawr mae angen i mi allu cysylltu â'r gronfa ddata o gartref.

Fel y gwelwch o'r diagram rhwydwaith, i gyrraedd y Rhyngrwyd mae angen i chi fynd o 192.168.0.3 i 192.168.1.1 (llwybrydd), gadewch i ni fynd i'r cyfeiriad arall. Gadewch i ni ffurfweddu'r llwybr o 192.168.1.1 i 192.168.1.2 fel hyn:

Sicrhau bod y gronfa ddata ar gael ar gyfer cysylltiad o bell

Yn gyffredinol, nid yw'r llun yn dangos, felly byddaf yn ei ysgrifennu â llaw:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

Dim ond mewn un isrwyd y gellir gwneud hyn, hynny yw, ni allwch anfon ymlaen ar unwaith i'r cyfeiriad 192.168.0.2 neu 192.168.0.3

Mae hyn yn angenrheidiol fel bod y llwybrydd yn gwybod ble mae'r isrwyd 192.168.0.0/24 wedi'i leoli (mae dysgu hanfodion rhwydweithiau yn ddefnyddiol).

Nawr rydym yn ychwanegu anfon porthladd 3306 (y porthladd mysql rhagosodedig (os na wnaethoch chi ei newid yn ystod y gosodiad)) i'r cyfeiriad 192.168.1.2

Sicrhau bod y gronfa ddata ar gael ar gyfer cysylltiad o bell

Y peth anoddaf ar ôl i'w wneud yw anfon ymlaen ar beiriant Linux (mae ganddo ddau gerdyn rhwydwaith 192.168.1.2 (rhyngwyneb enp3s1) a 192.168.0.2 (rhyngwyneb enp3s0) fel bod y cardiau rhwydwaith yn gwybod beth i'w trosglwyddo o 192.168.1.2 i 192.168.0.2, ac yna i'n peiriant Windows gyda 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

Y rhai. Mae'r llinell 1af yn golygu ein bod yn derbyn y cysylltiad cyntaf, yr 2il a'r 3ydd y gallwn anfon pecynnau i'r ddau gyfeiriad, mae'r 4ydd a'r 5ed yn golygu newid y cyrchfan a chyfeiriadau ffynhonnell. A voila, gallwch chi gysylltu gartref trwy mysql. Ac yn olaf, fy nghod C ++ sy'n gwneud hyn:

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

Nawr gallwch chi anfon y rhaglen hon yn ddiogel at unrhyw un, ac nid oes rhaid i chi ei hailysgrifennu i wneud iddo weithio'n lleol.

Ffynhonnell: hab.com

Ychwanegu sylw