MySQL 5.6 GTID 기반 마스터 복사

MySQL 5.6 의 새로운 기능 중 하 나 는 데이터베이스 의 주 된 일치 성,고장 복구,잘못 사용 능력 을 강화 하기 위해 전역 사무 ID(GTID)를 추가 한 것 이다.
GTID 가 뭐 예요?
공식 문서:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html이 문서 에서 우 리 는 전역 사무 ID 의 공식 정의 가 GTID=source 라 는 것 을 알 수 있다.id:transaction_id
MySQL 5.6 에서 모든 GTID 는 데이터베이스 업 무 를 대표 합 니 다.위의 정의 에서 sourceid 는 업 무 를 수행 하 는 주 라 이브 러 리 uid(serveruuid),transaction_id 는 1 부터 시작 하 는 자체 증가 계수 로 이 메 인 라 이브 러 리 에서 실 행 된 n 번 째 사 무 를 표시 합 니 다.MySQL 은 업무 와 GTID 사이 의 1:1 맵 을 보장 합 니 다.
환경 준비
운영 체제:CentOS 6.5 64 비트
데이터베이스 버 전:MySQL 5.6.23

토폴로지 는 다음 과 같다.

3.메 인 데이터베이스 설치(masterdb.example.com)
1.데이터 저장 디 렉 터 리 준비,사용자 생 성

[root@masterdb ~]#mkdir /data/mysqldata -p #        
[root@masterdb ~]#mkdir /data/mysqlLog/logs -p #        
[root@masterdb ~]#groupadd -r mysql
[root@masterdb ~]#useradd -g mysql -r -s /sbin/nologin -M -d /data/mysqldata mysql
[root@masterdb ~]#chown -R mysql:mysql /data/mysqldata
[root@masterdb ~]#chown -R mysql:mysql /data/mysqlLog/logs
 2.mysql 5.6.23 설치 및 초기 화

[root@masterdb ~]# tar xf mysql-advanced-5.6.23-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
[root@masterdb ~]# cd /usr/local/
[root@masterdb ~]# ln -sv mysql-advanced-5.6.23-linux-glibc2.5-x86_64 mysql
[root@masterdb ~]# chown -R root.mysql mysql
[root@masterdb ~]# cd mysql
[root@masterdb ~]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@masterdb ~]# cp support-files/my-default.cnf /etc/my.cnf
[root@masterdb ~]# chmod +x /etc/rc.d/init.d/mysqld
[root@masterdb ~]# chkconfig --add mysqld
[root@masterdb ~]# chkconfig mysqld on
[root@masterdb ~]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysqldata/ 
3.my sql 의 man 매 뉴 얼 을 man 명령 으로 출력 하 는 검색 경로:
/etc/man.config 를 편집 하고 다음 줄 처럼 추가 하면 됩 니 다.
MANPATH  /usr/local/mysql/man
4.my sql 의 헤더 파일 을 시스템 헤더 파일 경로/usr/include 로 출력 합 니 다.
이것 은 간단 한 링크 생 성 을 통 해 이 루어 집 니 다:

[root@masterdb ~]#ln -sv /usr/local/mysql/include /usr/include/mysql
5.my sql 의 라 이브 러 리 파일 을 출력 하여 시스템 라 이브 러 리 에 경 로 를 찾 습 니 다.

[root@masterdb ~]#echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
시스템 라 이브 러 리 를 다시 불 러 옵 니 다.

[root@masterdb ~]# ldconfig
6.시스템 이 mysql 명령 을 직접 사용 할 수 있 도록 PATH 환경 변 수 를 수정 합 니 다.

[root@masterdb ~]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
[root@masterdb ~]#source /etc/profile.d/mysql.sh
데이터 베 이 스 를 설치 하 는 것 과 같이 구체 적 인 과정 은 생략 합 니 다.
4.각각 데이터베이스 에서 프로필/etc/my.cnf 를 제공 합 니 다.
MySQL 5.6 에서 복사 기능 을 사용 하려 면 서비스 설정 세그먼트[my sqld]에서 다음 과 같은 옵션 을 적 게 정의 해 야 합 니 다.
binlog-format:바 이 너 리 로그 의 형식 으로 row,statement,mixed 몇 가지 유형 이 있 습 니 다.
주의해 야 할 것 은 격 리 단 계 를 READ-COMMITED 로 설정 할 때 바 이 너 리 로그 형식 을 ROW 로 설정 해 야 합 니 다.현재 MySQL 은 STATEMENT 라 는 것 이 더 이상 사용 하기에 적합 하지 않다 고 공식 적 으로 생각 합 니 다.그러나 mixed 형식 은 기본 트 랜 잭 션 격 리 단계 에서 주종 데이터 가 일치 하지 않 을 수 있 습 니 다.
log-slave-updates,gtid-mode,enforce-gtid-consistency,report-port 와 report-host:GTID 를 시작 하고 부속 적 인 다른 수 요 를 만족 시 키 는 데 사용 합 니 다.
master-info-repository 와 relay-log-info-repository:이 두 가 지 를 사용 하면 충돌 시 바 이 너 리 및 서버 로부터 의 안전 을 보장 하 는 기능 을 수행 할 수 있 습 니 다.
sync-master-info:정보 손실 이 없 도록 사용 합 니 다.
slave-paralles-workers:서버 에서 SQL 스 레 드 수 를 설정 합 니 다.0.다 중 스 레 드 복사 기능 을 닫 는 것 을 표시 합 니 다.
binlog-checksum,master-verify-checksum 과 slave-sql-verify-checksum:복사 와 관련 된 모든 검사 기능 을 사용 합 니 다.
binlog-rows-query-log-events:바 이 너 리 로그 에 이벤트 와 관련 된 정 보 를 기록 할 수 있 도록 사용 하면 고장 제거 의 복잡 도 를 낮 출 수 있 습 니 다.
log-bin:바 이 너 리 로 그 를 사용 합 니 다.복사 기능 을 보장 하 는 기본 전제 입 니 다.
server-id:토폴로지 에 있 는 모든 서버 를 복사 하 는 id 번 호 는 유일 해 야 합 니 다.
주 데이터베이스 에서:

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
[mysql]
no-auto-rehash
default-character-set = utf8

[mysqld]
server-id = 1
port = 3306
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysqldata
socket = /tmp/mysql.sock
default-storage-engine = INNODB
character-set-server = utf8
connect_timeout = 60
interactive_timeout = 28800
wait_timeout = 28800
back_log = 500
event_scheduler = ON
skip_name_resolve = ON;

###########binlog##########
log-bin = /data/mysqlLog/logs/mysql-bin
binlog_format = row
max_binlog_size = 128M
binlog_cache_size = 2M
expire-logs-days = 5
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
#rpl_semi_sync_master_enabled = 1

slow_query_log = 1
slow_query_log_file = /data/mysqlLog/logs/mysql.slow
long_query_time = 1

log_error = /data/mysqlLog/logs/error.log
max_connections = 3000
max_connect_errors = 32767
log_bin_trust_function_creators = 1
transaction_isolation = READ-COMMITTED
데이터베이스 에서:

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8

[mysql]
no-auto-rehash
default-character-set = utf8

[mysqld]
server-id = 205
port = 3306
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysqldata
socket = /tmp/mysql.sock
default-storage-engine = INNODB
character-set-server = utf8
connect_timeout = 60
wait_timeout = 18000
back_log = 500
event_scheduler = ON

###########binlog##########
log-bin = /data/mysqlLog/logs/mysql-bin
binlog_format = row
max_binlog_size = 128M
binlog_cache_size = 2M
expire-logs-days = 5
log-slave-updates=true
gtid-mode=on 
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
#rpl_semi_sync_slave_enabled = 1
skip-slave-start

