'푸닥거리'에 해당되는 글 240건

  1. 2018.12.27 openstack, DevStack
  2. 2018.12.26 도커 / docker
  3. 2018.12.19 복제 Replication
  4. 2018.12.19 show processlist 에 where 조건 사용하기
  5. 2018.12.19 샤딩 sharding
  6. 2018.12.18 트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel
  7. 2018.12.17 파티셔닝 Partitioning
  8. 2018.12.17 mysql dbdriver call store procedure in codeigniter(ci)
  9. 2017.08.29 Golang : Set up source IP address before making HTTP request
  10. 2017.07.25 CURL ERROR 7 Failed to connect to Permission denied

openstack, DevStack

dev util 2018.12.27 10:43

openstack, DevStack


https://www.virtualbox.org

https://www.ubuntu.com/download/server

http://mirror.kakao.com/ubuntu-releases/16.04.5/

https://docs.openstack.org/devstack/latest/


$ sudo useradd -s /bin/bash -d /opt/stack -m stack

$ echo "stack ALL=(ALL) NOPASSWOD: ALL" | sudo tee /etc/sudoers.d/stack

$ sudo su - stack


$ git clone https://git.openstack.org/openstack -dev/devstack

$ cd devstack


$ vi local.conf

[[local|localrc]]

ADMIN_PASSWORD=admin00

DATABASE_PASSWORD=#ADMIN_PASSWORD

RABBIT_PASSWOR=$ADMIN_PASSWORD

SERVICE_PASSWORD=$ADMIN_PAASSWORD


$ ./stack.sh



'dev util' 카테고리의 다른 글

openstack, DevStack  (0) 2018.12.27
도커 / docker  (0) 2018.12.26
간단한 Subversion Branching/Merging  (0) 2013.04.27
MySql.Data - MYSQL 5.X connector net  (0) 2013.04.27
Trackbacks 0 : Comments 0

도커 / docker

dev util 2018.12.26 11:06


도커 / docker


A. 도커 설치


http://docker.com


Product -> download docker CE(community Edtion)


도커 이미지 검색

docker serarch ubuntu


우분투 이미지 다운로드

docker pull ubuntu


이미지 리스트 출력

docker images


컨테이너 실행

docker run -it --name=ubuntu ubuntu

docker ps -a


컨테이너 접속

docker attach ubuntu

docker exec -it ubuntu bash


컨테이너 정지하지 않고 나옴

ctrl+P+Q


B. 도커 기본 명령어


도커 컨테이너 리스트

docker ps -a


도커 컨테이너 정지

docker stop ubuntu


도커 컨테이너 재시작

docker restart ubuntu


도커 컨테이너 삭제

docker rm ubuntu

docker rm -f ubuntu

docker kill ubuntu


도커 이미지 삭제

docker rmi ubuntu


이미지 ID 확인

docker images


이미지 파일 생성

docker save -o ubuntu_img.tar ubuntu


이미지 압축/해제

gzip ubuntu_img.tar / bzip2 ubuntu_img.tar

gzip -d ubuntu_img.tar.gz / bzip2 -d ubuntu_img.tar.bz2


이미지 삭제

docker rmi ubuntu


파일에서 이미지 로그

docker load -i ubuntu_img.tar


이미지 ID 확인

docker images


이미지 태그 지정

docker tag 이미지ID ubuntu


컨테이너 IP 주소 확인

docker inspect ubuntu | grep "IPAddress"


C. 도커 mariadb


다운로드 

docker pull mariadb:10.1


이미지 리스트 출력

docker images


실행

docker run -d --env MYSQL_ROOT_PASSWORD=sample --name=mariadb1 mariadb:10.1


컨테이너 접속

docker exec -it mariadb1 bash


'dev util' 카테고리의 다른 글

openstack, DevStack  (0) 2018.12.27
도커 / docker  (0) 2018.12.26
간단한 Subversion Branching/Merging  (0) 2013.04.27
MySql.Data - MYSQL 5.X connector net  (0) 2013.04.27
Trackbacks 0 : Comments 0

