고가용성(HA) : 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질로
고(高)가용성이란 "가용성이 높다"는 뜻으로서, "절대 고장 나지 않음"을 의미한다.
고가용성은 흔히 가용한 시간의 비율을 99%, 99.9% 등과 같은 퍼센티지로 표현하는데, 1년에 계획 된 것 제외 5분 15초 이하의 장애시간을 허용한다는 의미의 파이브 나인스(5 nines), 즉 99.999%는 매우 높은 수준으로 고품질의 데이터센터에서 목표로 한다고 알려져 있다.
하나의 정보 시스템에 고가용성이 요구된다면, 그 시스템의 모든 부품과 구성 요소들은 미리 잘 설계되어야 하며, 실제로 사용되기 전에 완전하게 시험되어야 한다.
고가용성 솔루션(HACMP)을 이용하면, 각 시스템 간에 공유 디스크를 중심으로 집단화하여 클러스터로 엮어지게 만들 수 있다. 동시에 다수의 시스템을 클러스터로 연결할 수 있지만 주로 2개의 서버를 연결하는 방식을 많이 사용한다. 만약 클러스터로 묶인 2개의 서버 중 1대의 서버에서 장애가 발생할 경우, 다른 서버가 즉시 그 업무를 대신 수행하므로, 시스템 장애를 불과 몇 초만에 복구할 수 있다.
위와 같은 목적을 가지고 MySQL에서도 HA구성을 하게 되는데, 대표적으로 MHA(MasterHA)와 MySQL Fabric, MtoM이 있다.
제가 MySQL을 HA로 구성한 방법은 MHA이다.
MySQL Fabric보다 나아서라기보다는 기존의 MySQL 장비에 추가적인 작업 없이 HA를 구성할 수 있었으면 하고
MtoM은 IP에 대한 부분이 IP스위치가 어렵고 MHA는 자동으로 IP가 변경할 수 있기에 MHA로 구성을 해 보았다.
구성은 IP도 할당해야하고 대수도 여러대 필요하기 때문에 AWS에서 테스트를 해보았다.
호스트명 | IP |
bastion_server | 172.31.2.124 |
mha_manager | 172.31.13.97 |
my_master | 172.31.9.88, 172.31.0.79 |
my_slave1 | 172.31.6.249 |
my_slave2 | 172.31.4.175 |
bastion_server는 AWS로 들어가는 진입통로이다. 나는 AWS를 접근할 때 처음 통로를 Bastion_server로 놓고 해당 서버에만
EIP를 주어 접속할 수 있게 해놓았다. 그리고 bastion_server에 pem파일을 올려 모든 서버는 bastion_server를 통해
접근하도록 설정되어 있다.
mha_manager는 모든 my_master의 장애를 모니터링하고 장애시 my_slave2가 master로써 승격되고 my_slave1은 기존 my_master에서 my_slave2에 동기화된다. (bastion_server는 굳이 구성할 때 없어도 되는 서버이다.)
1. 기본 모듈 설치
[manager/master/slave1/slave2]
MHA는 Perl 모듈로 동작하기 때문에 펄 관련 모듈 설치
yum install -y perl-DBD-MySQL yum install -y perl-Config-Tiny yum install -y perl-Params-Validate yum install -y perl-Parallel-ForkManager yum install -y perl-Log-Dispatch yum install -y perl-Time-HiRes yum install -y perl-ExtUtils-MakeMaker yum install -y perl-CPAN
#perl -MCPAN -e "install Config::Tiny" #perl -MCPAN -e "install Log::Dispatch" #perl -MCPAN -e "install Parallel::ForkManager" |
2. MHA 노드 설치
[manager/master/slave/slave2]
https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2/
mha4mysql-node-0.56.tar.gz download
mha4mysql-manager-0.56.tar.gz download
bastion_server 접속
sftp -o IdentityFile=/key_pair/XXXX.pem ec2-user@172.31.9.88 put mha4mysql-node-0.56.tar.gz
sftp -o IdentityFile=/key_pair/XXXX.pem ec2-user@172.31.6.249 put mha4mysql-node-0.56.tar.gz
sftp -o IdentityFile=/key_pair/XXXX.pem ec2-user@172.31.4.175 put mha4mysql-node-0.56.tar.gz
sftp -o IdentityFile=/key_pair/XXXX.pem ec2-user@172.31.13.97 put mha4mysql-node-0.56.tar.gz put mha4mysql-manager-0.56.tar.gz
tar xvzf mha4mysql-node-0.56.tar.gz cd mha4mysql-node-0.56 perl Makefile.PL make make install |
3. MHA 매니저 설치
[manager]
mha_manager서버에 mha4mysql-manager 파일 설치
mkdir /data/mha_manager cd /data/mha_manager tar xvzf mha4mysql-manager-0.56.tar.gz cd mha4mysql-manager-0.56 perl Makefile.PL
make
make install |
4. SSH 설정
[manager/master/slave1/slave2]
모든 IP에 서로 SSH 접근이 가능하도록 추가해준다.
(AWS에서는 security_group에 22번 포트를 열어줌으로써 아래와 같은 작업이 불필요하다.)
vi /etc/hosts.allow
# for MHA sshd: 172.31.2.124,172.31.1.164,172.31.4.134,172.31.4.134,172.31.0.79 |
[master/slave1/slave2]
MHA구성으로 사용한 시스템계정 생성
useradd -g mysql -d /home/mhauser -m -s /bin/bash mhauser cat /etc/passwd | grep mhauser
passwd mhauser 패스워드 설정 |
[manager]
mha_manager 서버에도 시스템계정 생성
groupadd mysql useradd -r -g mysql mysql useradd -g mysql -d /home/mhauser -m -s /bin/bash mhauser cat /etc/passwd | grep mhauser
passwd mhauser |
[manager/master/slave1/slave2]
mhauser에 대한 SSH key파일 설정
su - mhauser ssh-keygen
cat /home/mhauser/.ssh/id_rsa.pub
manager, master, slave1, slave2 서버의 id_rsa.pub 파일을 각각 복사해 서버의 authorized_keys 파일에 붙여 넣는다.
cat /root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+… mhauser@mha_manager ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWqz+… mhauser@my_master ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCaeQE+… mhauser@my_slave1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg6QU… mhauser@my_slave2
|
[manager/master/slave/slave2]
해당 서버에 SSH 접속을 원활하게 하기 위해 /etc/hosts파일에 아래와 같이 내용을 추가한다.
그리고 .ssh 디렉토리 내의 파일에 대한 모든 권한을 변경한다.
(root계정으로 실행)
vi /etc/hosts
cd .ssh/ chmod 600 * |
접속테스트(mhauser로 접속한 상태에서 테스트)
각 서버마다 접속해서 아래와 같이 전부 접속 테스트를 해준다.
ssh 172.31.2.124 hostname ssh 172.31.13.97 hostname ssh 172.31.9.88 hostname ssh 172.31.0.79 hostname ssh 172.31.6.249 hostname ssh 172.31.4.175 hostname |
아래와 같은 메시지가 나오면 yes를 누른다.
다음에 실행 시, 해당 IP 호스트명만 출력된다.
[mhauser@my_slave2 .ssh]$ ssh 172.31.4.175 hostname The authenticity of host '172.31.4.175 (172.31.4.175)' can't be established. ECDSA key fingerprint is 49:c7:ae:1c:90:1a:b1:a1:d1. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.31.4.175' (ECDSA) to the list of known hosts. my_slave2 [mhauser@my_slave2 .ssh]$ ssh 172.31.4.175 hostname my_slave2 |
[master/slave1/slave2]
sudo 권한에 변경작업을 해준다.
root계정 접속
visudo
|
[master]
my_master 서버에 서비스로 쓰이는 IP 하나를 할당해준다.
vip 할당 ifconfig eth0:0 172.31.0.79 netmask 255.255.0.0 broadcast 172.31.0.255 up |
5. DB접속 계정 생성
[master/slave1/slave2]
MHA 매니저 서버(배스천)에서는 모든 DB서버의 MySQL에 접속할 수 있어야 한다.
/mysql/bin/mysql -uroot -p grant all on *.* to mhauser@'172.31.2.124' identified by 'XXXXXXXX'; grant all on *.* to mhauser@'172.31.13.97' identified by 'XXXXXXXX'; grant all on *.* to mhauser@'172.31.0.79' identified by 'XXXXXXXX'; grant all on *.* to mhauser@'172.31.9.88' identified by 'XXXXXXXX'; grant all on *.* to mhauser@'172.31.6.249' identified by 'XXXXXXXX'; grant all on *.* to mhauser@'172.31.4.175' identified by 'XXXXXXXX'; |
[master/slave2]
master의 repl 계정 권한을 마스터 대체서버(slave2)에도 동일하게 적용
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'172.31.6.249' IDENTIFIED BY PASSWORD 'XXXXXXXX'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'172.31.4.175' IDENTIFIED BY PASSWORD 'XXXXXXXX'; flush privileges; |
6. MHA 설정
* master 대체 slave서버의 주의사항
- mysqlbinlog 버전이 5.1이상이어야 한다. master의 binlog가 row 포맷이면 mysqlbinlog 5.1부터는
분석이 가능하다. 만약 5.1보다 낮으면 동기화시 row포맷을 사용해서는 안된다.
- DB서버의 binlog에 접근할 수 있게 디렉토리 권한을 설정해야 한다.
(저는 mhauser를 mysql 그룹으로 묶어서 mysql이 접근가능한 디렉토리는 mhauser도 접근 가능하게 하였다.)
- 새로운 master가 될 slave에 binlog가 횔성화 되어 있어야 한다.(log-bin)
(저는 log-bin 뿐만 아니라 log-bin=경로/파일명 이렇게하여 마스터와 동일한 경로와 파일명이 생기도록 하였다.)
- binlog와 relay log의 필터 규칙이 모든 MySQL DB군에서 동일해야 한다.
즉, binlog에 대해 binlog-db-db나 replicate-ignore-db와 같은 필터 규칙이 정의되어 있다면 모든 MySQL은
동일하게 해줘야 한다.
- 새로운 master가 될 slave에 read_only로 읽기 전용으로만 해두는 것이 나중에 교체시 문제를 최소화 시킬 수 있다.
[manager]
MHA를 사용하기 위한 디렉토리 생성
mkdir /data/mha_log ## mha 로그파일 저장 mkdir /data/mha_app ## mha 실행시 failover 프로그램 저장 mkdir /data/mha_scripts ## mha 스크립트 저장 chown mhauser:mysql /data/mha_log chown mhauser:mysql /data/mha_app chown mhauser:mysql /data/mha_scripts |
7. MHA 매니저 서버 설정파일
* 싱글모드로 설정하여 테스트를 진행하였다.
1) 싱글모드
vi /etc/mha-manager.cnf
[server default] user=mhauser password=XXXXXXXX repl_user=repl repl_password=XXXXXXXX
## mha manager 실행파일이 생길 폴더 지정 manager_workdir=/data/mha_app ## 로그파일 지정 manager_log=/data/mha_log/mha4mysql.log
## mysql서버에 실행파일이 생길 폴더 지정 remote_workdir=/data/mha_app ## binlog 파일 폴더 지정 master_binlog_dir=/mysql/var
## mysql서버의 mysql 실행파일 폴더 지정 client_bindir=/mysql/bin ## mysql서버의 mysql 라이브러리가 저장되어 있는 폴더 지정 client_libdir=/mysql/lib ignore_fail=2
[server1] hostname = 172.31.9.88 ## my_master ip candidate_master=1
[server2] hostname = 172.31.4.175 ## replace slave2 ip candidate_master=1
[server3] hostname = 172.31.6.249 ## slave1 ip no_master=1 |
2) 다중모드
[manager]
vi /etc/mha-manager.cnf
[server default] user=mhauser password=XXXXXXXX ssh_user=mhauser
master_binlog_dir=/mysql/var remote_workdir=/data/mha_app secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2 ping_interval=3 master_ip_failover_script=/data/mha_script/master_ip_failover shutdown_script=/data/mha_script/power_manager report_script=/data/mha_script/send_master_failover_mail |
vi /etc/my_master.cnf
[server_default] manager_workdir=/data/mha_app manager_log=/data/mha_log/mha4mysql.log
[server1] hostname = 172.31.9.88 ## my_master ip candidate_master=1
[server2] hostname = 172.31.4.175 ## replace slave2 ip candidate_master=1
[server3] hostname = 172.31.6.249 ## slave1 ip no_master=1 |
[master]
할당된 IP 설정을 확인한다.
ifconfig
|
* 비활성화
ifconfig eth0:0 172.31.0.79 netmask 255.255.0.0 broadcast 172.31.0.255 down
8. MHA모니터링 시작하기
mha 기동
cd /data/mha4mysql-manager-0.56/bin nohup masterha_manager --conf=/etc/mha-manager.cnf < /dev/null > /data/mha_log/mha4mysql.log 2>&1 & |
* 중단
/data/mha/mha4mysql-manager-0.56/bin/masterha_stop --conf=/etc/mha_manager.cnf
masterha_check_status로 masterha_manager 모니터링
./masterha_check_status --conf=/etc/mha-manager.cnf
|
ssh접속이 정상적으로 이루어지는지 확인
masterha_check_ssh --conf=/etc/mha-manager.cnf
|
리플리케이션 상태 모니터링
./masterha_check_repl --conf=/etc/mha-manager.cnf
|
* 호스트 정보 관리(IP추가)
./masterha_conf_host --command=add --conf=/etc/mha-manager.cnf --hostname=XXX.XXX.XXX.XXX
옵션 : --command=(add/delete)
[slave2]
slave2에 릴레이로그는 mysql 설치시 적용후 자동삭제하게 되어 있다.
master 대체 서버이기 때문에 릴레이로그를 purge하는 것을 중단하고 크론탭에 새벽에 자동 삭제할 수
있게 걸어 놓는다.
/mysql/bin/mysql -uroot -p set global relay_log_purge=0 릴레이로그 삭제 설정 vi /etc/crontab
|
9. 스크립트 생성
1) 스위치오버 시 vip도 자동으로 스위치 오버하는 스크립트 생성(root계정으로 실행)
cd /data/mha4mysql-manager-0.56/samples/scripts cp master_ip_online_change master_ip_online_change.org chown mhauser:mysql master_ip_online_change vi master_ip_online_change
cd /data/mha_scripts/ vi change_virtual_ip_master_to_slave.sh
vi change_virtual_ip_slave_to_master.sh
vi /etc/mha-manager.cnf
|
2) 페일오버 시 vip도 자동으로 페일오버하는 스크립트
cd /data/mha4mysql-manager-0.56/samples/scripts cp master_ip_failover /data/mha_scripts/ cd /data/mha_scripts/ chown mhauser:mysql master_ip_failover
vi master_ip_failover
vi change_virtual_ip.sh
vi /etc/mha-manager.cnf
cd /data/mha_scripts chown mhauser:mysql *
|
10. 테스트
1) 상태확인
[master]
my_master 서버는 read 전용이 아니며 아래와 같은 master 상태값을 가지고 있다.
mysql> show variables like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | OFF | +---------------+-------+ 1 row in set (0.01 sec)
mysql> show master status; +------------------+----------+--------------+--------------------------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------------------------------+-------------------+ | mysql-bin.000004 | 120 | | mysql,test,information_schema,performance_schema | | +------------------+----------+--------------+--------------------------------------------------+-------------------+ 1 row in set (0.00 sec)
ifconfig
|
[slave1]
my_slave1은 현재 my_master(172.31.9.88)을 master로써 동기화하고 있다.
mysql> show slave status \G; Slave_IO_State: Waiting for master to send event Master_Host: 172.31.9.88 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 120 Relay_Log_File: my_slave1-relay-bin.000009 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 120 Relay_Log_Space: 623 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 88 Master_UUID: b3146e4b-d3e3-11e6-b88d-028ca261c841 Master_Info_File: /mysql/var/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 |
[slave2]
my_slave2는 my_master 대체 슬레이브로써 읽기 전용으로만 사용되고 있고 172.31.9.88(my_master)와 동기화 되어 있다.
mysql> show variables like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec)
mysql> show slave status \G; Slave_IO_State: Waiting for master to send event Master_Host: 172.31.9.88 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 120 Relay_Log_File: my_slave2-relay-bin.000006 Relay_Log_Pos: 236 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 120 Relay_Log_Space: 576 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 88 Master_UUID: b3146e4b-d3e3-11e6-b88d-028ca261c841 Master_Info_File: /mysql/var/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 |
[manager]
mha_manager 기동하여 위의 모든 서버들을 모니터링하게 한다.
su - mhauser cd /data/mha4mysql-manager-0.56/bin/ nohup masterha_manager --conf=/etc/mha-manager.cnf < /dev/null > /data/mha_log/mha4mysql.log 2>&1 & |
[master]
my_master서버에서 mysql를 kill하여 장애를 발생시킨다.
mysql kill ps -ef | grep mysql kill -9 22009 22921 |
위와 같이 할 경우, mha_manager서버의 /data/mha_log/mha4mysql.log파일에 마스터와 슬레이브가
스위칭 되는 로그가 남는다.
마지막에 failover report까지 나오면 스위칭이 완료된다.
ifconfig
eth0 Link encap:Ethernet HWaddr 02:8C:A2:61:C8:41 inet addr:172.31.9.88 Bcast:172.31.15.255 Mask:255.255.240.0 inet6 addr: fe80::8c:a2ff:fe61:c841/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:116549 errors:0 dropped:0 overruns:0 frame:0 TX packets:85789 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:113678944 (108.4 MiB) TX bytes:12379793 (11.8 MiB)
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:138 errors:0 dropped:0 overruns:0 frame:0 TX packets:138 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:27398 (26.7 KiB) TX bytes:27398 (26.7 KiB) |
[slave2]
마스터에 있던 IP정보가 my_slave2 서버에 옮겨진 것을 확인할 수 있다.
ifconfig
|
[slave1]
slave 상태를 확인하면 my_slave1 서버가 동기화하는 master IP가 변경된 것을 확인할 수 있다.
show slave status \G;
|
[manager/master/slave/slave2]
mha_manager은 이렇게 IP와 동기화 되는 부분을 자동으로 변경하고 중지된다.
/data/mha_app를 삭제하지 않으면 mha_manager 기동 시 에러가 발생한다.
rm -f /data/mha_app/*
* MHA 구성시 에러사항 정리
Mon Jan 9 04:24:20 2017 - [error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln177] Got Error on finalize_on_error at monitor: Permission denied:/data/mha_app/mha-manager.master_status.health at /usr/local/share/perl5/MHA/MasterMonitor.pm line 633. |
chown mhauser.mysql mha_app
chown mhauser.mysql mha_scripts
Mon Jan 9 04:29:26 2017 - [error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln122] Got error when getting node version. Error: Mon Jan 9 04:29:26 2017 - [error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln123] |
mysql에 mha4node가 설치되어 있지 않았다.
Mon Jan 9 05:28:53 2017 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln158] Binlog setting check failed! Mon Jan 9 05:28:53 2017 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln405] Master configuration failed. Mon Jan 9 05:28:53 2017 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations. at /u sr/local/bin/masterha_manager line 50. Mon Jan 9 05:28:53 2017 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers. Mon Jan 9 05:28:53 2017 - [info] Got exit code 1 (Not master dead). |
mkdir /data/mha_app
chown mhauser.mysql /data/mha_app
'연구개발 > MYSQL' 카테고리의 다른 글
MS-SQL 에서 연결된 서버 (Linked Server )에 MY-SQL DataBase 서버 등록하기 (0) | 2016.07.14 |
---|---|
[Centos] ssh 원격 접속 장애 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!) (0) | 2015.12.22 |
mssql 에서 mysql linked Server 사용하기 (0) | 2015.12.08 |
Couldn't find MySQL server (0) | 2015.11.12 |
형변환 에러시 (0) | 2015.09.04 |