Барои пайвасти дурдаст дастрас кардани пойгоҳи додаҳо

Биёед аз он оғоз кунем, ки ҳолатҳое ҳастанд, ки шумо бояд аризаро бо пайвастшавӣ ба пойгоҳи додаҳо эҷод кунед. Ин барои он анҷом дода мешавад, ки аз ҳад зиёд ба рушди пуштибонӣ машғул нашавед ва аз сабаби набудани дастҳо ва малакаҳо ба фронт тамаркуз кунед. Ман гуфта наметавонам, ки ҳалли ман бехатар хоҳад буд, аммо он кор мекунад.

Азбаски ман пул додани хостингро дӯст намедорам, ман шабакаро дар кори худ истифода кардам, дар он ҷо як IP сафед мавҷуд аст. Ин аст сохтори он:

Барои пайвасти дурдаст дастрас кардани пойгоҳи додаҳо

Ман ба якчанд компютерҳо дастрасӣ дорам, дақиқтараш 192.168.1.2 (ака 192.168.0.2) бо Linux дар он ҷо ва 192.168.0.3 бо Windows. Умуман, ман барои замимаи худ mysql-ро интихоб кардам ва ба он чизе ки дар Linux дастрас аст, дидам. Он ҷо аллакай насб карда шуда буд, аммо ҳеҷ кас паролро намедонад ва онҳое, ки медонистанд, фаромӯш карданд (онҳое, ки пеш аз ман кор мекарданд). Пас аз фаҳмидам, ки ба касе лозим нест, ман онро нест кардам ва кӯшиш кардам, ки онро дубора насб кунам. Хотираи кофӣ набуд ва азбаски барои ислоҳи ин хато ман бояд монитор ва клавиатураро бо муш ба он пайваст кунам, ман тасмим гирифтам, ки аз ин масъала даст кашам. Гузашта аз ин, мошин бо Windows хеле пурқувваттар ва илова аст, ман онро дар ноутбуки худ дар хона дорам. Аслан, ман худи насбро тавсиф намекунам, дар бораи он дастурҳо ва видеоҳои зиёде мавҷуданд. Пас аз насб кардани mysql дар мошини Windows, ман тасмим гирифтам, ки ҷадвалҳоро аз ноутбуки худ ба истгоҳи кории худ нусхабардорӣ кунам.

Ин чунин аст (дар ҳолати ман):

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 workbench кӯмак кард; дар танзимот localhost-ро ба % иваз кунед ва он кор мекунад, гарчанде ки муштарӣ кӯмак накард. Акнун шумо метавонед ба пойгоҳи додаҳо аз консол ё аз код аз дилхоҳ суроға пайваст шавед.

Барои пайвасти дурдаст дастрас кардани пойгоҳи додаҳо

Шумо инчунин бояд як шабакаи хона ё тиҷорат созед ва девори Windows-ро хомӯш кунед, вагарна шумо ҳатто ин мошинро пинг карда наметавонед (бигзор ба пойгоҳи додаҳо пайваст шавед).

Нисфи кор ба охир расид, акнун ман бояд аз хона ба базаи маълумот пайваст шавам.

Тавре ки шумо аз диаграммаи шабака мебинед, барои ворид шудан ба Интернет шумо бояд аз 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 (агар шумо онро ҳангоми насб иваз накарда бошед)) илова мекунем.

Барои пайвасти дурдаст дастрас кардани пойгоҳи додаҳо

Мушкилтарин коре, ки бояд иҷро шавад, ин интиқол додан дар мошини Linux мебошад (он дорои ду корти шабакавии 192.168.1.2 (интерфейси enp3s1) ва 192.168.0.2 (interfeysi enp3s0) аст, то кортҳои шабакавӣ бидонанд, ки онҳоро аз 192.168.1.2 чӣ интиқол додан лозим аст. ба 192.168.0.2, ва он гоҳ ба мошини Windows мо бо 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;
};

Акнун шумо метавонед ин барномаро ба касе бехатар фиристед ва ба шумо лозим нест, ки онро дубора нависед, то он дар маҳал кор кунад.

Манбаъ: will.com

Илова Эзоҳ