mySQL DB migration

환경: Linux Cent OS, MySQL 5.7 ver.


  1. root 계정 비밀번호 설정

root 계정 비밀번호 분실에 준해서 작업하면 된다.

  • mySQL 서비스 중지 –> 안전모드로 보안없이 로그인 –> 계정/비번 관리테이블에서 data를 직접 update

이거 하는데도 내 해당 서버 계정에 mysql 실행 권한이 없어서(헐- DBA작업을 시키지 말던가 시킬거면 권한을 주던가) sudo를 열심히 쳐가며, 때론 파일 생성이 안되면 해서 복사하는 등 우회해 가면서 작업하였다.

  • service mysqld status –> 서비스 상태 확인
  • service mysqld stop –> 서비스 상태 정지
  • mysqld_safe –skip-grant-tables&

mysql -u root mysql

하면 일단 접속은 된다. 이 상태에서,

UPDATE mysql.user
    set authentication_string=PASSWORD("new_password"),
    password_expired='N',
    plugin='mysql_native_password'
where User='root';
flush privileges;
하고 root password를 변경할 수 있다.
terminal 또는 원격 접속을 통해 잘 되었는지 확인한다.
정상 접속 후 비밀번호 재설정을 요구받을 때에는 다음과 같이 간단히 변경 가능하다.

ALTER user ‘root’@’localhost’ IDENTIFIED BY ‘new_password

이제 dump 떠 놓았던 file들을 밀어넣는 작업만이 남았다.


2. dump file을 서버로 옮기기

이때는 FTP등으로 file 이동이 필요한데, windows의 노예인 나는 winSCP 프로그램을 사용한다. 간단히 서버 접속 터미널을 통해 file을 local backup disk에서 target server storage로 올린다.


3. mysqldump 를 통한 data upload

mysql -u 계정 -p target_DB_name < 경로/dump.sql 

과 같은 명령어로 간단히 upload가 가능하다.

이 경우에도 다양한 옵션을 줄 수 있는데, view table이 dump뜰 때 참조 data table보다 먼저 생성되도록 되어있어 오류가 났다. 특정 테이블만 빼고 upload를 하고 특정 테이블을 나중에 upload하는 방식으로 순서를 조정해주기로 하고 다음과 같이 해결하였다.

mysql -u 계정 -p target_DB_name < 경로/dump.sql  –ignore-table=view.table이름


*

주관하던 프로젝트가 점점 data size와 I/O가 늘어남에 따라 서버를 두차례나 옮겼다. 그 과정에서 가장 작고 다른 프로젝트들도 얽혀 제약이 많았던 첫번째 서버에서 살 때는 하다하다 안되서 table partitioning(어디서 본건있어가지고) 까지 해서 사용을 했었다. 즉, 두번째 서버로 옮길때는 다시 합해서 -_-(identity key를 사용하는 컬럼들이 있어서 조금 피곤한 작업이었다) 옮기고 세번째로 옮길 때에는 data size와 memory buffer size가 gap이 너무 커서 data를 쪼개서 1주일에 걸쳐 옮겨야만 했다. 

후배들이 교수님 지도 하에 후속 프로젝트를 진행하면서 이제 좀 관리만 도와주면 되겠거니 하던 차에 무얼 했는지 초기 설치부터 아마 조금 문제가 있었던 것으로 보이는 해당 서버의 DBMS file자체를 무작위 손상을 시켜 복구가 불가능한 상황이 왔다. mySQL 재설치를 권해주었는데 그나마… 설치했다는 사람, root 계정 접근이 안되서 두었다는 사람, 설치했다는 사람과 후속 작업을 하겠다는 사람만 알겠다는 사람들이 나타났다. (혼란하다 혼란해)

결론적으로, mySQL은 5.7버전이 새로 설치 되어있는데, root 권한 설정이 리눅스 계정별 권한 설정과 함께 얽혀 아무도 로그인을 할 수 없는 모양이었다. 구글신과 많은 친절한 개발자들의 노트를 보고 trouble shooting 한 내용을 또 후손(!)을 위해 기록한다.


*

사실 어렵다면 어렵지만 구글링 시대를 살아가는 사람으로서, 개발자 title을 달고 못할 작업은 아니다. 왜 돌고 돌아 나에게까지 오게 되었을까? 악의 없이 진심으로 궁금하긴 하다.


블로그에 OS별, SQL 버전 별로 명령어들을 가지런히 정리해두어 주신 포스팅들이 많아 도움을 크게 받았다. 세상의 선의에 문득 감동하고 뭔가 도움되는 포스팅을 어떻게 할 수 있을까 고민이 생겼다.

 

댓글 남기기