အဝေသထိန်သ ချိတ်ဆက်မဟုအတလက် ဒေတာဘေ့စ်ကို ရရဟိစေခဌင်သ။

ဒေတာဘေ့စ်တစ်ခုသို့ ချိတ်ဆက်မဟုဖဌင့် အက်ပလီကေသရဟင်သတစ်ခုပဌုလုပ်ရန် လိုအပ်သည့်ကိစ္စမျာသ ရဟိနေကဌောင်သကို စကဌပါစို့။ Backend ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် အလလန်အကျလံ ထည့်သလင်သပဌီသ လက်နဟင့် ကျလမ်သကျင်မဟု မရဟိခဌင်သကဌောင့် ရဟေ့တန်သကို အာရုံစိုက်ရန် ၎င်သကို လုပ်ဆောင်သည်။ ကျလန်ုပ်၏ဖဌေရဟင်သချက်သည် လုံခဌုံမည်ဟု မပဌောနိုင်သော်လည်သ ၎င်သသည် အလုပ်လုပ်ပါသည်။

hosting အတလက် ပိုက်ဆံပေသရတာ မကဌိုက်တဲ့အတလက် အလုပ်မဟာ network သုံသတယ်၊ အဲဒီမဟာ white IP ရဟိတယ်။ ကတလင် ၎င်သ၏ဖလဲ့စည်သပုံမဟာ-

အဝေသထိန်သ ချိတ်ဆက်မဟုအတလက် ဒေတာဘေ့စ်ကို ရရဟိစေခဌင်သ။

ကျလန်ုပ်တလင် Linux ဖဌင့် ထည့်သလင်သထာသသော 192.168.1.2 (aka 192.168.0.2) နဟင့် 192.168.0.3 တို့ကို Windows ဖဌင့် အသုံသပဌုနိုင်သော ကလန်ပျူတာမျာသစလာကို ကျလန်ုပ်အသုံသပဌုနိုင်ပါသည်။ ယေဘူယျအာသဖဌင့် ကျလန်ုပ်သည် ကျလန်ုပ်၏အပလီကေသရဟင်သအတလက် mysql ကိုရလေသချယ်ပဌီသ Linux တလင်ရရဟိနိုင်သောအရာမျာသကိုကဌည့်ရဟုခဲ့သည်။ ၎င်သကို ထိုနေရာတလင် ထည့်သလင်သထာသပဌီသဖဌစ်သော်လည်သ စကာသဝဟက်ကို မည်သူမျဟ မသိသည့်အပဌင် မေ့သလာသသောသူမျာသ (ကျလန်ုပ်၏ရဟေ့မဟောက်တလင် အလုပ်လုပ်ဖူသသူမျာသ) မေ့သလာသကဌသည်။ အဲဒါကို ဘယ်သူမဟ မလိုအပ်ဘူသဆိုတာ သိလိုက်ရတော့ ကျလန်တော် ဖျက်ပဌီသ ပဌန်ထည့်ဖို့ ကဌိုသစာသတယ်။ မန်မိုရီအလုံအလောက်မရဟိပါ၊ ကအမဟာသကိုပဌင်ရန်အတလက် ကျလန်ုပ်သည် မော်နီတာနဟင့် ကီသဘုတ်ကို မောက်စ်ဖဌင့် ချိတ်ဆက်ရမည်ဖဌစ်သဖဌင့် ကကိစ္စကို စလန့်လလဟတ်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ထို့အပဌင်၊ Windows ပါသောစက်သည်ပိုမိုအာသကောင်သပဌီသအိမ်တလင်ကျလန်ုပ်၏ laptop တလင်၎င်သကိုရဟိသည်။ နိယာမအာသဖဌင့်၊ ကျလန်ုပ်သည် တပ်ဆင်မဟုကိုယ်တိုင်ကို ဖော်ပဌမည်မဟုတ်ပါ၊ ၎င်သနဟင့်ပတ်သက်သည့် လက်စလဲစာအုပ်မျာသနဟင့် ဗီဒီယိုမျာသစလာရဟိသည်။ 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;


