MySQL Replication (리플리케이션)

리눅스/MySQL|2015. 1. 16. 10:59
반응형

MySQL Replicaton 은 DB 서버를 여러대 두고 웹서버로 부터의 접속(쿼리, select)을 분산 시켜

DB서버의 부하를 줄이는 방법입니다.

slave 서버에서 master 서버의 바이너리 로그파일을 참조하여 업데이트 하므로,

slave 서버에 로그인하여 DB를 update 하면 동기화가 되지 않으니

slave 서버는 select 용도로만 사용을 해야 합니다.

 

두대의 MySQL 버전이 다를 경우, slave 서버의 버전이 더 높아야 합니다.

(버전에 따라 점차 기능이 많아 지므로..)

 

최대한 간단히 작성하려 하였습니다.

순서대로 따라만 하시면 누구나 손쉽게 구축이 가능합니다. ^^

 

 

1. master 서버 설정

mysql 설정 파일을 열어 아래 두개 항목이 사용중인지 확인합니다.

 

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id   = 1           <- 서버 고유 번호이므로 slave 서버와 같으면 안됩니다.

 

저장 후, mysql 을 재시작 해줍니다.

/etc/init.d/mysqld restart

 

mysql 에 로그인하여 slave 서버에서 접속할 사용자 생성을 합니다.

 

mysql -p

(mysql root 패스워드 입력)

mysql> use mysql;

mysql> grant replication slave on *.* to 'repluser'@'192.168.0.10' identified by 'sysdocu1234';

 

※ repluser : 리플리케이션 설정 목적을 위한 mysql 계정

    192.168.0.10 : slave 서버 IP 입니다. 여기서는 지정한 IP 에서만 접속되게 설정하였습니다.

    sysdocu1234 : 접속계정의 패스워드 입니다.

 

 

2. slave 서버 설정

mysql 설정 파일을 열어 아래 두개 항목이 사용중인지 확인합니다.

 

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id   = 2           <- 서버 고유 번호이므로 master 서버와 같으면 안됩니다.

 

저장 후, mysql 을 재시작 해줍니다.

/etc/init.d/mysqld restart

 

 

3. 동기화 작업 

1차적으로 master 서버의 MySQL data 폴더를 master 서버로 복사 해옵니다.

dump 로 가져오셔도 되고, rsync 로 복사해오셔도 됩니다. (rsync는 MySQL 버전이 같을때만 사용합니다.)

방법은 본 메뉴얼에서 생략합니다.


MySQL의 경우 data 디렉토리에 로그파일도 존재 하지만 Ubuntu 의 MariaDB 사용시

data 및 log 디렉토리가 별도 존재 하므로 두개의 디렉토리를 각각 전송 해주어야 합니다.


data 복사가 되었으면, master 서버의 mysql 에 로그인 하여 로그 파일 상태를 확인합니다.

 

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 |      813 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

이제 slave 서버의 mysql 에 로그인 하여 지정한 로그부터 연동이 되게 설정합니다.

 

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.0.9', master_user='repluser', master_port=3306, master_password='sysdocu1234', master_log_file='mysql-bin.000010', master_log_pos=813;

mysql> start slave;

 

※ 192.168.0.9 : master 서버 IP 입니다.

    mysql-bin.000010 : master 서버에서 확인한 바이너리 로그파일명 입니다. MariaDB는 파일명이 다르니 잘 보고 입력해야 합니다.

    813 : master 서버에서 확인한 바이너리 파일의 최종 쿼리 위치 입니다.

             여기서부터 master 서버에 쿼리 발생시 slave 서버도 같이 동작합니다.

 

 

4. 테스트

master 서버에서 테이블을 한개 생성합니다.

 

mysql> use test;

mysql> create table sysdocu ( no int(8), primary key (no) );

mysql> show tables;

 

slave 서버에서도 같은 database (test) 에 sysdocu 이라는 table 이 생성된 것을 확인할 수 있습니다.

slave 서버에서 확인해봅니다. 

 

mysql> show tables;

 

같은 형식으로 여러대(1:N)의 replication 을 구성할 수 있으며, (주의 : my.cnf 파일의 server-id 만 각각 다르게 설정)

MySQL 구동 순서는 master 서버, slave 서버 순입니다.



* 참고 (테스트 결과)

1) slave 서버 재구동 시 : replication 유지

2) master 서버 재구동 시 : replication 해제

3) slave 서버 리부팅 되는 동안 master 데이터 변경 된 것은 slave 서버가 부팅 완료되고 자동으로 sync 맞춰짐




반응형

댓글()

[oracle] oracle 구동

리눅스/MySQL|2015. 1. 16. 10:59
반응형

