본문 바로가기

엔지니어/DB

Mysql 5.7.14 설치 및 replication

728x90
반응형
 
cd /usr/local/src/
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake
wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar xvfz boost_1_59_0.tar.gz
wget http://ftp.kaist.ac.kr/mysql/Downloads/MySQL-5.7/mysql-5.7.14.tar.gz
tar xvzf mysql-5.7.14.tar.gz
cd mysql-5.7.14

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=../boost_1_59_0 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/DATA \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DSYSCONFDIR=/etc \
-DMYSQL_TCP_PORT=3306

make -j `grep processor /proc/cpuinfo | wc -l`
make install

useradd -M mysql -u 27 >& /dev/null
chown -R root:mysql /usr/local/mysql
cd /usr/local/mysql
chmod 700 support-files/mysql.server
cp support-files/mysql.server /etc/rc.d/init.d/mysql
ln -s /etc/rc.d/init.d/mysql /etc/rc.d/rc3.d/S97mysql
cp support-files/mysql.server /usr/bin/

rm -rf /DATA/*
bin/mysqld --no-defaults --user=mysql --initialize --log-error-verbosity=3
(중간쪽에 root password 있음)

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
bin/mysql -uroot -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD';
mysql> flush privileges;

# master node
mysql -uroot -p
mysql>grant replication slave, replication client on *.* to 'repl'@'192.168.0.%' identified by 'PASSWORD';
mysql> flush privileges;

## server_id 는 모든서버가 uniq 하게 설정 하며, 추후 master slave 변경을 위한 relay-log 설정
vi /etc/my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1
port    = 3306
bind-address = 0.0.0.0
binlog-format = MIXED
lower_case_table_names = 1

service mysql restart
echo " show master status; " | mysql -uroot -p



## relication 서버에반영될 master 서버 db dump 작업
mysql -uroot -p
Enter password:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> exit


mysqldump -u root -p --all-databases > /tmp/database-backup.sql
ls -al /tmp/database-backup.sql
-rw-r--r--. 1 root root 766818 2016-10-07 08:23 /tmp/database-backup.sql

mysql -uroot -p
mysql> UNLOCK TABLES;
mysql> exit

## scp로 replication 서버에 전달

yum install openssh-clients -y
scp /tmp/database-backup.sql root@192.168.0.171:/tmp
scp /tmp/database-backup.sql root@192.168.0.172:/tmp
scp /tmp/database-backup.sql root@192.168.0.173:/tmp
scp /tmp/database-backup.sql root@192.168.0.174:/tmp
...
database-backup.sql                                                                                   100%  749KB 748.9KB/s   00:00   


##  slave node 에 my.cnf 수정
## 기본 설정 자체는 master 와 동일 read-only 설정 하여 일반 계정의 write 금지 하도록 설정
## server id는 uniq 하게 설정

vi /etc/my.cnf         

[mysqld]
#replication
server-id = 2
binlog-format = MIXED
log-bin = mysql-bin
relay-log=mysqld_relay_bin
read-only = 1
slave-skip-errors = 1062, 1034, 1016

# Slow_Query
log_slow_admin_statements


## slave node db재시작
service mysql restart


## slave node 에서 master 서버 아이피 replication 계정 아이디 비번 및 master서버 로그 파일 번호 포지션 확인
## (mstart 에서 show master stat \G; 로 확인
[root@SK_TEST bin]# echo "show master status \G" | mysql -uroot -p
Enter password:
*************************** 1. row ***************************
             File: mysql-bin.000002
         Position: 154
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:


[root@SK_TEST bin]# mysql -uroot -p
mysql> CHANGE MASTER TO master_host='192.168.0.170', master_port=3306, master_user='repl',
master_password='PASSWORD', master_log_file='mysql-bin.000001', master_log_pos=154;
mysql> exit


## scp 로 전달한 master db 파일 slave 에 적용
mysql -uroot -p < /tmp/database-backup.sql


## slave 에서 db쉘을 통하여 start slave 로 replication 시작
## 이상이 없다면 slave io,sql 쓰레드가 아래와 같이 yes 로 나옴
## master 에서 db에 변경 사항이 있을 경우 slave 에서 master 의 binlog와 포지션이 slave와 동일 한지 체크 한다.
## stop slave; -> reset slave; -> start slave ; 명령어로 slave 정보를 갱신하여 master 와의  replication 정보를 다시 맞출수있다.

mysql> start slave;

mysql> show slave status \G;
*************************** 1. row ***************************

..생략...
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


..생략...


## replication 확인을 위해 master 에서 임의의 DB생성후 slave node 에서 DB확인
mysql> create database sk_test;
mysql> show databases;






 

반응형