slow_query_log = 1
slow_query_log_file = /data/mysqlLog/logs/mysql.slow
long_query_time = 2

log-error = /data/mysqlLog/logs/error.log
max_connections = 3000
max_connect_errors = 10000
log_bin_trust_function_creators = 1
transaction_isolation = READ-COMMITTED

5.각각 주 데이터베이스 에서 my sqld 서 비 스 를 시작 합 니 다.

[root@masterdb ~]# service mysqld start
Starting MySQL......     [ OK ]
[root@masterdb ~]# 


[root@slavedb ~]# service mysqld start
Starting MySQL......     [ OK ]
[root@slavedb ~]# 

6.주 데이터베이스 에 복사 사용 자 를 만 듭 니 다.
mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY 'replpassword';
설명:172.16.88.205 는 노드 서버 에서더 많은 노드 를 한꺼번에 권한 을 부여 하려 면 필요 에 따라 스스로 수정 할 수 있다.
7.데이터베이스 에서 복사 스 레 드 시작

mysql> CHANGE MASTER TO MASTER_HOST='masterdb.example.com', MASTER_USER='repluser', MASTER_PASSWORD='replpassword', MASTER_AUTO_POSITION=1;
mysql>start slave;
8.데이터베이스 에서 복사 상 태 를 봅 니 다.

mysql> show slave status\G;
*************************** 1. row ***************************
  Slave_IO_State: Waiting for master to send event
   Master_Host: masterdb.56xyl.com
   Master_User: repluser
   Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000002
  Read_Master_Log_Pos: 191
  Relay_Log_File: slavedb-relay-bin.000003
  Relay_Log_Pos: 401
 Relay_Master_Log_File: mysql-bin.000002
  Slave_IO_Running: Yes #IO       
  Slave_SQL_Running: Yes #SQL       
  Replicate_Do_DB: 
  Replicate_Ignore_DB: 
  Replicate_Do_Table: 
 Replicate_Ignore_Table: 
 Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
   Last_Errno: 0
   Last_Error: 
   Skip_Counter: 0
  Exec_Master_Log_Pos: 191
  Relay_Log_Space: 1899
  Until_Condition: None
  Until_Log_File: 
  Until_Log_Pos: 0
  Master_SSL_Allowed: No
  Master_SSL_CA_File: 
  Master_SSL_CA_Path: 
  Master_SSL_Cert: 
  Master_SSL_Cipher: 
  Master_SSL_Key: 
 Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
  Last_IO_Errno: 0
  Last_IO_Error: 
  Last_SQL_Errno: 0
  Last_SQL_Error: 
 Replicate_Ignore_Server_Ids: 
  Master_Server_Id: 1
   Master_UUID: 971d7245-c3f8-11e5-8b6b-000c2999e5a5
  Master_Info_File: mysql.slave_master_info
   SQL_Delay: 0
  SQL_Remaining_Delay: NULL
 Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
  Master_Retry_Count: 86400
   Master_Bind: 
 Last_IO_Error_Timestamp: 
 Last_SQL_Error_Timestamp: 
  Master_SSL_Crl: 
  Master_SSL_Crlpath: 
  Retrieved_Gtid_Set: 971d7245-c3f8-11e5-8b6b-000c2999e5a5:1-6
  Executed_Gtid_Set: 89e78301-c3f4-11e5-8b51-00505624d26a:1-3,
971d7245-c3f8-11e5-8b6b-000c2999e5a5:1-6
  Auto_Position: 1
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> 
테스트
주 라 이브 러 리 에 데이터베이스 만 들 기:

mysql> create database log_statics;
Query OK, 1 row affected (0.11 sec)
 
mysql> use log_statics;
Database changed
        log_statics        
mysql> show databases;
+--------------------+
| Database  |
+--------------------+
| information_schema |
| log_statics |
| mysql  |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)

mysql>

log 를 볼 수 있 습 니 다.statics 데이터 베 이 스 는 이미 데이터베이스 에 존재 합 니 다.
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기