독까의 이야기

윈도우에 설치 된 mysql 5.6 DB 백업 스케쥴 등록 필요.


1.  기본적으로 알려진 덤프 명령어를 이용 

C:/> mysqldump -uroot -p'PaSSword!@#' DBNAME > H:\mysql_Backup\DBNAME\DBNAME_%date%.sql
입력 하였으나 에러 출력

Warning: Using a password on the command line interface can be insecure.
mysqldump: Got error: 1045: Access denied for user 'root'@'::1' (using password: YES) when trying to connect



2.  구글 검색시 mysql 5.6 이상부터 발생되는 보안 이슈라고 함

mysql_config_editor 를 이용한 login-path 설정하면 해결 가능하다고 함

C:/> mysql_config_editor set --login-path=backup --host=localhost --user=root --password
Enter password : PaSSword!@#

확인 :
C:/> mysql_config_editor print --all
[backup]
user = root
password = *****
host = localhost



3.  덤프 명령어 재실행

C:/> mysqldump --login-path=backup DBNAME > H:\mysql_Backup\DBNAME\DBNAME_%date%.sql
입력 하였으나 에러 출력

mysqldump: Got error: 1045: Access denied for user 'root'@'::1' (using password: YES) when trying to connect



4.  또 구글 검색

login-path 생성시 패스워드에 특수 문자가 포함되는 경우에는 패스워드 입력 저장시 " " 큰따옴표로 묶어야 한다고 함
ex) Enter password: "PaSSword!@#"



5.  기존 login-path 삭제 후 재생성

C:/> mysql_config_editor remove --login-path=backup

C:/> mysql_config_editor set --login-path=backup --host=localhost --user=root --password
Enter password: "PaSSword!@#"



6.  덤프 명령어 재재실행

C:/> mysqldump --login-path=backup DBNAME > H:\mysql_Backup\DBNAME\DBNAME_%date%.sql

정상적으로 덤프 파일 생성 확인



7.  mysql 접속 후 등록 된 DB 리스트 확인

mysql> show databases;

출력 된 DB 리스트 취합하여 스크립트 생성 및 실행



8.  스키마 백업시 오류 발생 확인

mysqldump: Got error: 1044: Access denied for user 'root'@'::1' to database 'information_schema' when using LOCK TABLES

lock 이 걸려있는 DB 백업시에는 옵션 추가 :  --single-transaction

C:/> mysqldump --login-path=backup information_schema --single-transaction > H:\mysql_Backup\information_schema\information_schema_%date%.sql

리눅스 서버와 윈도우 서버에 mysql 을 설치 했으니, 이중화를 구성하려고 한다.

MS-SQL 이중화와는 방식이 다르긴 하지만 뭐, 그냥 저냥 해보면 될 것 같다. 


1.  Master 와 Slave 할당


검색을 통해서 알아보니깐 DB 버전이 완전히 같을 필요는 없지만, Slave 가 버전이 높아야 한다고 한다. 


그래서 Master 는 리눅스 mysql 5.1 을, Slave 는 윈도우 mysql 5.6 으로 정했다. 


M : Linux / mysql 5.1 / 192.168.1.10

S : Window / mysql 5.6 / 192.168.1.20




2.  M 의 my.cnf 설정 추가


[mysqld] 하단에 아래의 구문 추가


log-bin=mysql-bin

server-id = 1


mysqld 서비스 재시작


# service mysqld restart




3.  M 의 mysql 에 S 에서 접속할 사용자 계정 생성


mysql> use mysql;

mysql> grant replication slave on *.* to 'repluser'@'192.168.1.20' identified by 'password';




4.  S 의 my.ini 설정 추가


[mysqld] 하단에 아래의 구문 추가


log-bin=mysql-bin

server-id = 2


윈도우 서비스에서 mysql 재시작




5.  S 에서 M 에 접속하는 정보 등록


my.ini 에 아래와 같이 구문을 추가 하고, 서비스 재시작 했더니 구동 실패가 발생했다.


[mysqld] 

master-host=192.168.1.10

master-user=repluser

master-password=password

master-port=3306


mysql 에서 직접 M 의 접속 정보 입력을 진행 했다. 


mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.10',MASTER_USER='repluser',MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_CONNECT_RETRY=30;

mysql > start slave;


하고 나면, my.ini 에 해당 설정이 추가 되는게 아니라  C:\ProgramData\MySQL\MySQL Server 5.5\data\master.info 파일이 생성되어 저장 된다. 


윈도우 환경이라서 다른 것일 수도 있다. (리눅스 끼리 연동 후 확인 필요)




6.  M 의 mysql 에서 replication 작동 상태 확인


mysql> show master status;




7.  S 의 mysql 에서 replication 작동 상태 확인


mysql> show slave status;




8.  M 의 mysql 에 접속하여 테이블 생성 및 데이타 입력


mysql> use test;

mysql> create table gunnm ( no int(5), date int(10), text char(50), primary key(no) );

mysql> insert into gunnm values ('1', '20180321', 'replication test success, gunnm.tistory.com');

mysql> select * from gunnm;




9.  S 의 mysql 에 접속하여 gunnm 테이블 조회


mysql> use test;

mysql> select * from gunnm;




10.  결과

MS-SQL 의 미러링을 구성하는 Slave 서버에서는 대부분의 기능이 제한적인데 반해, mysql 에서는 slave 이지만 데이타값 조회가 가능한 것을 확인했다. 

그래서 slave 에서 데이타를 입력하면 master 에도 반영이 되는가를 테스트 해보았는데, 결과는 


master 의 테이블에는 slave 에서 입력한 데이타값 저장이 되지 않았다. 



결과적으로 Master 로 부터 데이타를 가져와서 저장을 하지만, 양방향 동기화가 되는 것은 아니다. 

즉, Master 에서 Slave 로의 데이타 백업만 진행되는 것을 확인 했다. 

구성 방식을 바꾸면 가능한지를 확인해 봐야겠다. 


OS 가 상이하여도 (리눅스 + 윈도우), mysql 을 DBMS 로 사용 한다면 이중화 구성이 가능함을 확인했다.


mysql 서버 테스트를 위해서 Windows 2016 서버에 mysql 5.5 버전 설치 후, 설정 변경을 위해 my.cnf 파일을 검색하였으나 확인되지 않았다. 

리눅스와 윈도우의 환경이 달라서 설정 파일도 다르게 생성이 되었다. 

구글 검색을 통해서 확인을 해보면 

mysql 이 설치 된 경로에 my.ini 파일이 있다고 하는데, C:\Program Files\MySQL\MySQL Server 5.5 폴더 및 하위 폴더에는 해당 파일이 존재하지 않는다. 

해당 폴더에 my.ini 가 있다고 한 사람들은 구버전 사용자 또는, 남의 글 복사 붙이기 하는 것으로 추정 된다. 

금수만도 못한 놈들아!!!!

어쨌든, 설정 파일 확인하는 방법은 mysql 접속 후 아래 명령어 입력하면 확인 가능하다. 

mysql> SHOW VARIABLES WHERE Variable_Name LIKE "%dir"



C:\ProgramData\MySQL\MySQL Server 5.5\my.ini


해당 파일 수정하여 설정 변경 진행 후에는 mysql 서비스를 재시작하여 변경 된 설정을 적용 한다.