제가 블랙홀을 만져봤어요.
4838 단어 MySQL
블랙홀
ブラックホール(black hole)とは、極めて高密度かつ大質量で、強い重力のために物質だけでなく光さえ脱出することができない天体である
@ 위키백과에서 왔어요.
진정한 블랙홀은 상관없다. 이번에는 MySQL 스토리지 엔진 블랙호다.
일이 이제 와서 정말 지금 LE를 만지고 싶어요.
이 메모리 엔진은 insert를 흐르더라도 실제 기록을 하지 않지만, binlog 파일이 데이터를 토하기 때문에
슬레이브 측에서 수신하여 부하 분산을 진행합니다.
그럼 실제로 만져볼게요.
로컬 복제 환경 구축
나는 현지에서 Docker를 사용하여 MySQL을 이동하고 싶다.
docker-compose.ymlversion: '3'
services:
db-master:
image: mysql:5.7.22
ports:
- 3306:3306
volumes:
- ./master.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
db-slave:
image: mysql:5.7.22
ports:
- 3307:3306
volumes:
- ./slave.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
master.cnf의 내용(slave.cnf는server-id=1002
[mysqld]
log-bin=binlog
server-id=1001
부팅docker-compose up
마스터 사이드
master status 확인mysql> show master status \G
*************************** 1. row ***************************
File: binlog.000003
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
슬레이브 사이드
아까 마스터status 정보에 적응하기 (사용자가 루트를 직접...change master to
master_host='db-master',
master_user='root',
master_password='root',
master_log_file='binlog.000003',
master_log_pos=154;
복제 시작 및 확인mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
데이터베이스 및 테이블 생성
마스터에서 다음 sql 실행CREATE DATABASE Christmas;
use Christmas;
create table present
(
name varchar(255) not null,
address varchar(255) not null,
create_at timestamp default current_timestamp not null,
update_at timestamp default current_timestamp not null
) ENGINE=BLACKHOLE CHARSET=utf8mb4;
데이터를 넣어서 봐요.
복제 환경이 이미 완성되었기 때문에, 나는 마스터 방면에 실제적으로 데이터를 넣고 싶다.mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("PS4 Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("SSD 512GB", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("iPad Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("Apple Pencil", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> select * from present;
Empty set (0.00 sec)
텅.. 블랙홀에 빨려 들어간 것 같아.
슬레이브에서 이걸 구하기 위해 책상 엔진을 고쳐 보세요.alter table present ENGINE=innodb;
마스터 측에서 insert 문장을 다시 재생하고slave 측에서 확인합니다.mysql> select * from present;
+--------------+---------+---------------------+---------------------+
| name | address | create_at | update_at |
+--------------+---------+---------------------+---------------------+
| PS4 Pro | 自宅 | 2018-12-22 14:46:55 | 2018-12-22 14:46:55 |
| SSD 512GB | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| iPad Pro | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| Apple Pencil | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
+--------------+---------+---------------------+---------------------+
4 rows in set (0.00 sec)
순조롭게 데이터에 들어갔습니다!
참고로 마스터 사이드 id, auto_increment를 더하면 다음과 같은 Duplicate entry
욕을 먹을 수 있으니 주의하세요.Could not execute Write_rows event on table Christmas.present; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;
총결산
사용자의 로그를 자신의 서버에 놓고 GA 등을 사용하지 않거나 메인 마스터 DB에 쓰기 부하를 주지 않는 로그를 남기려면 편리할 수 있습니다.
이번에는 증량 주위를 완전히 접하지 못했기 때문에 검증을 해야 할 것 같은데...!
지금까지 블랙홀을 만져보았습니다.
좋은 밤 되세요.
Reference
이 문제에 관하여(제가 블랙홀을 만져봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kamedono/items/760db6ee90e8e7211943
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
나는 현지에서 Docker를 사용하여 MySQL을 이동하고 싶다.
docker-compose.yml
version: '3'
services:
db-master:
image: mysql:5.7.22
ports:
- 3306:3306
volumes:
- ./master.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
db-slave:
image: mysql:5.7.22
ports:
- 3307:3306
volumes:
- ./slave.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
master.cnf의 내용(slave.cnf는server-id=1002
[mysqld]
log-bin=binlog
server-id=1001
부팅docker-compose up
마스터 사이드
master status 확인
mysql> show master status \G
*************************** 1. row ***************************
File: binlog.000003
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
슬레이브 사이드
아까 마스터status 정보에 적응하기 (사용자가 루트를 직접...
change master to
master_host='db-master',
master_user='root',
master_password='root',
master_log_file='binlog.000003',
master_log_pos=154;
복제 시작 및 확인mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
데이터베이스 및 테이블 생성
마스터에서 다음 sql 실행
CREATE DATABASE Christmas;
use Christmas;
create table present
(
name varchar(255) not null,
address varchar(255) not null,
create_at timestamp default current_timestamp not null,
update_at timestamp default current_timestamp not null
) ENGINE=BLACKHOLE CHARSET=utf8mb4;
데이터를 넣어서 봐요.
복제 환경이 이미 완성되었기 때문에, 나는 마스터 방면에 실제적으로 데이터를 넣고 싶다.mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("PS4 Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("SSD 512GB", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("iPad Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("Apple Pencil", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> select * from present;
Empty set (0.00 sec)
텅.. 블랙홀에 빨려 들어간 것 같아.
슬레이브에서 이걸 구하기 위해 책상 엔진을 고쳐 보세요.alter table present ENGINE=innodb;
마스터 측에서 insert 문장을 다시 재생하고slave 측에서 확인합니다.mysql> select * from present;
+--------------+---------+---------------------+---------------------+
| name | address | create_at | update_at |
+--------------+---------+---------------------+---------------------+
| PS4 Pro | 自宅 | 2018-12-22 14:46:55 | 2018-12-22 14:46:55 |
| SSD 512GB | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| iPad Pro | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| Apple Pencil | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
+--------------+---------+---------------------+---------------------+
4 rows in set (0.00 sec)
순조롭게 데이터에 들어갔습니다!
참고로 마스터 사이드 id, auto_increment를 더하면 다음과 같은 Duplicate entry
욕을 먹을 수 있으니 주의하세요.Could not execute Write_rows event on table Christmas.present; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;
총결산
사용자의 로그를 자신의 서버에 놓고 GA 등을 사용하지 않거나 메인 마스터 DB에 쓰기 부하를 주지 않는 로그를 남기려면 편리할 수 있습니다.
이번에는 증량 주위를 완전히 접하지 못했기 때문에 검증을 해야 할 것 같은데...!
지금까지 블랙홀을 만져보았습니다.
좋은 밤 되세요.
Reference
이 문제에 관하여(제가 블랙홀을 만져봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kamedono/items/760db6ee90e8e7211943
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("PS4 Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("SSD 512GB", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("iPad Pro", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `Christmas`.`present` (`name`, `address`, `create_at`, `update_at`) VALUES ("Apple Pencil", "自宅", DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
mysql> select * from present;
Empty set (0.00 sec)
mysql> select * from present;
+--------------+---------+---------------------+---------------------+
| name | address | create_at | update_at |
+--------------+---------+---------------------+---------------------+
| PS4 Pro | 自宅 | 2018-12-22 14:46:55 | 2018-12-22 14:46:55 |
| SSD 512GB | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| iPad Pro | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
| Apple Pencil | 自宅 | 2018-12-22 14:47:10 | 2018-12-22 14:47:10 |
+--------------+---------+---------------------+---------------------+
4 rows in set (0.00 sec)
사용자의 로그를 자신의 서버에 놓고 GA 등을 사용하지 않거나 메인 마스터 DB에 쓰기 부하를 주지 않는 로그를 남기려면 편리할 수 있습니다.
이번에는 증량 주위를 완전히 접하지 못했기 때문에 검증을 해야 할 것 같은데...!
지금까지 블랙홀을 만져보았습니다.
좋은 밤 되세요.
Reference
이 문제에 관하여(제가 블랙홀을 만져봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kamedono/items/760db6ee90e8e7211943텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)