개인 자료 정리 홈페이지 입니다.

Note > cpp

Note > cppextern, namespace, scope

By a3040, Published on Invalid Date

기초용어 : 선언, 정의, 참조


선언: 함수의 서명(signature)을 작성

void print(); //<-- 선언

정의: 구현

void print(){ //<-- 정의

std::cout <<"hello" << std::endl;

}

참조: 


extern은 **외부 선언(external linkage)**을 의미하며, 변수가 다른 파일에서 정의되었음을 알려주는 역할 


변수에서의 extern: 참조 

extern int globalVar; 변수는 다른 파일에서 정의되어 있으며, 이 파일에서는 그 변수를 참조한다는 뜻 


함수에서의 extern: 선언 

extern void myFunction(); 


함수는 extern을 생략하고도 선언할 수 있습니다.



namespace는 namespace 영역에서 extern scope를 갖음.


//ns.h
#ifndef __ns_h__
#define __ns_h__


namespace ns{
    namespace siam{
        extern int g_int;
    }
}
#endif

//ns.cc
namespace ns{
    namespace siam{
        int g_int = 10;
    }
}

//def.cc
#include <iostream>

int in_def_cpp_int = 100;

void print(){
    std::cout << in_def_cpp_int <<std::endl;
}

//main.cc
#include "ns.h"
#include <iostream>

extern int in_def_cpp_int; //외부 어딘가에 정의되어다는 참조
extern void print(); //외부 어딘가에 정의한것이 있다는 선언

extern int not_exitsts_int;

int main(){
    std::cout << ns::siam::g_int << std::endl;
    //std::cout << g_int << std::endl;  //에러
    
    std::cout << in_def_cpp_int << std::endl;


    in_def_cpp_int = 1000;
    print();
    std::cout << in_def_cpp_int << std::endl;
    std::cout << not_exitsts_int << std::endl;
    
    // std::cout << ns::siam::g_int << std::endl;
    return 0;
}

//cmake
//add_executable(nsmain ./ns/ns.h ./ns/ns.cc ./ns/def.cc ./ns/main.cc )


Note > cppmariadb replication 명령어, 설정 모음

By a3040, Published on Invalid Date

CHANGE MASTER TO 

MASTER_HOST='192.168.0.156',

MASTER_USER='replica_user',

MASTER_PASSWORD='pwd___cus',

MASTER_LOG_FILE='i1pms-bin.000001',

MASTER_LOG_POS=328;


START SLAVE; //슬레이브 시작


STOP SLAVE; // 복제 중지

RESET SLAVE; // 기존 복제 정보 초기화


SHOW SLAVE STATUS;



5대가 있었을때 3/2로 네트워크 분할 master가 두개 됐다가 병합할때 시나리오, 

병합 전략은 server-id가 가장 낮은 server를 마스터로 동작할때

데이터 충돌 해결 전략은 전적으로 server-id가 낮을 데이터가 우선이고 나머지는 다 삭제 할때

, replaction&backup까지 다해서



mariadb 에서 장애복구 구성중인데.. 서버번호(master/slave) 방식으로 쓸ㄲ

1(M), 2(S), 3(S),4(S)

네트워크 장애

1(m), 2(S)//단절//3(M), 4(s)

1 서버 장애

1(X), 2(M)//단절//3(M),4(s)

1 서버 복구

1(M), 2(S)//단절//3(M),4(s)

네트워크 복구

1(M),2(S),3(S),4(S) 


M설정 정책은 server-id가 낮을놈

복구 정책은 데이터는 무조건 M을따름 일때 작업 방식좀




슬레이브에서 마스터로 승격 (CHANGE MASTER TO)

STOP SLAVE; -- 기존 복제 중지

RESET SLAVE ALL; -- 이전의 복제 정보 초기화


SET GLOBAL server_id = 3; -- 새로운 마스터에 적합한 server-id 설정

SET GLOBAL log_bin = 'mysql-bin'; -- 바이너리 로그 활성화



slave 변경

CHANGE MASTER TO MASTER_HOST='new_master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12345;

START SLAVE;



replaction slave 관련 설정 sql 명령어

STOP SLAVE;

RESET SLAVE; 


CHANGE MASTER TO 

MASTER_HOST='192.168.0.156',

MASTER_USER='replica_user',

MASTER_PASSWORD='passwd_cus',

MASTER_LOG_FILE='repdab-bin.000001',

MASTER_LOG_POS=4; -- MASTER_LOG_POS는 4번부터 시작하는 것이 일반적입니다. 바이너리 로그의 첫 번째 이벤트가 Position 4부터 시작되기 때문


START SLAVE;

 

SHOW SLAVE STATUS;



slave쪽 C:\Program Files\MariaDB 11.7\data/my.ini

[mysqld]

datadir=C:/Program Files/MariaDB 11.7/data

port=33066

innodb_buffer_pool_size=2041M

character-set-server=utf8mb4


server_id = 2  

relay_log = mysql-relay-bin

#replicate_do_table = ip_db.trx

#replicate_do_table = ip_db.orders



[client]

port=33066

plugin-dir=C:\Program Files\MariaDB 11.7/lib/plugin



============= 마스터쪽 sql

START master;


SHOW VARIABLES LIKE 'log_bin';

RESET MASTER;


SHOW MASTER STATUS;

SHOW VARIABLES LIKE 'server_id';

SHOW BINARY LOGS;

SHOW SLAVE HOSTS;



C:\Program Files\MariaDB 11.6\data/my.ini

[mariadb]

datadir=C:/Program Files/MariaDB 11.6/data

port=3306

innodb_buffer_pool_size=2037M

character-set-server=utf8mb4

server-id=1

bind-address=0.0.0.0


#gtid_mode=ON

#gtid_strict_mode=ON

#slave_gtid_strict_mode = ON

#enforce_gtid_consistency=ON //only mysql 

#log-bin=mysql-bin

log_bin=i1pms-bin

#log_bin_basename=msql-bin //안됨 err

#relay-log=relay-bin

relay_log=relay-bin #

#binlog-format=ROW

binlog_format=ROW


binlog_do_db=xx_db_x


[client]

port=3306

plugin-dir=C:\Program Files\MariaDB 11.6/lib/plugin