1. brew 설치한다.


2. brew update


3. brew install mariadb

mysql.server status  # 상태 확인

mysql.server stop     # 정지

mysql.server start     # 시작

mac의 경우, pc가 부팅되면 MariaDB가 정지된다. 그래서 자동으로 실행될 수 있도록 링크를 걸어야한다.

MariaDB plist를 LaunchAgents 디렉토리에 링크를 걸어두면 자동으로 실행된다.

ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents

그런데 위의 방법으로 링크를 걸어두면 mysql.server stop 명령을 내림과 동시에 다시 시작이 된다. 의도적으로 종료를 하여도 다시 시작되어버려서 관리상 어려움이 있다. 이러한 문제는 아래의 명령으로 대체하면 된다. 

alias mariadb_start='launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist'         # 시작

alias mariadb_stop='launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist'     # 종료


4. mysql.sock 

몇몇의 프로그램들은 /var/mysql/mysql.sock 파일을 찾는다. 그런데 mac은 /tmp/mysql.sock에 존재한다. 그러므로 저 위치에 링크를 걸어두면 된다. 

sudo mkdir /var/mysql

sudo ln -sv /tmp/mysql.sock /var/mysql/mysql.sock


5. my.cnf 파일 경로

mysql --help 로 확인 가능

ex) mysql --help | more


6. 외부에서 mariadb 접속

기본적으로 127.0.0.1:3306 으로 되어있을 것이다. 헌데 이렇게 되면 localhost 만이 접속 가능하다. 외부에서도 접속을 허용하려면, home-brew.mxcl.mariadb.plist 의 내용을 수정해야 한다. 

 <string>--bind-address=127.0.0.1</string> 이 부분의 ip주소를 0.0.0.0 으로 바꿔주고 mariadb를 재시작한다.

'Programming > DataBase' 카테고리의 다른 글

DELETE 문, UPDATE 문  (0) 2016.08.24
keywork BETWEEN, IN  (0) 2016.08.15
Basic  (0) 2016.07.31
SQL 데이터 조작문 - 데이터 삽입  (0) 2014.09.08
SQL 데이터 조작문 - 데이터 갱신  (0) 2014.09.08
Posted by scii
:

내가 지정한 Root 디렉토리에서 모든 하위 디렉토리를 순회하며, 파일중 심볼릭 링크 파일이 존재하는 디렉토리에 명시된 파일은 지우고 심볼릭 링크를 거는 스크립트를 작성해야했다. 

Python으로 할까했지만, Bash Shell도 재귀함수를 지원하여 Bash Shell로 작성하였다. 

symlink.sh


터미널에서 

$ symlink.sh `pwd`

명령을 실행하면, 현재 디렉토리의 모든 하위 디렉토리를 순회하며 명령을 실행한다.

 

'Programming > Bash Shell Script' 카테고리의 다른 글

Bash Shell  (0) 2015.02.11
터미널 언어셋 설정  (0) 2015.02.11
Posted by scii
:

[REGEX] Substitude

Programming/Python 2016. 10. 9. 22:24 |

sub 메서드를 이용하면 정규식과 매치되는 부분을 다른 문자로 쉽게 바꿀 수 있다.


sub 메서드의 첫 번째 입력 인수는 "바꿀 문자열"이 되고, 두 번째 입력 인수는 "대상 문자열"이 된다. 

바꾸기 횟수를 제어하려면 다음과 같은 세 번째 입력 인수로 count값을 넘기면 된다.

comp.sub('colour', 'blue socks and red shoes', count=1)


subn 역시 sub와 동일한 기능을 하지만 리턴되는 결과를 튜플로 리턴한다는 차이가 있다. 리턴된 튜플의 첫 번째 요소는 변경된 문자열이고, 두 번째 요소는 바꾸기가 발생한 횟수이다.




sub 메서드 사용 시 참조 구문 사용하기

위 예는 "이름 + 전화번호"의 문자열을 "전화번호 + 이름" 으로 바꾸는 예이다. sub의 바꿀 문자열 부분에 "\g<그룹명> 을 이용하면 정규식의 그룹명을 참조 할 수 있다.

그룹명 대신 참조 번호를 이용해도 마찬가지의 결과가 리턴된다.




sub 메서드의 입력 인수로 함수 넣기

sub 메서드의 첫 번째 입력 인수로 함수를 넣을 수도 있다. 