복제 Replication

mysql 2018.12.19 17:24


Slave IO Thread

- 마스터 DBMS에 로그인해서 바이너리로그를 읽어 릴레이로그에 쓰는 쓰레드


Slave SQL Thread

- 릴레이로그에서 실제 슬레이브 DBMS에 반영하는 쓰레드


docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=master mariadb:10.1

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name slave mariadb:10.1


docker inspect master | grep "IPAddress"

docker inspect slave | grep "IPAddress"


docker exec -it master bash


cd /etc/mysql


my.cnf/my.ini


master

[mysqld]

pid-file = /var/run/mysqlid/mysqlid.pid

socket = /var/run/mysql/mysqlid.sock

datadir = /var/lib/mysql

log-error = /var/log/mysql/error.log 

symbolic-links = 0

bind-address = 0.0.0.0

server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

expire_logs_days = 10

max_binlog_size = 100M 



docker exec -it slave bash


cd /etc/mysql


my.cnf/my.ini


slave

[mysqld]

pid-file = /var/log/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.dock

datadir = /var/lib/mysql

log-error = /var/log/mysql/error.log 

symbloic-links = 0

bind-address = 0.0.0.0

server-id = 2

relay-log = /var/log/mysql/relay.log

relay_log_purge = TRUE

read_only



sudo service mysql restart


$ docker commit -m "xxx" -a "aaa" master master_new

$ docker commit -m "xxx" -a "aaa" slave slave_new


$ docker images


$ docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=master_new master_new

$ docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=slave_new slave_new


$ docker rm -f master

$ docker rm -f slave


$ docker ps -a


$ docker inspect master_new | grep "IPAddress"

$ docker inspect slave_new | grep "IPAddress"


$ docker exec -it master_new bash


create user 'replicationuser1'@'%' identified by 'sample';


grant replication slave, replication client on *.* to 'replicationuser1'@'%' identified by 'slavepass';


flush privileges;


master 상태 확인

show master status;


master db 덤프 후 slave로 복사


# docker exec -it master_new bash

mysqldump -lock-all-tables -all-databases -master-data=1 -uroot -p > dump.sql


# docker cp master_new:/dump.sql . 

# docker cp dump.sql slave_new:/


slave


# docker exec -it slave_new bash


mysql-uroot -p < dump.sql


change master to master_log='mariadb-bin.001482' master_log_pos=4415249, master_host='172.17.0.x', master_port=3306, master_user='replicationuser1', master_password='slavepass';


show slave status;

-> Slave_IO_Running

-> Slave_SQL_Running


start slave;


show slave status;

-> Slave_IO_Running

-> Slave_SQL_Running



'mysql' 카테고리의 다른 글

복제 Replication  (0) 2018.12.19
show processlist 에 where 조건 사용하기  (0) 2018.12.19
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0

show processlist 에 where 조건 사용하기

mysql 2018.12.19 13:05


SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time > 10 and info is not null;


how to customize `show processlist` in mysql? 2009.05.30

http://stackoverflow.com/questions/929612/how-to-customize-show-processlist-in-mysql


Chapter 23 The INFORMATION_SCHEMA PROCESSLIST Table

https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.1/en/processlist-table.html


'mysql' 카테고리의 다른 글

복제 Replication  (0) 2018.12.19
show processlist 에 where 조건 사용하기  (0) 2018.12.19
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0

샤딩 sharding

mysql 2018.12.19 08:20


데이터베이스 샤딩 sharding


- 파티셔닝과 달리 별도의 샤드를 구축, 샤딩 플랫폼(스파이더)를 통해 구현

- 쓰기 성능이 지속적으로 향상됨

- Spider 기반 샤딩 구축


수직(Verical) 샤딩

- 샤드를 만들어 저장할 때 구분 기준을 연령/성별과 같은 기준으로 나눠 구성

