๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ์ฌ์ค๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ์ธ๋ ฅ๊ณผ ๊ธฐ์ ์ด ๋ถ์กฑํ์ฌ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋๋ฌด ๋ชฐ๋ํ์ง ์๊ณ ํ๋ฐํธ์๋์ ์ง์คํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๋ด ์๋ฃจ์ ์ด ์์ ํ ๊ฒ์ด๋ผ๊ณ ๋งํ ์๋ ์์ง๋ง ์๋ํฉ๋๋ค.
ํธ์คํ ๋น์ฉ์ ์ง๋ถํ๋ ๊ฒ์ ์ข์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ง์ฅ์์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ฑฐ๊ธฐ์ ํ์ดํธ IP๊ฐ ์์ต๋๋ค. ๊ทธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๋ ์ฌ๋ฌ ๋์ ์ปดํจํฐ, ๋ ์ ํํ๊ฒ๋ Linux๊ฐ ์ค์น๋ 192.168.1.2(์ผ๋ช
192.168.0.2), Windows๊ฐ ์ค์น๋ 192.168.0.3์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๋ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก mysql์ ์ ํํ๊ณ Linux์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ดํด๋ณด์์ต๋๋ค. ๊ฑฐ๊ธฐ์ ์ด๋ฏธ ์ค์น๋์ด ์์๋๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ ์ฌ๋์ด ์๊ณ , ์๋ ์ฌ๋๋ค(๋๋ณด๋ค ๋จผ์ ์ผํ๋ ์ฌ๋๋ค)๋ ์์ด๋ฒ๋ ธ๋ค. ์๋ฌด๋ ํ์ํ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์ญ์ ํ๊ณ ๋ค์ ์ค์นํ๋ ค๊ณ ํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ณ , ์ด ์ค๋ฅ๋ฅผ ์์ ํ๋ ค๋ฉด ๋ง์ฐ์ค๋ก ๋ชจ๋ํฐ์ ํค๋ณด๋๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ํฌ๊ธฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ฒ๋ค๊ฐ Windows๊ฐ ์ค์น๋ ์ปดํจํฐ๋ ํจ์ฌ ๋ ๊ฐ๋ ฅํ๊ณ ์ง์ ์๋ ๋
ธํธ๋ถ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์น์ ์ผ๋ก ์ค์น ์์ฒด์ ๋ํด์๋ ์ค๋ช
ํ์ง ์์ผ๋ฉฐ ์ด์ ๋ํ ๋ง์ ๋งค๋ด์ผ๊ณผ ๋น๋์ค๊ฐ ์์ต๋๋ค. Windows ์์คํ
์ 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 workbench ํ๋ก๊ทธ๋จ์ด ๋์์ด ๋์์ต๋๋ค. ์ค์ ์์ localhost๋ฅผ %๋ก ๋ณ๊ฒฝํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋์์ด ๋์ง ์์์ง๋ง ์๋ํฉ๋๋ค. ์ด์ ์ฝ์์ด๋ ๋ชจ๋ ์ฃผ์์ ์ฝ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋ํ ์ง์ด๋ ํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ง๋ค๊ณ Windows ๋ฐฉํ๋ฒฝ์ ๊บผ์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ์ปดํจํฐ์ ping์ ๋ณด๋ผ ์๋ ์์ต๋๋ค(๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ฌผ๋ก ).
์์ ์ ์ ๋ฐ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ ์ง์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ์ ์์ด์ผ ํฉ๋๋ค.
๋คํธ์ํฌ ๋ค์ด์ด๊ทธ๋จ์์ ๋ณผ ์ ์๋ฏ์ด ์ธํฐ๋ท์ ์ฐ๊ฒฐํ๋ ค๋ฉด 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(๊ธฐ๋ณธ mysql ํฌํธ(์ค์น ์ค์ ๋ณ๊ฒฝํ์ง ์์ ๊ฒฝ์ฐ))์ ์ฃผ์ 192.168.1.2์ ์ถ๊ฐํฉ๋๋ค.
๋จ์ ๊ฐ์ฅ ์ด๋ ค์ด ์ผ์ Linux ์์คํ
(๋ ๊ฐ์ ๋คํธ์ํฌ ์นด๋ 192.168.1.2(enp3s1 ์ธํฐํ์ด์ค) ๋ฐ 192.168.0.2(enp3s0 ์ธํฐํ์ด์ค)์ด ์์)์์ ์ ๋ฌ์ ์ํํ์ฌ ๋คํธ์ํฌ ์นด๋๊ฐ 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
์ ๊ฒ๋ค. ์ฒซ ๋ฒ์งธ ์ค์ ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ์ ์๋ฝํ๋ค๋ ์๋ฏธ์ด๊ณ , ๋ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ ์ค์ ์๋ฐฉํฅ์ผ๋ก ํจํท์ ๋ณด๋ผ ์ ์๋ค๋ ๋ป์ด๋ฉฐ, ๋ค ๋ฒ์งธ์ ๋ค์ฏ ๋ฒ์งธ ์ค์ ๋์๊ณผ ์์ค ์ฃผ์ ๋ณ๊ฒฝ์ ์๋ฏธํฉ๋๋ค. ์ง์, ์ง์์ 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;
};
์ด์ ์ด ํ๋ก๊ทธ๋จ์ ๋๊ตฌ์๊ฒ๋ ์์ ํ๊ฒ ๋ณด๋ผ ์ ์์ผ๋ฉฐ ๋ก์ปฌ์์ ์๋ํ๋๋ก ๋ค์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
์ถ์ฒ : habr.com