Dec2Hex 함수는 match 객체(위에서 숫자에 마치되는)를 입력으로 받아 16진수로 변환하여 리턴하는 함수이다. sub의 첫 번째 입력 인수로 함수를 사용할 경우, 해당 함수의 첫 번째 입력 인수에는 정규식과 매치된 match 객체가 입력된다. 그리고 매치되는 문자열은 함수의 리턴 값으로 바뀌게 된다.




Example

전화번호의 마지막 숫자 4개를 #으로 변경하는 예제


'Programming > Python' 카테고리의 다른 글

[REGEX] 전방 탐색 (Lookahead Assertions), 후방 탐색  (0) 2016.10.08
[REGEX] 그룹 재활용  (0) 2016.10.08
Python Function : any(), all()  (0) 2014.09.15
이진 트리  (0) 2013.05.31
bisect Module  (0) 2013.05.17
Posted by scii
:

정규식 .+: 과 일치하는 문자열로 http: 가 리턴되었다. 만약 http:라는 검색 결과에서 : 을 제외하고 출력하려면 어떻게 해야할까?

위 예는 그나마 간단하지만 훨씩 복잡한 정규식이어서 그룹핑은 추가로 할 수 없다는 조건까지 더해진다면 어떻게 해야 할까?

이럴 때 사용할 수 있는 것이 바로 전방 탐색이다.


전방 탐색에는 긍정(Positive)과 부정(Negative)의 2종류가 있다.

(?=...)   긍정형 전방 탐색   -   ...에 해당되는 정규식과 매치되어야 하며, 조건이 통과되어도 문자열이 소모되지 않는다.

(?!...)   부정형 전방 탐색   -   ...에 해당되는 정규식과 매치되지 않아야 하며, 조건이 통과되어도 문자열이 소모되지 않는다.


긍정형 전방 탐색

정규식 중 :에 해당하는 부분에 긍정형 전방 탐색 기법이 적용되어 (?=:)으로 변경되었다. 이렇게 되면 기존 정규식과 검색에서는 동일한 효과를 발휘하지만 :에 대당되는 문자열이 정규식 엔진에 의해 소모되지 않아(검색에는 포함되지만 검색 결과에는 제외됨) 검색 결과에서는 :이 제거된 후 리턴되는 효과가 있다.



.*[.].*$

이 정규식은 파일명 + . + 확장자를 나타내는 정규식이다. 이 정규식은 foo.bar,  autoexec.bat, sendmail.cf 같은 형식의 파일과 매치될 것이다. 이제 이 정규식에 "확장자가 bat인 파일은 제외해야 한다."는 조건을 추가해 보자. 가장 먼저 생각할 수 있는 정규식은 다음과 같을 것이다.

.*[.][^b].*$

이 정규식은 확장자가 b라는 문자로 시작하면 안 된다는 의미이다. 하지만 이 정규식은 foo.bar라는 파일마저 걸러내 버린다. 정규식을 다음과 같이 수정해보자.

.*[.]([^b]..|.[^a].|..[^t])$

이 정규식은 | 메타 문자를 사용하여 확장자의 첫 번째 문자가 b가 아니거나 두 번째 문자가 a가 아니거나 세 번째 문자가 t가 아닌 경우를 의미한다. 이 정규식에 의하여 foo.bar는 제외되지 않고 autoexec.bat은 제외되어 만족스러운 결과를 리턴한다. 하지만 이 정규식은 아쉽게도 sendmail.cf처럼 확장자의 문자 개수가 2개인 케이스를 포함하지 못 하는 오동작을 하기 시작한다.

위의 것을 다음과 같이 바꾸어야 한다.

.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$

확장자의 문자 개수가 2개여도 통과되는 정규식이 만들어졌다. 하지만 정규식은 점점 더 복잡해지고 이해하기 어려워진다.

그런데 여기서 bat 파일말고 exe파일도 제외하라는 조건이 추가로 생긴다면 어떻게 될까? 이 모든 조건을 만족하는 정규식을 구현하려면 패턴은 더욱 더 복잡해져야만 할 것이다.


부정형 전방 탐색

이러한 상황의 구원 투수는 바로 부정형 전방 탐색이다. 위 케이스는 부정형 전방 탐색을 사용하면 다음과 같이 간단하게 처리된다.

.*[.](?!bat$).*$

