ದೂರಸ್ಥ ಸಂಪರ್ಕಕ್ಕಾಗಿ ಡೇಟಾಬೇಸ್ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುವುದು

ಡೇಟಾಬೇಸ್‌ಗೆ ಸಂಪರ್ಕದೊಂದಿಗೆ ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮಾಡಬೇಕಾದ ಸಂದರ್ಭಗಳಿವೆ ಎಂಬ ಅಂಶದಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. ಕೈ ಮತ್ತು ಕೌಶಲ್ಯಗಳ ಕೊರತೆಯಿಂದಾಗಿ ಬ್ಯಾಕೆಂಡ್ ಅಭಿವೃದ್ಧಿಯ ಬಗ್ಗೆ ಹೆಚ್ಚು ಅಧ್ಯಯನ ಮಾಡದಿರಲು ಮತ್ತು ಮುಂಭಾಗದ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಲು ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. ನನ್ನ ಪರಿಹಾರವು ಸುರಕ್ಷಿತವಾಗಿರುತ್ತದೆ ಎಂದು ನಾನು ಹೇಳಲಾರೆ, ಆದರೆ ಅದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ನಾನು ಹೋಸ್ಟಿಂಗ್‌ಗೆ ಪಾವತಿಸಲು ಇಷ್ಟಪಡದ ಕಾರಣ, ನನ್ನ ಕೆಲಸದಲ್ಲಿ ನಾನು ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಬಳಸಿದ್ದೇನೆ, ಅಲ್ಲಿ ಬಿಳಿ ಐಪಿ ಇದೆ. ಅದರ ರಚನೆ ಇಲ್ಲಿದೆ:

ದೂರಸ್ಥ ಸಂಪರ್ಕಕ್ಕಾಗಿ ಡೇಟಾಬೇಸ್ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುವುದು

ನಾನು ಹಲವಾರು ಕಂಪ್ಯೂಟರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿದ್ದೇನೆ, ಹೆಚ್ಚು ನಿಖರವಾಗಿ 192.168.1.2 (ಅಕಾ 192.168.0.2) ಲಿನಕ್ಸ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ ಮತ್ತು 192.168.0.3 ವಿಂಡೋಸ್‌ನೊಂದಿಗೆ. ಸಾಮಾನ್ಯವಾಗಿ, ನನ್ನ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ ನಾನು mysql ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇನೆ ಮತ್ತು Linux ನಲ್ಲಿ ಏನು ಲಭ್ಯವಿದೆ ಎಂಬುದನ್ನು ನೋಡಿದೆ. ಅದನ್ನು ಈಗಾಗಲೇ ಅಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ, ಆದರೆ ಪಾಸ್ವರ್ಡ್ ಯಾರಿಗೂ ತಿಳಿದಿಲ್ಲ, ಮತ್ತು ತಿಳಿದವರು ಮರೆತುಬಿಟ್ಟರು (ನನಗಿಂತ ಮೊದಲು ಕೆಲಸ ಮಾಡಿದವರು). ಯಾರಿಗೂ ಅಗತ್ಯವಿಲ್ಲ ಎಂದು ತಿಳಿದ ನಂತರ, ನಾನು ಅದನ್ನು ಅಳಿಸಿ ಮತ್ತೆ ಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸಿದೆ. ಸಾಕಷ್ಟು ಮೆಮೊರಿ ಇರಲಿಲ್ಲ, ಮತ್ತು ಈ ದೋಷವನ್ನು ಸರಿಪಡಿಸಲು ನಾನು ಮಾನಿಟರ್ ಮತ್ತು ಕೀಬೋರ್ಡ್ ಅನ್ನು ಮೌಸ್ನೊಂದಿಗೆ ಸಂಪರ್ಕಿಸಬೇಕಾಗಿರುವುದರಿಂದ, ನಾನು ಈ ವಿಷಯವನ್ನು ಬಿಟ್ಟುಕೊಡಲು ನಿರ್ಧರಿಸಿದೆ. ಇದಲ್ಲದೆ, ವಿಂಡೋಸ್ನೊಂದಿಗಿನ ಯಂತ್ರವು ಹೆಚ್ಚು ಶಕ್ತಿಯುತವಾಗಿದೆ ಮತ್ತು ಜೊತೆಗೆ, ನಾನು ಅದನ್ನು ಮನೆಯಲ್ಲಿ ನನ್ನ ಲ್ಯಾಪ್ಟಾಪ್ನಲ್ಲಿ ಹೊಂದಿದ್ದೇನೆ. ತಾತ್ವಿಕವಾಗಿ, ನಾನು ಅನುಸ್ಥಾಪನೆಯನ್ನು ವಿವರಿಸುವುದಿಲ್ಲ; ಅದರ ಬಗ್ಗೆ ಸಾಕಷ್ಟು ಕೈಪಿಡಿಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳಿವೆ. ವಿಂಡೋಸ್ ಗಣಕದಲ್ಲಿ 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 ಪೋರ್ಟ್ (ನೀವು ಅನುಸ್ಥಾಪನೆಯ ಸಮಯದಲ್ಲಿ ಅದನ್ನು ಬದಲಾಯಿಸದಿದ್ದರೆ)) ಸೇರಿಸುತ್ತೇವೆ.

ದೂರಸ್ಥ ಸಂಪರ್ಕಕ್ಕಾಗಿ ಡೇಟಾಬೇಸ್ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುವುದು

Linux ಗಣಕದಲ್ಲಿ ಫಾರ್ವರ್ಡ್ ಮಾಡುವುದು (ಇದು ಎರಡು ನೆಟ್‌ವರ್ಕ್ ಕಾರ್ಡ್‌ಗಳನ್ನು 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