- 테이블 단위로 분할


수평(Horizontal) 샤딩

- 동일한 시스템을 지역/국가별로 나눠서 구성하는 경우

- 동일한 테이블을 여러 개로 분할


범위(range) a-m /n-r / s-z

해시(hash) 해시함수 파티션별로 크기를 비슷하게 나눔

리스트(list) 특정한 컬럼을 기준

컴포지트(composite) range-hash/range-list


mariadb 다운로드

docker pull mariadb:10.1


스파이더 인스턴스 실행

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=spider mariadb:10.1


접속

docker exec -it spider bash


테스트인스턴스 실행

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=sample1 mariadb:10.1

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name-sample2 mariadb:10.1


실행 인스턴스 확인

docker ps -a


테스트인스턴스 접속

docker exec -it sample1 bash

docker exec -it sample2 bash


IP주소 확인

docker inspect spider | grep "IPAddress"

docker inspect sample1 | grep "IPAddress"

docker inspect sample2 | grep "IPAddress"


docker exec -it spider bash

docker exec -it sample1 bash

docker exec -it sample2 bash


cd /user/share/mysql


스파이더 설치

mysql -u root < /usr/share/mysql/install_spider.sql


스파이더 엔진 설치확인

show engines;


https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/

http://yakolla.tistory.com/69


spider sample1,2 에 사용자추가 및 권한 할당

use mysql;

create user 'spider-test'@'%' identified by 'sample';

grant all on *.* to 'spider-test'@'%' with grant option;

flush privileges;


샤딩 플렛폼에 서버정보 등록하기

create server sample1

 foreign data wrapper mysql

options(

 host '172.17.0.x',

 database 'sampleDB',

 user 'spider-test',

 password 'sample',

 port 3306

);


create server sample2

 foreign data wrapper mysql

options(

 host '172.17.0.x',

 database 'sampleDB',

 user 'spider-test',

 password 'sample',

 port 3306

);


서버정보 확인하기

select * from mysql.servers;


spider 에 table 생성

create database sampleDB;

user sampleDB;

