composer 로 PHPMailer를 설치한다.
리눅스 서버에 OpenSSL 확장이 설치 되어있어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php namespace google; require __DIR__.'/../../_composer/vendor/autoload.php'; /** * Class GmailApi * TODO: OpenSSL Extension 이 있는 지 확인할 것. * @package google */ class GmailApi { const FROM = '보내는이'; const FROM_MAIL = 'Gmail주소'; const FROM_PASSWORD = 'GMail비밀번호'; /** * @param $toMail * @param $subject * @param $msg * @return bool * @throws \phpmailerException */ public function send($toMail, $subject, $msg) { $mail = new \PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Host = 'smtp.gmail.com'; $mail->Port = 587; $mail->Username = self::FROM_MAIL; $mail->Password = self::FROM_PASSWORD; $mail->setFrom(self::FROM_MAIL, self::FROM); $mail->addReplyTo(self::FROM_MAIL, self::FROM); $mail->CharSet = 'UTF-8'; $mail->Subject = $subject; $mail->msgHTML($msg); $mail->addAddress($toMail); return $mail->send(); } } | cs |
Gmail 에서 Imap 을 Enable 해야하고
구글계정 설정에서 보안 수준이 낮은 앱의 액세스를 허용해야 이용이 가능함
SMTPSecure = 'ssl', Port = 465 로도 접속 가능하다.
만약 설정에 이상이 없는데 아래 오류가 발생한다면 나와있는 링크를 방문에서 문제를 확인해보면 된다.
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Gmail계정으로 IMAP을 처음 접속하게 되면 별도로 접속허용을 해줘야 이용이 가능한데.
$mail->SMTPDebug = 2; 로 설정하고 송수신되는 내용을 살펴보면
서버에서 https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsb.... 와같은 내용을 수신 받으면서 password faile 이 뜨는 경우가 난다.
서버에서 내려받은 주소를 웹브라우저에 연결해서 작업을 해줘야 하지만 소켓이라 안된다.
해결방법은 Troubleshooting 링크에도 나와있지만 웹브라우저로 사용하려는 gamil 계정에 로그인 한뒤에
https://www.google.com/accounts/DisplayUnlockCaptcha 링크를 방문해서 허용해주면 된다.
boost 같은걸 설치하게 되면 기본적으로 /usr/local/lib 에 설치가 되고 이곳에 설치되는 lib가 제법 된다.
/usr/local/lib 패스는 기본 라이브러리 경로에 포함되지 않기 때문에 컴파일을 할때 .so 파일을 찾지 못하는 경우가 생긴다.
그러니 lib path에 추가를 하자.
Example (/etc/environment) 전체 사용자
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
Example (~/.bashrc) 개별사용자
export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"
GCC 4.7 버전 부터 C++11 을 정식 지원함.
GCC 4.7 설치
wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo -O /etc/yum.repos.d/devtools-1.1.repo
yum install devtoolset-1.1-gcc devtoolset-1.1-gcc-c++ devtoolset-1.1-binutils
GCC 4.7을 기본으로 적용하는 명령
scl enable devtoolset-1.1 bash
------------------------
GCC 4.8 설치
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
GCC 4.8을 기본으로 적용하는 명령
scl enable devtoolset-2 bash
--------------------------
.bashrc 나 .bash_profile 에 아래처럼 enable 스크립트를 적용하도록 하면 됨
source /opt/centos/devtoolset-1.1/enable
아니면
source scl_source enable devtoolset-1.1
export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc
export CPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp
export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++
Prepared Statement 사용 시 “?” 인자가 사용 시에도 캐싱됨
5.1.17에서는 “?”가 포함된 Prepared Statement 결과는 캐싱되지 않음
5.1.17 이전 버전에서는 모든 결과값이 캐싱되지 않음
MySQL shutdown 시에도 포트를 물고 있고 프로세스에는 없는 경우(유령ㅡㅡ;;)
MySQL SLAVE 리플리케이션 중에 mysqladmin 으로 shutdown 시 프로세서도 죽고 socket 파일, pid 파일도 삭제 되었는데도 포트가 그대로 열려있고(사용하는 프로세서는 공백)
telnet localhost 3306 으로 접속하면 정상적으로 mysql에 접속되나 mysql 커맨드 라인은 socket 파일이 없어 접속이 안되는 난감한 경우가 발생함
정확한 원인은 파악되지 않았으나 unix 소켓 프로토콜은 정지 되었으니 tcp 프로토콜이 살아 있는 경우였음.
mysqladmin -uroot -p --port=3306 --protocol=TCP
명령으로 정지시키니 정상적으로 모든 작업이 종료됨
PHP로 password 함수 와 동일한 결과값을 얻을때(old_password아님)
strtoupper('*'.sha1(sha1('문자열', true)));
프로시저/function/트리거등을 백업하고 import 할때 주의할 점
dump 시에는 주석이 저장되나 import 할때 --comments 옵션을 사용하지 않으면 주석은 제거되어 import 되므로 주의할 것.
특정한 페이지에서만 myql connection time을 늘려야 할때 아래쿼리를 날려주면 됨
SET INTERACTIVE_TIMEOUT=86400
프로시저(procedure) exit 하기
begin 앞에 라벨명을 붙이고 LEAVE 라벨명; 하면 해당 블럭을 탈출한다.
1 2 3 4 5 6 7 | CREATE PROCEDURE 프로시저명() 라벨명:BEGIN IF 조건 THEN LEAVE 라벨명; END IF; END$$ | cs |
my.cnf 에 클라이언트쪽 설정
[mysql]
no-auto-rehash ##db변경시 테이블정보를 읽어들이지 않음(자동완성용, 테이블 많을 시 느려짐)
show-warnings ##warning 발생 시 출력
prompt=\\u [\\d]>\\_ ##프롬프트 변경(참고)
my.cnf 에 언어셋
character_set_server = utf8
선언없을 경우 latin1이 기본이 되서 create database하면 latin1 언어셋의 db가 생성된다.
show variables like '%char%'; 하면 character_set_database 가 latin1으로 나오는게 그런 이유인데.
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
해서 변경해주던지 utf8로 새로 생성해야 한다. 꼬이면 귀찮아짐
Root 비밀번호 변경
MySQL 5.7.6 이후
ALTER USER `root`@`localhost` IDENTIFIED BY '비밀번호';
MySQL 5.7.5 이전
SET PASSWORD FOR `root`@`localhost` = PASSWORD('비밀번호');
mysql 로그인 후 You must reset your password using ALTER USER statement before executing this statement 같은 메세지가 뜬다면 아래처럼 최초비번을 다시 변경해줘야 함
SET PASSWORD = PASSWORD('비밀번호');
Your password does not satisfy the current policy requirements 와 같이 비번 설정이 안되는 경우 validate_password 플러그인 때문에 비밀번호 형식에 제한이 생긴다.
my.cnf 에 validate_password = off 로 하면 플러그인을 사용하지 않는다.
레벨만 설정할 경우 validate_password_policy = LOW(기본 8자이상), MEDIUM(숫자/소문자/대문자/특문포함)등으로 설정
기본 SQL-MODE 설정
my.cnf에 sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" 추가
STRICT_TRANS_TABLES = not null 등의 조건을 엄격히 검사
NO_ENGINE_SUBSTITUTION = 잘못된 엔진이거나 엔진정의가 없으면 기본엔진 사용