Nggawe database kasedhiya kanggo sambungan remot

Ayo dadi miwiti karo kasunyatan sing ana kaping yen sampeyan kudu nggawe aplikasi karo sambungan database. Iki wis rampung supaya ora delve banget menyang pembangunan mburi mburi lan musataken ing ngarep-mburi amarga lack saka tangan lan skills. Aku ora bakal ngomong yen solusiku bakal aman, nanging bisa digunakake.

Amarga aku ora seneng mbayar hosting, aku nggunakake jaringan ing karyaku, ana IP putih. Punika strukturipun:

Nggawe database kasedhiya kanggo sambungan remot

Aku duwe akses kanggo sawetara komputer, luwih tepat kanggo 192.168.1.2 (alias 192.168.0.2) ana Linux lan 192.168.0.3 karo Windows. Umumé, kanggo aplikasiku, aku milih mysql lan ndeleng apa sing ana ing Linux. Iku wis diinstal ana, nanging ora ana sing ngerti sandi, lan sing ngerti kelalen (sing makarya sadurunge kula). Sawise ngerti yen ora ana sing butuh, aku mbusak lan nyoba nginstal maneh. Ora ana memori sing cukup, lan amarga kanggo ndandani kesalahan iki, aku kudu nyambungake monitor lan keyboard nganggo mouse, aku mutusake kanggo mandheg bisnis iki. Kajaba iku, mesin Windows luwih kuat, lan kabeh, aku duwe laptop ing omah. Ing asas, aku ora bakal njlèntrèhaké instalasi dhewe, ana akeh manual lan video babagan. Sawise nginstal mysql ing mesin Windows, aku mutusake kanggo nggawe serep tabel saka laptop menyang workstation.

Wis rampung kaya iki (ing kasusku):

mysqldump -uroot -p your_base > dump_file.sql

Sabanjure, kita nggawe database ing database anyar lan mulihake serep ing mesin "anyar".

mysql -h localhost -u root -p

create database your_base;
use your_base;

mysql -uroot -p your_base < dump_file.sql

show tables;


File kanthi serep kudu dilebokake ing mesin anyar, lan yen ora ana ing direktori kanthi sarana, banjur dalan lengkap bisa. (Aku mung upload serep kanggo github lan kloning menyang mesin anyar). Aku bakal nambah carane tabel dhewe digawe, nanging aku ora nyimpen gambar, lan aku iku ora angel malah kanggo 2-3 mahasiswa taun.

Nalika aku dibalèkaké kabeh tabel, iku wektu kanggo nggawe akses remot kanggo database kasedhiya. Umumé, prentah kasebut ora nyebabake sukses (mung diwenehi hak kanggo maca pilih)

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

Luwih tepate, aku mung bisa nyambung menyang database nganggo perintah,

mysql -h localhost -u client -pclient

lan iki ora bisa

mysql -h 192.168.0.3 -u client -pclient

Ora cocog karo aku, aku uga ora bisa nyambung liwat alamat iki minangka root.

Program mysql workbench mbantu, ana ing setelan sampeyan ngganti localhost dadi% lan bisa digunakake, sanajan klien ora mbantu. Saiki sampeyan bisa nyambung menyang database saka console utawa saka kode saka alamat sembarang.

Nggawe database kasedhiya kanggo sambungan remot

Sampeyan uga kudu nggawe jaringan omah utawa perusahaan lan mateni firewall Windows, yen ora, sampeyan ora bakal bisa ping mesin iki (ora bakal nyambung menyang database).

Setengah saka karya wis rampung, banjur aku kudu bisa nyambung menyang database saka ngarep.

Nalika sampeyan bisa ndeleng saka diagram jaringan, sampeyan kudu pindhah menyang Internet saka 192.168.0.3 kanggo 192.168.1.1 (router), ayo pindhah menyang arah ngelawan. Ayo nyiyapake rute saka 192.168.1.1 nganti 192.168.1.2 kaya iki:

Nggawe database kasedhiya kanggo sambungan remot

Umumé, gambar ora ditampilake - aku bakal nulis nganggo tangan:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

Iki mung bisa ditindakake ing siji subnet, yaiku, sampeyan ora bisa langsung nerusake menyang alamat 192.168.0.2 utawa 192.168.0.3.

Iki perlu supaya router ngerti ngendi subnet 192.168.0.0/24 (sinau dhasar jaringan migunani).

Saiki kita nambahake port forwarding 3306 (port mysql minangka standar (yen sampeyan ora ngganti nalika instalasi)) menyang alamat 192.168.1.2.

Nggawe database kasedhiya kanggo sambungan remot

Saiki sing paling angel ditindakake yaiku nerusake ing mesin Linux (wis duwe rong kertu jaringan 192.168.1.2 (antarmuka enp3s1) lan 192.168.0.2 (antarmuka enp3s0) supaya kertu jaringan ngerti apa sing bakal ditransfer saka 192.168.1.2. menyang 192.168.0.2, banjur menyang mesin Windows kita nganggo 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

Sing. Baris 1 tegese kita nampa sambungan pisanan, 2 lan 3 sing bisa ngirim paket ing loro arah, 4 lan 5 tegese panggantos alamat tujuan lan sumber. Lan voila, sampeyan bisa nyambung saka omah liwat mysql. Lan pungkasane, kode C ++ sing nindakake iki:

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

Saiki sampeyan bisa kanthi aman mbuwang program iki kanggo sapa wae, lan sampeyan ora perlu nulis maneh supaya bisa digunakake sacara lokal.

Source: www.habr.com

Add a comment