create table shardingTest(id int not null auto_increment, name varchar(255) not null, address varchar(255) not null, primary key(id) engine=spider comment='wrapper "mysql", talbe "shardingTest"' partition by key(id) (partition sample1 comment = 'srv "sample1"', partition sample2 comment = 'srv "sample2"' );


sample1,2 에 talbe 생성

create database sampleDB;

user sampleDB;

create table shardingTest

(

 id int not null auto_increment,

 name varchar(255) not null, 

 address varchar(255) not null,

 primary key(id)

);


spider 접속 후 

user sampleDB;

insert into shardingTest(name, address) values ('kim', 'seoul');

insert into shardingTest(name, address) values ('lee', 'seoul');

insert into shardingTest(name, address) values ('park', 'seoul');

insert into shardingTest(name, address) values ('kim', 'busan');

insert into shardingTest(name, address) values ('lee', 'daegu');

insert into shardingTest(name, address) values ('park', 'jeju');


select * from shardingTest;


sample1,2에서도 각각 확인


select * from shardingTest;



VLDB Very Large DBMS


Sharding

- DBMS 내용 분할 (DB/테이블)

- Write 성능 향상


Replication

- 동일한 DBMS를 여러 개 유지(마스터/슬레이브)

- Read 성능 향상


'mysql' 카테고리의 다른 글

복제 Replication  (0) 2018.12.19
show processlist 에 where 조건 사용하기  (0) 2018.12.19
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0

트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel

mysql 2018.12.18 14:39


--


Transcation


select @@autocommit;


set autocommit = false;


create database sampleDB;


create table BusinessCard(Name varchar(255), Address varchar(255), Telephone varchar(255));


insert into BusinessCard values ('Bob', 'Seocho-dong 123', '123-4567');


commit;


rollback;


--


Lock


select engine, support from information_schema.engines where support='DEFAULT';


set default_storage_engine = InnoDb;

set default_storage_engine = MyISAM;


select engine from information_schema.tables where table_name = 'city' and table_schema='world';


alter table 'city' engine = InnoDB;


--


Isolation level


select @@tx_isolation;


set tx_isolation = 'READ-COMMITED';


commit;


--


트랜잭션의 격리수준 Transcation IsolationLevel


ACID ( Atomicity / Consistency / Isolation / Durability )

- 원자성 Atomicity : All or Nothing, Commit / Rollback

- 일관성 Consistency : 트랜잭션 전후에 데이터가 손상을 받으면 안됨, 같은 데이터가 다른 값을 가지면 안됨

- 고립성/격리수준 Isolation : 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성간의 trade-off

- 지속성 Durability : 트랜잭션이 종료된 이후에도 데이터에 문제가 없어야 됨


Read Uncommitted

- 트랜잭션이 종료되지 않는 상태의 대상 데이터를 읽어가는 것

- 트랜잭션이 처리되는 도중에 다른 트랜잭션이 해당 데이터를 읽기를 허용 ( uncommitted date )

- 트랜잭션이 종료되면 데이터 값이 변경 될 수 있음

- 예를 들면 개표가 진행 중인 득표 현황으로 현재 값을 참고하지만 최종 값은 변경 될 수 있음

- 성능은 높지만 데이터의 안정성이 떨어짐


Read Committed

- 트랜잭션이 종료 된 상태의 데이터만 읽는 것 ( committed data )

- 오라클이나 일반적인 DBMS 의 기본 격리수준

- 현재 트랜잭션이 진행되면서 데이터를 참고할 때 다른 트랜잭션에서는 작업이 종료된 데이터만을 읽는 다는 것

- 이 경우 트랜잭션에서 동일한 쿼리는 여러 번 수행시킬 때 쿼리 값이 달라지는 경우가 생길 수 있음

- 이 경우를 해결해 주는 것이 Repeatable Read


Repeatable Read

- 트랜잭션이 진행되는 도중에는 쿼리를 반복 수행하더라도 결과 값은 계속 동일

- 즉, 데이터가 캐싱/버퍼링 됨

- DB 백업 시간이 오래 걸릴 경우 백업이 진행되는 도중에는 데이터가 수정되어도 백업 시작 시점의 데이터를 백업하도록 함

- 다른 트랜잭션이 업데이트하는 것은 금지하지만 레코드 추가하는 것은 허용하는 방식

- MariaDB 의 기본 격리 수준


Serializable

- 트랜잭션끼리 겹치는 일이 발생하지 않음

- 트랜잭션이 동시에 수행되는 것이 금지되고 순차적으로 수행됨

- 대신 성능이 가장 낮음, 안정성은 높음


CAP ( Consistency / Availability / Partition Tolerance )







Trackbacks 0 : Comments 0

파티셔닝 Partitioning

mysql 2018.12.17 14:51


create table BusinessCard

(id int not null, name varchar(255), address varchar(255), telephone varchar(255), createtime date)

  partition by range(year(createtime))(

  partition p0 values less than (2013),

  partition p1 values less than (2014),

  partition p2 values less than (2015),

  partition p3 values less than MAXVALUE

);


show create table BusinessCard\G


insert into BusinessCard values (1, 'kim','seoul',' 123-456', '2000-01-01');

insert into BusinessCard values (2, 'lee','seoul',' 123-456', '2014-01-01');


explain partitions select * from BusinessCard where createtime >= '2014-01-01' \G


파티션 추가/삭제

alter table BusinessCard add partition(

   partition p4 values less than (2005));


alter table BusinessCard drop partition p4;


파티션 분할/병합

alter table BusinessCard

 reorganize partition p3 into (

 partition p3 values less than(2015), 

 partition p4 values less than MAXVALUE

);


alter table BusinessCard

 reorganize partition p2, p3 into (

 partition p23 values less than (2014));




Trackbacks 0 : Comments 0

mysql dbdriver call store procedure in codeigniter(ci)

php 2018.12.17 14:19

mysql dbdriver call store procedure in codeigniter(ci)




<!-- php -->


$sql = "CALL .sp(@out1);";


$this->db->query($sql);            


$query = $this->db->query("SELECT @out1");




$result_temp = array();




if($query->num_rows() > 0)


$result_temp = $query->result_array();








<!-- mysql -->


CREATE DEFINER=`id`@`ip` PROCEDURE `sp`( 


OUT `last_id` INT


)


BEGIN




SET last_id = "test";




END$$




DELIMITER ;






<!-- codeigniter system/database/DB_active_rec.php -->




/**


* "Count All Results" query


*


* Generates a platform-specific query string that counts all records


* returned by an Active Record query.


*


* @param string


* @return string


*/


public function count_all_results($table = '')


{


if ($table != '')


{


$this->_track_aliases($table);


$this->from($table);


}




$sql = $this->_compile_select($this->_count_string . $this->_protect_identifiers('numrows'));




$query = $this->query($sql);


 


$result_temp = $query->result();




$array_temp = json_decode(json_encode($result_temp[0]), True);




$this->_reset_select();




if ($array_temp["numrows"] == 0)


{


return 0;


}




return (int) $array_temp["numrows"];


}



Trackbacks 0 : Comments 0

Golang : Set up source IP address before making HTTP request

분류없음 2017.08.29 17:15


[출처] https://www.socketloop.com/tutorials/golang-set-up-source-ip-address-before-making-http-request


Problem :

There are times that you want to use certain IP address in a machine ( such as the one with permission to connect outside a firewall ) before making a HTTP request to another server. This is similar to the wget binding command :

For example : wget --bind-address=192.168.10.1 \

How to do that in Golang?

NOTE : This is not for masking or spoofing your IP address

Solution :

Build your own custom HTTP transport client and specify the local IP address that has the permission to connect outside a firewall.

For example :

 package main

 import (
         "fmt"
         "io/ioutil"
         "net"
         "net/http"
         "os"
         "time"
 )

 func main() {
         OKAddr := "<change here>" // local IP address to use

         OKAddress, _ := net.ResolveTCPAddr("tcp", OKAddr)

         transport := &http.Transport{
                 Proxy: http.ProxyFromEnvironment,
                 Dial: (&net.Dialer{
                         Timeout:   30 * time.Second,
                         KeepAlive: 30 * time.Second,
                         OKAddr: OKAddress}).Dial, TLSHandshakeTimeout: 10 * time.Second}

         client := &http.Client{
                 Transport: transport,
         }

         resp, err := client.Get("http://example.com/filetodown.zip")

         if err != nil {
                 panic(err)
         }

         defer resp.Body.Close()

         html, err := ioutil.ReadAll(resp.Body)

         if err != nil {
                 panic(err)
         }

         // fmt.Println(os.Stdout, string(html))
         // or save the zip - see https://www.socketloop.com/tutorials/golang-download-file-example
 }

References :

https://www.socketloop.com/tutorials/golang-convert-http-response-body-to-string

https://www.socketloop.com/tutorials/golang-download-file-example


Trackbacks 0 : Comments 0

CURL ERROR 7 Failed to connect to Permission denied

APM 2017.07.25 08:25

“CURL ERROR 7 Failed to connect to Permission denied” error is caused, when for any reason curl request is blocked by some firewall or similar thing.

you will face this issue when ever the curl request is not with standard ports.

for example if you do curl to some URL which is on port 1234, you will face this issue where as URL with port 80 will give you results easily.

Most commonly this error has been seen on CentOS and any other OS with ‘SElinux’.

you need to either disable or change  ‘SElinux’ to permissive

1
nano /etc/selinux/config

locate following line

1
SELINUX=enforcing

Change this to

1
SELINUX=disabled

reboot is needed



SELINUX=disabled

출처: http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied



Trackbacks 0 : Comments 0