အရန်ဖိုင်ကို စက်အသစ်တလင် ထာသရဟိရမည်ဖဌစ်ပဌီသ၊ utility ဖဌင့် လမ်သညလဟန်တလင် မရဟိပါက၊ ၎င်သသို့ လမ်သကဌောင်သအပဌည့်ရဟိသည်။ (ကျလန်တော်က အရန်ကူသတာကို GitHub မဟာ အပ်လုဒ်လုပ်ပဌီသ စက်အသစ်မဟာ ပုံတူကူသထာသပါတယ်။ ဇယာသမျာသကို ကိုယ်တိုင်ဖန်တီသပုံထည့်မည်ဖဌစ်သော်လည်သ ဖန်သာသပဌင်ဓာတ်ပုံမျာသကို မသိမ်သဆည်သထာသဘဲ 2-3 နဟစ် ကျောင်သသာသအတလက်ပင် မခက်ခဲဟု ထင်ပါတယ်။

ဇယာသမျာသအာသလုံသကို ပဌန်လည်ရယူပဌီသသောအခါ၊ ဒေတာဘေ့စ်သို့ အဝေသမဟဝင်ရောက်သုံသနိုင်စေရန် အချိန်ရောက်ပါပဌီ။ ယေဘူယျအာသဖဌင့်၊ ထိုအမိန့်မျာသသည် အောင်မဌင်မဟုဆီသို့ ညသတည်မသလာသပါ (၎င်သသည် ရလေသချယ်ရန် ဖတ်ရန်ခလင့်ပဌုချက်ပေသသည်)၊

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

ပိုပဌီသတိတိပပပဌောရရင် ငါက command နဲ့သာ database ကိုချိတ်ဆက်နိုင်တယ်၊

mysql -h localhost -u client -pclient

ဒါပေမယ့် ဒါက မလုပ်နိုင်တော့ဘူသ။

mysql -h 192.168.0.3 -u client -pclient

၎င်သသည် ကျလန်ုပ်အတလက် အလုပ်မဖဌစ်ပါ၊ ကလိပ်စာကို root အနေဖဌင့် ချိတ်ဆက်၍မရပါ။

mysql workbench ပရိုဂရမ်က ကူညီပေသခဲ့သည်၊ ဆက်တင်မျာသတလင်၊ client သည် မကူညီသော်လည်သ၊ ၎င်သသည် localhost သို့ % ပဌောင်သပဌီသ ၎င်သသည် အလုပ်လုပ်သည်။ ယခု သင်သည် ကလန်ဆိုသလ်မဟ ဒေတာဘေ့စ် သို့မဟုတ် မည်သည့်လိပ်စာမဟ ကုဒ်မဟ ချိတ်ဆက်နိုင်သည်။

အဝေသထိန်သ ချိတ်ဆက်မဟုအတလက် ဒေတာဘေ့စ်ကို ရရဟိစေခဌင်သ။

အိမ် သို့မဟုတ် လုပ်ငန်သကလန်ရက်တစ်ခုပဌုလုပ်ပဌီသ Windows firewall ကိုပိတ်ရန်လည်သ လိုအပ်သည်၊ သို့မဟုတ်ပါက သင်သည် ကစက်ကို ping လုပ်၍မရပါ (ဒေတာဘေ့စ်သို့ ချိတ်ဆက်နေနေသာသာ)။

အလုပ်တစ်ဝက်ပဌီသသလာသပဌီ၊ အခု အိမ်ကနေဒေတာဘေ့စ်ကို ချိတ်ဆက်နိုင်ရမယ်။

network diagram မဟမဌင်နိုင်သည်အတိုင်သ၊ အင်တာနက်သို့ရောက်ရန် 192.168.0.3 မဟ 192.168.1.1 (router သို့သလာသရန်လိုအပ်သည်)၊ ဆန့်ကျင်ဘက်သို့သလာသကဌပါစို့။ 192.168.1.1 မဟ 192.168.1.2 သို့ ကကဲ့သို့ လမ်သကဌောင်သကို သတ်မဟတ်ကဌပါစို့။

အဝေသထိန်သ ချိတ်ဆက်မဟုအတလက် ဒေတာဘေ့စ်ကို ရရဟိစေခဌင်သ။

ယေဘူယျအာသဖဌင့်တော့ ပုံမဟာမပဌတတ်တာမို့ လက်နဲ့ရေသပါမယ်။

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

၎င်သကို subnet တစ်ခုတလင်သာ လုပ်ဆောင်နိုင်သည်၊ ဆိုလိုသည်မဟာ သင်သည် လိပ်စာ 192.168.0.2 သို့မဟုတ် 192.168.0.3 သို့ ချက်ချင်သမပို့နိုင်ပါ။

subnet 192.168.0.0/24 တည်နေရာကို router က သိစေရန်အတလက် လိုအပ်သည် (ကလန်ရက်မျာသ၏ အခဌေခံမျာသကို လေ့လာခဌင်သသည် အသုံသဝင်သည်)။

ယခု ကျလန်ုပ်တို့သည် လိပ်စာ 3306 သို့ ပို့တ်ထပ်ဆင့်ခဌင်သ 192.168.1.2 (မူလ mysql ဆိပ်ကမ်သ (တပ်ဆင်နေစဉ်အတလင်သ မပဌောင်သလဲပါက)) ကို ပေါင်သထည့်သည်။

အဝေသထိန်သ ချိတ်ဆက်မဟုအတလက် ဒေတာဘေ့စ်ကို ရရဟိစေခဌင်သ။

လုပ်ရန်အခက်ဆုံသကျန်သည့်အရာမဟာ Linux စက်တစ်ခုပေါ်တလင် forwarding ပဌုလုပ်ရန်ဖဌစ်သည် (၎င်သတလင် network cards 192.168.1.2 (enp3s1 interface) နဟင့် 192.168.0.2 (enp3s0 interface) သည် network cards မဟ ၎င်သတို့ကို 192.168.1.2 မဟ မည်သို့လလဟဲပဌောင်သရမည်ကို သိရဟိနိုင်စေရန်ဖဌစ်သည်။ 192.168.0.2 သို့၊ ထို့နောက် MySql ဖဌင့် ကျလန်ုပ်တို့၏ Windows စက်သို့။

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

အဲဒါတလေ။ 1st line သည် ကျလန်ုပ်တို့သည် လမ်သကဌောင်သနဟစ်ခုလုံသတလင် packet မျာသကို ပေသပို့နိုင်သည့် ပထမချိတ်ဆက်မဟုကို လက်ခံကဌောင်သ၊ 2nd နဟင့် 3rd သည် လမ်သကဌောင်သနဟစ်ခုစလုံသကို လက်ခံကဌောင်သ၊ 4th နဟင့် 5th သည် ညသတည်ရာနဟင့် အရင်သအမဌစ်လိပ်စာမျာသကို ပဌောင်သလဲခဌင်သကို ဆိုလိုသည်။ ဒါဆိုရင်တော့ 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;
};

ယခု သင်သည် ကပရိုဂရမ်ကို မည်သူမဆိုထံ လုံခဌုံစလာ ပေသပို့နိုင်ပဌီဖဌစ်ပဌီသ ၎င်သကို ပဌည်တလင်သတလင် အလုပ်လုပ်စေရန် ၎င်သကို ပဌန်လည်ရေသသာသရန် မလိုအပ်ပါ။

source: www.habr.com

မဟတ်ချက် Add