# su - oracle
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 10.1.0.3.0 - Production on Tue Sep 22 12:08:12 2009

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

SQL> connect /as sysdba
Connected.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778312 bytes
Variable Size             161750968 bytes
Database Buffers           25165824 bytes
Redo Buffers                1048576 bytes
Database mounted.
Database opened.
SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

[oracle@localhost ~]$ cd product/10.1.0/db_1/bin
[oracle@localhost ~]$ ./lsnrctl stop


LSNRCTL for Linux: Version 10.1.0.3.0 - Production on 22-SEP-2009 12:08:52

Copyright (c) 1991, 2004, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

The command completed successfully

[oracle@localhost ~]$ ./lsnrctl start

반응형

댓글()

mysql 로그인 상태에서 외부 파일 실행

리눅스/MySQL|2015. 1. 16. 10:58
반응형

쿼리가 있는 파일을 data 홈디렉토리에 넣고 실행하면 됩니다.

 

mysql> ₩. 파일이름

반응형

댓글()

DB이전 후, mysql_connet() 오류 발생 조치

리눅스/MySQL|2015. 1. 16. 10:58
반응형

[사용환경]

이전서버 : MySQL 5.0.45, PHP 5.2.6

신규서버 : MySQL 4.1.22, PHP 4.3.9

 

위와 같은 버전으로 낮추어 이전하였습니다.

DB데이타 이전 후, 아래와 같은 오류메세지가 출력된다면, 별도의 조치가 필요합니다.

 

[증상]

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client

 

이 에러는 mysql 버전간에 password 저장 타입이 틀려서 발생합니다.

 

[해결책]

# mysql -p (mysql root 패스워드 입력)

mysql> use mysql;
Database changed
mysql> set password for 'USERID'@'localhost' = OLD_PASSWORD('NEWPASSWORD');
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

※ USERID 및 NEWPASSWORD 에 사용하는 값 입력.

반응형

댓글()

MySQL4.1 에서 MySQL 4.0 으로 다운그레이드 하기

리눅스/MySQL|2015. 1. 16. 10:57
반응형

MySQL 은 4.0 에서 4.1 로 버전업되면서 많은 것들이 바뀌었습니다.

일단은 서브쿼리를 지원합니다.^^

데이터베이스 캐릭터셋문자가 euc-kr 에서 euckr 로 바뀌었군요.

 

문제는 제목처럼 4.0 에서 4.1 로 다운그레이드할 때 문제가 발생합니다.

 

일단 프로그램에서는 서브쿼리를 사용한게 있다면 바꿔야하겠고요.

 

데이터베이스 데이터를 옮기기 위해서는 데이터를 덤프 받아서 옮겨야 합니다.

 

mysqldump -u uid -p db_name --compatible=mysql40 --default-character-set=euckr > dump_filename

 

--compatible-mysql4.0 옵션을 사용해서 4.0에 맞도록 덤프를 받아야 합니다.

--default-character-set-euckr 옵션을 사용해서 한글이 깨지지 않도록 해야 합니다.

 

유니코드를 사용하므로 그냥 받으면 한글이 깨지더군요..

 

 

그리고 또한가지 위처럼 덤프를 받으니까 auto_increment 속성이 다 없어져 버리더군요..T.T

 

덤프 파일을 열어서 테이블생성하는 스크립트의 필요한 곳에 추가 합니다.

 

이 덤프 파일을 이용해서 데이터베이스를 옮기면 되겠습니다.

 

mysql -u uid -p db_name < dump_filename

 

 