확장자가 bat가 아닌 경우에만 통과된다는 의미이다. bat라는 문자열이 있는지 조사하는 과정에서 문자열이 소모되지 않으므로 bat가 아니라고 판단되면 그 이후 정규식 매칭이 진행된다.


exe 역시 제외하라는 조건이 추가되더라도 다음과 같이 간단히 표현할 수 있다.

.*[.](?!bat$|exe$).*$




Example

긍정형 전방 탐색으로 .com, .net 이 아닌 것을 걸러내는 예제


'Programming > Python' 카테고리의 다른 글

[REGEX] Substitude  (0) 2016.10.09
[REGEX] 그룹 재활용  (0) 2016.10.08
Python Function : any(), all()  (0) 2014.09.15
이진 트리  (0) 2013.05.31
bisect Module  (0) 2013.05.17
Posted by scii
:

그룹 재활용


'Programming > Python' 카테고리의 다른 글

[REGEX] Substitude  (0) 2016.10.09
[REGEX] 전방 탐색 (Lookahead Assertions), 후방 탐색  (0) 2016.10.08
Python Function : any(), all()  (0) 2014.09.15
이진 트리  (0) 2013.05.31
bisect Module  (0) 2013.05.17
Posted by scii
:

CentOS 기준으로 쓴다.


~/.ideavimrc


set visualbell

set noerrorbells


이렇게 저장하고 에디터 재시작하면, 비프음 소리가 나지 않는다.!!!

'Programming > etc' 카테고리의 다른 글

[PyCharm] external tools Settings  (0) 2016.04.13
vim-go  (0) 2016.03.02
[Linux] qtcreator 와 python 연결  (0) 2016.02.23
[Linux] Python Virtual Env Setup  (0) 2016.02.20
[CentOS] go language setup  (0) 2016.02.20
Posted by scii
:

delete 규칙

- 한 열이나 여러 열의 값을 지우는 데에 delete를 사용할 수 없다.

- where 절에 따라 한 행이나 여러 행들을 지울 수 있다.


ex) DELETE FROM your_table

-> 이렇게하면 테이블의 모든 행이 지워진다.


ex) DELETE FROM your_table WHERE act='aa';

-> your_table의 act값이 aa면 그 행이 지워진다.



update 규칙

- 한 열 또는 열들의 값을 변경하는 데 update를 사용할 수 있다.

ex) UPDATE your_table SET first_column = 'newvalue', second_column = 'another_value';

- where 절에 따라 한 행 또는 여러 행을 변경하는 데에 update를 사용할 수 있다.

'Programming > DataBase' 카테고리의 다른 글

[MAC] MariaDB 설치  (0) 2018.07.08
keywork BETWEEN, IN  (0) 2016.08.15
Basic  (0) 2016.07.31
SQL 데이터 조작문 - 데이터 삽입  (0) 2014.09.08
SQL 데이터 조작문 - 데이터 갱신  (0) 2014.09.08
Posted by scii
:

BETWEEN은 < 와 > 이 아니고, <= 와 >= 기호를 사용하는 것과 같다.

ex) SELECT dname from dinfo WHERE calo BETWEEN 30 and 60;

ex) SELECT dname from dinfo WHERE calo >= 30 and calo <= 60; 이 두개의 명령은 같다.


OR를 여러 개 쓰지 말고, IN 이라는 키워드를 사용해서 쿼리를 간단하게 할 수 있다. 

IN 을 괄호 안에 여러 값과 함께 사용하여 열의 값이 괄호 안의 값들 중 하나와 일치하면 그 행 또는 지정된 열들이 반환된다.

즉, python의 in 키워드와 같다.

ex) SELECT dname from bbok WHERE ratio IN ('inno', 'fabul', 'del', 'pre');

ex) SELECT dname from bbok WHERE ratio='inno' or ratio='fabul' or ratio='del' or ratio='pre'; 이 두개의 명령은 같다.

IN 키워드 앞에 NOT을 붙이면 반전된다.

'Programming > DataBase' 카테고리의 다른 글

[MAC] MariaDB 설치  (0) 2018.07.08
DELETE 문, UPDATE 문  (0) 2016.08.24
Basic  (0) 2016.07.31
SQL 데이터 조작문 - 데이터 삽입  (0) 2014.09.08
SQL 데이터 조작문 - 데이터 갱신  (0) 2014.09.08
Posted by scii
: