반응형

한글이 모두 ???로 나오는 문제가 발생했습니다. 메뉴나 저장소의 파일에 있는 한글들은 이상이 없었지만 DB에서 꺼내온 이슈종류의 이름이나 저장소의 커밋 메시지에 있는 한글의 경우는 모두 ???로 나타났는데 다른 인코딩 설정으로 해결이 안되는 것으로 보아 MySQL의 인코딩이 맞지 않는 문제로 보였습니다. 

MySQL에 접속(sudo mysql -p)하여 MySQL에서 캐릭터셋에 대해서 조회(show variables like 'c%';)를 해보면 아래와 같이 latin1으로 나타납니다. MySQL같은 경우는 기본적으로 latin1 캐릭터셋을 사용하도록 설치가 되더군요.(이유까진 잘 모르겠습니다.)






Redmine의 디비설정 파일인 /etc/redmine/default/database.yml 에 encoding을 UTF-8로 설정을 해놓았기 때문에 MySQL의 인코딩 타입과 맞지 않아서 발생한 문제인듯 합니다. MySQL의 인코딩인 latin1으로 맞출수도 있지만 장기적으로 생각해 보았을 때는 이왕 해결할 때 UTF-8로 맞추는 것이 더 나은 해결책으로 생각되었습니다. 인코딩을 맞춰주기 위해서 일단 MySQL의 인코딩을 UTF-8로 맞추어 주어야 합니다. /etc/mysql/my.cnf 파일에서(OS에 따라 my.ini일수도 있습니다.) 각 부분에 아래의 내용을 추가해 줍니다. my.cnf에 이미 다른 설정들이 있으므로 각 부분에 맞게 추가해 주기만 하면 됩니다.

[client] 
default-character-set=utf8
 
[mysqld] 
init_connect=SET collation_connection = utf8_general_ci 
init_connect=SET NAMES utf8 
default-character-set=utf8 
character-set-server=utf8 
collation-server=utf8_general_ci
 
[mysql] 
default-character-set=utf8


이렇게 설정하면 이제 MySQL에 관련된 캐릭터셋은 UTF-8을 사용하지만 이미 latin1으로 생성된 디비는 바꿀수가 없기 때문에 삭제후에 다시 생성해야 합니다.(디비명이 redmine이라고 가정하고 이 경우는 데이터가 전혀 없기 때문에 그냥 지우고 다시 생성하였지만 이미 사용하던 데이터가 있을 경우에는 백업하고 복구하여야 합니다. redmine디비를 사용하도록 바꾸고 캐릭터셋을 조회하면 대부분은 UTF-8로 바뀌었지만 데이터베이스 부분은 여전히 latin1로 되어 있는 것을 볼 수 있습니다.)

drop database redmine;
create database redmine COLLATE utf8_general_ci;


이렇게 다시 생성하고 다시 해당 디비의 캐릭터 셋을(use redmine후에 하여야 합니다. 디비마다 설정이 다르기 때문에)을 하면 아래처럼 모두 UTF-8로 된것을 볼 수 있습니다.




이제 UTF-8로 설정된 데이터베이스가 생겼으므로 Redmine에서 사용할 테이블과 기본적인 데이터를 생성해야 합니다. 다행히도 Ruby on Rails에는 migration기능이 들어있기 때문에 Redmine이 설치된 루트에서 아래의 간단한 명령으로 테이블 생성 및 기본데이터를 다시 추가할 수 있습니다.

rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data


이제 redmine디비를 조회해보면 각 테이블및 데이터가 들어간 것을 확인할 수 있고 Redmine페이지에 접속해 보면 아까 깨져서 나오던 한글데이터들이 모두 정상적으로 출력되는 것을 확인할 수 있습니다.


출처: http://blog.outsider.ne.kr/526

반응형

'Tech develop > Linux' 카테고리의 다른 글

Ubuntu MySQL 인코딩 변경(UTF-8)  (0) 2014.11.19
Ubuntu 12.04에서 apache2 + tomcat7 mod_jk 연동처리  (0) 2014.11.17
mysql 백업 및 복구  (0) 2014.11.13
[ubuntu] Mysql 사용자 생성  (0) 2014.11.13
Ubuntu에 mysql설치  (0) 2014.11.13
,
반응형

우선 기존에 존재하는 mysql 설정파일을 백업해둔다.

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.orig


이후 vim으로 해당파일을 열어 [mysqld]아래에 내용을 추가한다.

vim /etc/mysql/my.cnf

1
2
3
4
[mysqld]
character-set-client-handshake=FALSE
collation-server=utf8_general_ci
character-set-server=utf8


이후 재시작

/etc/init.d/mysql restart


출처: http://j4ckp4rd.tistory.com/60

반응형
,
반응형

1. 아파치 및 톰캣 설치

톰켓 설치

sudo apt-get install apache2


설치 후 테스트  http://localhost/

톰켓 설치

sudo apt-get install tomcat7
sudo apt-get install tomcat7-admin


톰켓 테스트를 위한 폴더 및 파일 생성

cd /var/lib/tomcat7/webapps
sudo mkdir tomcat-demo
sudo mkdir tomcat-demo/helloworld
sudo vim tomcat-demo/helloworld/index.jsp


아래 코드 복사

<HTML>
 <HEAD>
  <TITLE>Hello World</TITLE>
 </HEAD>
 <BODY>
  <H1>Hello World</H1>
  Today is: <%= new java.util.Date().toString() %>
 </BODY>
</HTML>

설치 후 테스트 

http://localhost:8080/tomcat-demo/helloworld/ 

2. mod_jk 설치 및 설정

sudo apt-get install libapache2-mod-jk


server.xml 설정 (나중에 연동 후에는 8080 포트 구문을 주석처리 해줘도 된다.)

sudo vim /etc/tomcat7/server.xml


아래 라인의 주석 해제

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

아파치 워커 파일(workers.properties) 생성


sudo vim /etc/apache2/workers.properties


아래 코드를 복사하여 넣어준다

# Define 1 real worker using ajp13 
worker.list=worker1 
# Set properties for worker (ajp13) 
worker.worker1.type=ajp13 
worker.worker1.host=localhost
worker.worker1.port=8009

아파치 워커 파일 설정

sudo vim /etc/apache2/mods-available/jk.conf


JkWorkersFile 설정 경로 정보를 아래 라인으로 변경한다

/etc/apache2/workers.properties

 
마지막으로 적용할 톰캣 URL 설정

sudo vim /etc/apache2/sites-enabled/000-default


아래 라인을 추가해 준다

<VirtualHost *:80>
.......................................
.......................................
JkMount /tomcat-demo* worker1
</VirtualHost *:80>

이제 톰캣, 아파치 서버를 재기동 한다

sudo /etc/init.d/tomcat7 restart
sudo /etc/init.d/apache2 restart


연동 테스트
http://localhost/tomcat-demo/helloworld/ 

8080포트 접속을 통한 테스트
http://localhost:8080/tomcat-demo/helloworld/


mod_jk 로그 보기

tail -f /var/log/apache2/mod_jk.log



출처: http://wonsama.tistory.com/383

반응형

'Tech develop > Linux' 카테고리의 다른 글

MySQL인코딩 문제로 한글이 깨져서 나올 때  (0) 2014.11.25
Ubuntu MySQL 인코딩 변경(UTF-8)  (0) 2014.11.19
mysql 백업 및 복구  (0) 2014.11.13
[ubuntu] Mysql 사용자 생성  (0) 2014.11.13
Ubuntu에 mysql설치  (0) 2014.11.13
,
반응형

* 이 글에서는 mysqldump를 이용한 논리적 백업 과 복원을 위한 내용을 위주로 정리한다. (물리적 백업은 전문 DBA에게 부탁하는게 정신건강에 좋을 것 같다.)

백업
MySQL 데이터를 백업하는 방법은 크게 물리적 백업과 논리적 백업이 있다. 

1. 물리적 백업
 - 물리적 백업은 MySQL DB의 물리 파일을 백업하는 것이다. 
 - 장점 
  + 물리적 백업은 속도가 빠르며 작업이 단순하다.
 - 단점
  + InnoDB의 물리적 파일은 상응하는 논리 백업에 비해 상당히 크다.
  + 데이터 복구시에 문제가 발생할 소지가 있으면 문제발생시 원인파악 및 해결이 어렵다.

2. 논리적 백업
 - 논리적 백업은 mysqldump 혹은 기타 툴을 이용해서 SQL문을 갖는 텍스트 파일을 생성하는 것이다. 
 - 장점 
  + 논리적 백업은 데이터를 검토할 수 있다.
  + 복원작업이 수월하며, 물리적 백업에 비해 복원시 데이터 손상을 막아주며, 문제 발생시 원인 파악및 해결하기가 수월하다. 
 - 단점
  + 백업/복원시 시스템 리소스를 더 많이 소모한다. (물리적 백업은 파일 copy만 하면 되니까!!!)
  + 부동 소수점 데이터의 백업&복원시 데이터 정확성을 잃게 될 수 있다.

3. mysqldump 사용법
 $ mysqldump -u[userId] -p[password] --all-databases > dump.sql  // 서버에 있는 모든 것의 논리 백업 생성
 $ mysqldump -u[userId] -p[password] --databases [DB명] > dump.sql // 특정 데이터베이스만의 논리 백업 생성
 $ mysqldump -u[userId] -p[password] [DB명] [테이블명]

 
- 기타 옵션
   -A, --all-databases : 모든 DB 덤프
   -B, --databases : 특정 DB를 덤프

   --opt : 버퍼링을 비확성화 하고, 많은 데이터를 덤프에 있는 소량의 SQL구문에 기록해 더효율적으로 동작하다록 한다.
   --allow-keywords, --quote-names : 예약어를 사용하는 테이블을 덤프하고 복원할 수 있게 한다.
   --lock-alltables : 전역적으로 일관된 백업을 만들도록 "FLUSH TABLES WITH READ LOCK"을 사용한다. 
   --tab : "SELECT INTO OUTFILE"로 파일을 덤프하여, 덤프 및 복원 속도가 매우 빠르다.
   -d, --no-data :  데이터는 제외하고 스키마만 덤프
   -t, --no-create-info : 스키마는 제외하고 

4. dump 파일 복원 방법
 - mysql -u [userId] -p [password] [DB명] < dump.sql
 - mysql 접속한 후 아래의 명령 실행
     mysql> source dump.sql


출처: http://dimdim.tistory.com/entry/MySQL-%EB%B0%B1%EC%97%85-%EB%B0%8F-%EB%B3%B5%EA%B5%AC


반응형
,
반응형

오늘은 mysql 설치시 사용자를 추가하는 방법에 대해 남겨볼까 한다. 할때마다 잘 기억이 안나서 검색엔진에 항상 의존을 하게 되는데 다음에는 검색엔진에 의존하지 않고 바로 블로그에서 검색해서 보면 좋을 듯 하다. 


사용자를 생성하는 방법은 여러가지가 있는데 아래 방법이 가장 쉽고 심플하다. 다른 방법들은 쿼리문을 직접 던져야 하기 때문에 솔직히 말해서 좀 불편하다. 혹시나 오랜만에 해 보거나 처음해 보는 사람들을 위해서 서버에 mysql을 설치한 후 mysql에 로그인한 후 아래 명령를 실행시켜준다.


-  mysql 서버 로그인하기

 $ mysql -uroot -prootpassword mysql


- 다른 PC에서 mysql 서버로 접속을 하기 위한 사용자 추가

 mysql> create user 'userId'@'%' identified by 'userpassword';


- 위 사용자에게 모든 것을 할 수 있는 권한 주기

mysql> grant all privileges on *.* to 'userid'@'%';


- 위 사용자에게 특정 DB를 관리할수 있는 권한 주기

 mysql> grant all privileges on dbname.* to 'userid'@'%';


- 로컬PC에서 mysql로 접속하기 위한 사용자 추가

 mysql> create user 'userId'@'localhost' identified by 'userpassword';


- 위 사용자에게 모든 것을 할 수 있는 권한 주기

 mysql> grant all privileges on *.* to 'userid'@'localhost';


- 위 사용자에게 특정 DB를 관리할 수 있는 권한 주기

 mysql> grant all privileges on dbname.* to 'userid'@'localhost';



대부분 사용자를 생성하고 권한을 줄때는 특정 DB를 관리하는 계정을 따로 만들기 위해서이다. 그러므로 사용자를 생성하고 권한을 줄때는 특정 DB를 관리할 수 있는 권한만 주면 된다.


출처: http://naleejang.tistory.com/59

반응형
,
반응형

Ubuntu에 설치 및 실행

sudo apt-get install mysql-server

설치 중 root(MySQL의)의 암호를 입력(잘 기억해야 한다)

설치 확인 sudo netstat -tap | grep mysql

재 시작하기 sudo /etc/init.d/mysql restart

종료 mysql stop

시작 mysql -u root -p



외부에서 접속하기

mysql은 기본 설치한 상태에서는 외부에서 접속할 수 없다.!!!

방법 http://valley.egloos.com/viewer/?url=http://devxpert.egloos.com/1017656 참고 했음

권한 설정

prompt> mysql -u root -p

prompt> use mysql;

prompt> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'password';

prompt> flush privileges;

*.* =>데이터베이스명.테이블명

root => 계정명

password => 계정의 패스워드

flush privileges; => 서버에 권한이 변경되었음을 알리고 즉시 반영되도록


mysql 재시작

sudo /etc/init.d/mysql restart



mysql GUI Tool

오라클에서 제공하는 Workbench 라는 괜춘한 툴이 있다.

리눅스, Mac OS, Windows를 지원한다(아마 자바 설치가 필요할 듯).

다운로드 http://dev.mysql.com/downloads/mirror.php?id=412167

사용 방법 http://blog.naver.com/doblhead/80191288595


출처: http://jacking.tistory.com/1116

반응형
,