[출처] 울산홈페이지제작은 오즈넷코리아에서... | 미니 (http://cafe.naver.com/oznet/72


반응형

댓글()

InnoDB 사용 여부 확인하기

리눅스/MySQL|2015. 1. 16. 10:57
반응형

mysql 로그인 후 아래와 같은 쿼리를 이용합니다.

 

mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
have_innodb   | YES    |
+---------------+-------+
1 row in set (0.01 sec)

반응형

댓글()

MySQL 5.1.x 설치시 구동 에러

리눅스/MySQL|2015. 1. 16. 10:57
반응형

[에러메세지]
090414 13:15:45 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended
090414 13:22:28 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
090414 13:22:28 [ERROR] /usr/local/mysql/libexec/mysqld: unknown option '--skip-federated'
090414 13:22:28 [ERROR] Aborting

090414 13:22:28 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete

 

[해결책]
/etc/my.cnf 수정
skip-federated 부분을 주석처리 합니다.


MySQL 재가동을 합니다.

반응형

댓글()

[ERROR] Can't start server: can't create PID file: No such file or directory

리눅스/MySQL|2015. 1. 16. 10:56
반응형

에러 종류
081223 10:13:55 
[ERROR] /usr/local/mysql/bin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
081223 10:13:55 [ERROR] Can't start server: can't create PID file: No such file or directory
081223 10:13:55  mysqld ended 


확인 결과
/var/run/mysqld/mysqld.pid 를 생성하지 못해서 에러가 생김


처리 방법
/var/run 아래에 mysqld 디렉토리 생성 후 소유권을 줌으로써 해결

[root@localhost run]# cd /var/run
[root@localhost run]# mkdir mysqld
[root@localhost run]# chown mysql mysqld
[root@localhost run]# chgrp mysql mysqld 



[출처] [Errcode: 2] Can't create/write to file '/var/run/mysqld/mysqld.pid'|작성자 앙마


반응형

'리눅스 > MySQL' 카테고리의 다른 글

InnoDB 사용 여부 확인하기  (0) 2015.01.16
MySQL 5.1.x 설치시 구동 에러  (0) 2015.01.16
MySQL 6.0.6 (alpha) 설치하기  (0) 2015.01.16
MySQL 4.x 버전 이상 old_password 문제  (0) 2015.01.16
슬로우 쿼리 로그 남기는법  (0) 2015.01.16

댓글()

MySQL 6.0.6 (alpha) 설치하기

리눅스/MySQL|2015. 1. 16. 10:56
반응형

mysql 을 tar xzvf 로 푼다.
압축을 푼 mysql 을 /usr/local/ 로 이동을 하되 디렉토리 명을 mysql 로 변경한다.
# mv ./mysql-6.0.9~~ /usr/local/mysql 

[설치 시작]
# groupadd mysql
# useradd -g mysql mysql
# cd /usr/local
# chown -R root:root mysql
# cd mysql 
# ./scripts/mysql_install_db --user=mysql
# chown -R mysql:mysql data
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysql

# vi /etc/rc.d/init.d/mysql
basedir=/usr/local/mysql 로 설정 확인
datadir=/usr/local/mysql/data 로 설정 확인 

# /etc/rc.d/init.d/mysql start

./bin/mysql -uroot 엔터로 mysql 에 잘 접속 되는지 확인해 보자. 잘되면 오케이~~~


원문 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=62950

반응형

댓글()

MySQL 4.x 버전 이상 old_password 문제

리눅스/MySQL|2015. 1. 16. 10:52
반응형

1. old_password 로 변경하기

Warning : mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:Program FilesApache GroupApache2 testcreatemovie.php on line 8

이 경고는 MySQL 4.1에서 나는 경고입니다.
MySQL 4.1에서는 사용자 패스워드 저장 방식이 바뀌었기 때문에 PHP4 이전에서 쓰던 mysql_connect는 통하지 않습니다.
PHP5의 mysqli_connect를 쓰셔야 합니다.

만약 mysql_connect로 접속하시려면 MySQL 사용자의 패스워드를 예전 방식으로 변경해야 하는데, 프롬프트 상에서 다음과 같이 하시거나

mysqladmin  -u  root  -p  old-password  9999999

MySQL에 접속하여 다음과 같이 하시면 됩니다.

SET  PASSWORD  FOR  'root'@'localhost'  =  OLD_PASSWORD('9999999');



[출처] mysql 4.x버전 이상 old_password 변경하기|작성자 정연아빠



2. old_password 로 구동하기

mysql 데몬 띄울때 아래 옵션 주고 띄우면 소스 수정할 필요없음..

/usr/local/mysql/bin/mysqld_safe --old_password &


[출처]  mysql old_password 문제  |  작성자   플래셔



3. mysql 에 적용하기

/etc/my.cnf 파일을 열고,
[mysqld] 하단에 old_passwords = 1 내용을 추가 후, 데몬 재시작

반응형

댓글()

슬로우 쿼리 로그 남기는법

리눅스/MySQL|2015. 1. 16. 10:52
반응형

my.cnf  파일의 [mysqld] 항목에 아래 내용을 입력 후, mysql 재시작을 해줍니다.

> 슬로우 쿼리로 분류할 시간, 로그파일 위치

 

MySQL 5.1.34 이상 버전

slow_query_log = 10

slow_query_log_file = /usr/local/mysql/data/mysql-slow-queries.log

 

MySQL 4.x 이상 버전

long_query_time = 10

log-slow-queries = /usr/local/mysql/data/mysql-slow-queries.log

 

MySQL 3.x 이하 버전

set-variable = long_query_time = 10
log-slow-queries = /usr/local/mysql/data/mysql-slow-queries.log

반응형

댓글()