MySQL2017.05.08 11:42

[에러 메세지]

[ERROR] Slave SQL: Worker 3 failed executing transaction '' at master log mysql_bin.000126, end_log_pos 180180588; Could not execute Delete_rows event on table 테이블; Can't find record in '테이블', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql_bin.000126, end_log_pos 180180588, Error_code: 1032

 

[내용]

위와 같은 에러 메시지가 나오면서 Slave Sync 종료 되었을 , 해결 방법에 대해 알아 봅시다.

 

[원인]

에러 메세지의 원인은 master slave 간에 데이터가 일치 하지 않아서 발생합니다.

예를 들어 master slave table 아래와 같이 데이터가 있다고 가정합니다.

 

1. master table

a

b

1

1

2

2

3

3

 

2. slave table

a

b

2

2

3

3

 

위와 같은 상태에서 master에서 DELETE FROM table where a = 1; 이라는 명령어를 했을 , slave에서 binlog 읽어서 반영하려 시도 하였으나 일치하는 row가 없어서 에러 메시지를 출력하고, sync 종료하게 됩니다.

 

[해결방법]

slave에서 아래와 같은 명령어 순서로 작업을 하면 됩니다.(에러가 statement 만큼 실행 해줘야 )

STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

 

하지만, 방법은 workaround 적인 방법입니다.

 

어느 시점에 어떤 이유로 sync 오류가 난지 파악을 하지 못한다면, 해당 오류는 지속적으로 발생할 있으면, 궁극적으로는 master slave 데이터를 맞춰 주는 것이 가장 좋은 방법입니다.

신고

'MySQL' 카테고리의 다른 글

[Mysql] Error_code: 1032  (0) 2017.05.08
Can't connect to local MySQL server through socket '/tmp/mysql.sock'  (1) 2016.05.19
[Mysql] 변수  (0) 2016.05.19
[Mysql] 제어문  (0) 2016.05.19
[Mysql] 스토어드 함수  (0) 2016.05.17
[Mysql] 스토어드 프로시저  (0) 2016.05.17
Posted by TM ~ing
MySQL2016.05.19 11:18

 

여러 가지 이유로 Mysql 접속이 안되는 경우가 있습니다.

(데몬이 실행되지 않았을 경우, 디렉터리 권한이 잘못된 경우 등등..)

그 중에서도 socket 파일이 없을 경우에 대응 방법 입니다.

   

[방법1]

데몬을 내리지 못할 경우에 방법입니다.

로컬에서 접속할 경우 계정은 localhost를 타고 접속하게 되는 데, 이 때에는 소켓을 통하여 접속을 하게 됩니다.

그런데 어떤 이유로 소켓 파일이 삭제 되었을 경우에는 아래 방법으로 접속합니다.

단, 해당 ACL이 허용 되어 있어야합니다.

   

mysql -uroot -h '127.0.0.1' -p

   

[방법2]

데몬을 내릴 수 있는 환경이라면, 데몬 재 시작을 통하여 소켓 파일을 생성하여 접속 할 수 있습니다.

mysql 데몬을 재시작 하면 자동으로 소켓 파일이 생성됩니다.



신고

'MySQL' 카테고리의 다른 글

[Mysql] Error_code: 1032  (0) 2017.05.08
Can't connect to local MySQL server through socket '/tmp/mysql.sock'  (1) 2016.05.19
[Mysql] 변수  (0) 2016.05.19
[Mysql] 제어문  (0) 2016.05.19
[Mysql] 스토어드 함수  (0) 2016.05.17
[Mysql] 스토어드 프로시저  (0) 2016.05.17
Posted by TM ~ing
MySQL2016.05.19 00:45

 

BEGIN … END 블록 사이에서 사용하는 변수는 스토어드 프로그램 로컬 변수, 로컬 변수라고 한다.

※ 프리페어 스테이트먼트를 사용하려면 반드시 사용자 변수를 사용 해야 함.

   

[로컬 변수 정의 및 할당]

DECLARE

DECLARE v_name VARCHAR(50) DEFAULT 'LEE';

   

SET

SET v_name = 'Kim', v_mail = 'kim@email.com';

   

SELECT … INTO

SELECT emp_no, first_name, last_name INTO v_empno, v_firstname, v_lastname

FROM employees WHERE emp_no=10001

LIMIT 1;

   

※ 프로시저 입력 파라미터, 로컬 변수, 컬럼명이 동일하게 이름을 가질 수 있으므로 입력 파라미터에는 "p_"를 로컬 변수에는 "v_"를 추가하며 명명하는 것이 좋다.

DELIMITER ;;
CREATE PROCEDURE sp_hello (IN p_first_name VARCHAR(50))
BEGIN
DECLARE v_first_name VARCHAR(50) DEFAULT 'Kim';
SELECT CONCAT('Hello ', first_name) FROM employees LIMIT 1;
END ;;
DELIMITER ;

 

신고

'MySQL' 카테고리의 다른 글

[Mysql] Error_code: 1032  (0) 2017.05.08
Can't connect to local MySQL server through socket '/tmp/mysql.sock'  (1) 2016.05.19
[Mysql] 변수  (0) 2016.05.19
[Mysql] 제어문  (0) 2016.05.19
[Mysql] 스토어드 함수  (0) 2016.05.17
[Mysql] 스토어드 프로시저  (0) 2016.05.17
Posted by TM ~ing