MySQL 루트 암호 변경

데이터베이스/MySQL 2007/09/01 23:06 posted by zekill
물론 디비에 직접 접속하여 변경도 가능하지만... 어드민툴로도 가능하다...
뭐 편한대로...
위는 로컬 아래는 리모트

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
/usr/bin/mysqladmin -u root -p password \'new-password\'
/usr/bin/mysqladmin -u root -h domain -p password \'new-password\'
2007/09/01 23:06 2007/09/01 23:06
예전에 dbakorea.pe.kr 에서 퍼온듯 한데.....지금은 사이트가 존재하지않는것인지....이상한사이트로 연결이..ㅡㅡ;;

======================================

쉘에서는 mysql이 되는데 PHP에서 mysql.sock error를 내면서 MySQL이 안되는 경우
mysql.sock은 /tmp 아니면 /var/lib/mysql에 생기게 된다.
나의 경우, /var/lib/mysql에 mysql.sock파일이 있는데 PHP에서는 /tmp에서 찾으려하면서 에러를 발생했다.
/usr/bin/safe_mysqld파일에서 다음과 같이 수정한다.
주석(#)이 달린 것이 원래것이고 그 밑에 있는것이 수정한 것이다.

# MYSQL_UNIX_PORT=${MYSQL_UNIX_PORT:-/var/lib/mysql/mysql.sock}
MYSQL_UNIX_PORT=${MYSQL_UNIX_PORT:-/tmp/mysql.sock}

위와 같이 하니 /usr/bin/mysql이 /var/lib/mysql/mysql.sock에서 소켓파일을 찾으려 했다.
socket file을 지정하는 --socket이라는 옵션으로 다음과 같이 지정하면 된다.

mysql --socket=/tmp/mysql.sock -u dbakorea -p db_test

하지만 mysql실행시마다 이렇게 써줘야한다는 것이 상당히 귀찮다. 옵션이 바로 적용되게 설정하자.
mysql은 설정사항을 다음 3가지 파일에서 검색한다.

/etc/my.cnf global options(MySQL 전체적으로 사용되는 옵션 정의)
mysql-data-dir/my.cnf 특정 DB에 적용되는 option (/var/lib/mysql/my.cnf)
~/.my.cnf 사용자 각각의 설정(\'~\'문자는 사용자의 홈디렉토리는 의미)

/usr/share/mysql디렉토리에 예제가 있으므로 참고한다.
소켓파일의 지정은 다음줄을 넣어주면 된다.

socket = /tmp/mysql.sock


== /etc/my.cnf예 ==
# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
2007/09/01 23:06 2007/09/01 23:06
[페이징] 리스트 페이징(6가지) 100만개 테스트 | MS-SQL

다음은 데브피아 이원문 님의 글입니다.

---------------------------------------------------------------------------

제가 어느 페이징이 제일 빠를까.. 고민 하다가.. 테스트로 만들어 보았습니다.
총.. 6가지..입니다..

간단하게 쿼리를 설명해드리겠습니다.

1. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]

  1번 리스트는 이 쿼리 구문을 써서 했고요. 현제 개시물까지 이동을 Rs.Move(이동할수) 로 처리 했습니다.

2. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]    - 1번과 동일

  1번과 쿼리구문은 동이하고요. 레코드셋의 AbsolutePage를 이용해서 페이징을 했습니다.

3. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]

   WHERE [글번호필드] NOT IN (SELECT TOP [제거할 게시물수] [글번호필드] FROM [테이블명])
   예전에 태요 사이트에서 보았던 쿼리 구문입니다.. NOT IN 때문에.. 문제시 되었던 쿼리구문이죠.

4. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
   WHERE [글번호] IN (SELECT TOP [페이지출력 갯수] [글번호] FROM
   (SELECT TOP [불러올 총 게시물수] [글번호] FROM [테이블 명]) AS A ORDER BY [글번호])
   ORDER BY [글번호] DESC

   이 쿼리 구문은 3번의 쿼리 구문의 문제점을 보완한 구문입니다. NOT IN 대신에 IN을 사용 했습니다.

5. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블 명]
   WHERE [글번호] <= (SELECT MIN([글번호])
   FROM (SELECT TOP [제거할 게시물수] + 1 [글번호] FROM [테이블명]) AS A)

   5번째 쿼리 구문은 IN, NOT IN이 아닌 출력할 마지막 글번호 바로 앞이 글번호를 찾아서 처리를 해주는
   쿼리 구문입니다.

6. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블명]
   WHERE [글번호] <= (SELECT MIN([글번호])
   FROM (SELECT TOP [제거할 게시물수] + 1 [글번호]
   FROM [테이블명] WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]) AS A
   WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호])
   AND [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]

   6번재 쿼리는.. 글에 인덱스(가칭)라는 필드를 하나 더 추가 해서.. 글 기본 2000개마다 (가변적입니다)
   인덱스를 증가 시켰습니다. 즉 2000개를 하나의 묶음으로 만든것입니다.
   그 인덱스를 기준으로 처리를 해주었습니다.(기본 개념은 영어 사전 입니다 ㅡㅡ;)


위와 같이 간단한 기본 쿼리 구문을 설명? 했습니다.
게시물은 100만개를 넣고 테스트를 했습니다.
테스트 게시판을 보시려면.. 맨위에 각 게시판을 링크를 걸었습니다.
서버가 구려서.. 제대로 될지 모르지만..
제 노트북
(CPU : p4-1.8, RAM : 768Mb, 컴팩 프리자리오 2820AP, 환경 : 윈도우2003 MSSQL2000)
에서 테스트 해본 봐로는 처음페이지(1), 마지막 페이지(50000) 처리 시간이 아래와 같습니다.(단위 ms)

1 : 320    12289.06
2 : 273    11476.56
3 : 289    4406.25
4 : 289    2695.31
5 : 289    1218.75
6 : 7.81    23.44

엄청난 차이가 나죠??
기본적으로 글번호에 Clustered Index, 인덱스번호, 글깊이에 Non Clustered Index를 걸어 두었습니다.
엄청난 차이로 인해 테스트로 만든 저 또한 입이 쩍 벌어 집니다 ㅡㅡ;;
2007/09/01 23:05 2007/09/01 23:05
[원문] http://okjsp.pe.kr/lecture/siva6/equals.txt 



음....우연히 작업을 하다 나도 모르게 문자열 비교하는곳에  "==" 를
입력했다가.....오류가 나서 한참 찾았다...-0-;;;

또 equals 로 String 을 비교하다가 비교값으로 "비교값" 이 아닌 '비교값' 을 넣었다가
한참 찾았다......
비교값은 문자열이 아니라 문자 였다.
'TEST' 이렇게 했다면 실행도 되지 않고 에러가 나왔을것이다.

그러다 우연찮게 이런 문서를 찾게 되었다..-0-;;;;
이거저거 하다보니 가끔 헷갈려 ㅜㅜ



참고로...

요건 비교값을 int 형으로 반환
int compareTo(String anotherString)
          Compares two strings lexicographically.
int compareToIgnoreCase(String str)
          Compares two strings lexicographically, ignoring case differences.

요건 boolean 형으로 반환
boolean equals(Object anObject)
          Compares this string to the specified object.
boolean equalsIgnoreCase(String anotherString)
          Compares this String to another String, ignoring case considerations

그리고 위 메소드 중 IgnoreCase 이게 붙은 메소드는 대소문자 구분없이 비교하는 메소드이다 -0-//

============================================

[ "==" 과 "equals()" 의 차이점]

     Q&A를 읽다보면, String을 "=="연산자로 비교해서 에러를 발생시키는 경우가 많이
    있었습니다. 그래서, 여기에 대해서 정리를 해보고자 이 글을 작성했습니다. 여기
    쓰여있는 내용은 제 추측과 상상력이 동원되기도 했기 때문에 사실과 차이가 있을
    수도 있습니다. 그런 내용은 바로 알려주세요.

    두개는 어떤 차이가 있을까요?
    간단히 말하면, "=="은 연산자고 "equals()"는 메소드입니다.
    "=="에 대한 정의는 jvm에 있을 것이고,
    "equals()"에 대한 정의는 class에서 되어 있겠죠.

    "=="은 양쪽 항의 값을 비교하는 것입니다.
    "equals()"는 class에서 구현된 것에따라 어떤 처리를 해서 결과를 나타내겠죠..
    (구현에 따라서 다른 결과를 나타낼 수 있습니다.)

    우선, "=="부터 살펴보죠.
    위에서 말했듯이 양항의 값을 비교합니다.
    여기에 대한 설명은 java가 Call by reference 인지 Call by value인지에 대한
    설명이 되어야 하는데 이것은 다음 기회에 설명하겠습니다.(없을지도 모름)

    int i = 10, j = 20;
    의 코드가 실행되었다면,
    i라는 변수는 10이라는 값을 가지게 됩니다.
    물론, j는 20이라는 값을 가지게 됩니다.

    그런데,
    String str0 = "TEST", str1 = "테스트";
    라고 하면,
    str0는 "TEST"라는 객체를 가리키는 참조값을 가지게 됩니다.
    위에서 용어를 다르게 사용했습니다.
    "값을 가진다"와 "참조값을 가진다"
    객체는 직접 접근할 수 없습니다.
    단지, 그 위치를 참조하는 참조값을 가지고 접근하는 것 뿐입니다.

    다시 본론으로가면, "=="은 그 변수가 같은 값을 가지고 있는지만 체크하는 것입니다.
    int i = 10, int j = 20;
    int k = 10;
    String str0 = "TEST", str1 = "테스트";
    String str2 = new String("TEST");
    String str3 = "TEST"
    위의 코드를 수행하면, 메모리에는 다음과 같은 표의 상태가 됩니다.
    --------------------------------------
    |변수명| 변수값      | 실제값        |
    --------------------------------------
    | i    | 10          | (10)          |
    --------------------------------------
    | j    | 20          | (20)          |
    --------------------------------------
    | k    | 10          | (10)          |
    --------------------------------------
    | str0 | 0x3a3...(?) | [String]TEST  |
    --------------------------------------
    | str1 | 0xe1e...(?) | [String]테스트|
    --------------------------------------
    | str2 | 0xe2b...(?) | [String]TEST  |
    --------------------------------------
    | str3 | 0x3a3...(?) | [String]TEST  |
    --------------------------------------
    (변수값의 0x....는 그냥 상상의 숫자입니다. 너무 신경쓰지마세요.)

    그럼, 비교를 해볼까요..
    1.( i == j )  :  false
    2.( i == k )  :  true
    여기까지는 쉽게 이해가 갈 것입니다.
    3.( str0 == str1 ) : false  -> 당연?
    4.( str0 == str2 ) : false
    -> 이게 false인 이유는 "=="은 단지 가지고 있는 값을 비교하기 때문입니다..
    위의 표에서 본다면, 실제값이 아닌 변수값을 비교하게 됩니다.
    5.( str0 == str3 ) : true   -> 이건?
    -> 이건 억지라고요? 4번과 뭐가 다르냐고요?
    새로운 객체는까 변수값이 다를 것이고 결코 같은 값이 들어 오지 않을 것이라고
    생각할 수도 있습니다.
    하지만, java가 좀 똑똑한 놈이라 이런 경우가 발생합니다.
    new를 사용하여 만든 String은 항상 새로운 객체이지만 ""로 만든 문자열은
    공유를 할 수 있습니다...
    str0을 가리키는 "TEST"라는 문자열을 만들때 메모리의 어떤 부분에 String 객체가
    저장되겠죠. 그곳의 위치가 0xe1e...입니다.
    그런데, 새로 "TEST"라는 객체를 만들면, java는 이게 이전에 만든 0xe1e...에 있
    는 [String]TEST와 동일하다고 판단하고, 새로운 변수에는 0xe1e를 할당하게 됩니다.
    (모든 객체가 그런것은 아닙니다...여기에서 또 clone문제가 생기네요?
    이것도 다음기회...)

    이상의 설명에서 "=="이 무엇을 하는 놈인지 아셨는지.........
    알송달송하면, 아래까지 읽고 다시 읽어 보세요.

    위와 같은 현상때문에 사용자들이 아무 생각없이 "=="을 String에 사용하고,
    결과가 일관성이 없다고 말씀들을 하시더군요...
    보통, 사용자가 생각하는 비교는 실재 저장하는 값이지 결코, 그것을 가리키는
    변수가 아니라는 점에서 그렇습니다....
    그래서, java가 이상한 놈이라고 생각들 합니다.
    그럼, 객체의 "==" 비교는 어떤 의미가 있을까요?
    그건 동일한 객체라는 것입니다.
    위의 str0과 str3은 동일한 객체라는 것을 알 수 있습니다.
    반면, 같은 실재값을 가지고 있다고 하더라고 str0과 str2는 서로 다른 객체죠.
    (참고로, 서로 같은 class의 instance인가는 instanceof를 사용하여 check할 수 있습니다.)

    그럼 실제로 같은 값을 포함하고 있느냐는 무엇으로 비교할까요?
    네.."equals()"죠..
    물론, String등에서죠...
    하지만, equals()는 새로 만들 수도 있기 때문에 어떤 기능을 할지는 알 수가 없습니다.
    (만드는 사람 마음.....)

    여기서는 Object와 String 객체의 equals()만을 살펴보겠습니다.
    Object는 아시는 것처럼 모든 class의 부모입니다. 결국, 모든 class는 object를
    상속받고, 결국 생성되는 모든 객체는 equals()메소드를 갖게 됩니다.
    물론, 자식 class에서 equals()를 재정의하면 그 메소드를 따르지만요.

    자, 그럼 대망의 Object의 equals()를 직접보겠습니다.

    public boolean equals(Object obj) {
    return (this == obj);
    }

    이것입니다....(sun java 1.3.1 이지만, 다른 버젼도 별차이 없을것 같네요.)
    실망하셨나요?
    위의 글을 잘 읽으셨으면, (this == obj)가 어떤 의미를 가지는지는 판단하실 수
    있을 것입니다.

    그럼, String의 equals()는 어떻게 되어 있을까요?
    소스에서 바로 설명하죠.

    public boolean equals(Object anObject) {
    if (this == anObject) { //----> 동일한 객체라면 더 비교할 필요가 없겠죠.
        return true;
    }
    if (anObject instanceof String) { //---> 입력된 객체가 String인지 체크합니다.
                                      //---> type이 다른데 같은 값을가져도 무의미.
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) { //---> 먼저 길이가 같은지 체크하네요.
                                        //---> 길이가 다르면 다른 놈이죠.
        char v1[] = value;              //---> String은 내부적으로 char[]로 관리됩니다.
        char v2[] = anotherString.value;//---> 부럽습니다. 같은 class라고 private로
                                              선언되어 있어도 직접접근이 되는군요.
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {      //---> 하나하나 비교하는 군요.
            if (v1[i++] != v2[j++]) {
            return false;
            }
        }
        return true;
        }
    }
    return false;
    }

    String의 equals()는 이렇게 그 객체가 가지고 있는 char[]의 값을 비교하여
    같으면 true, 틀리면 false로 return하게 되어 있습니다.
    만약, 다른 설정은 다르더라도(그럴께 없지만)
    저장된 값이 같으면 true가 됩니다.
    위의 표를 보면, "equals()"로 비교하게 되면 str0, str2, str3이 모두 같은
    value를 가져 true를 return 하게 됩니다.

    사용자가 주로 원하는 비교의 결과는 이것이겠죠.

    결론을 말하면, 기본형은 "=="로 비교하고, 객체는 equals()로 비교해라 입니다.
    결론은 단순한데 너무 길게 설명했네요.

    ---Tip------------------------------------------------------
    String을 비교할 때의 Tip입니다.

    public void showHI(String str0)
    {
        if( str0.equals("TEST") ) System.out.println("Hi!!!");
    }

    이런 코드가 있을 수 있겠죠.
    showHI("TEST")의 결과는 Hi!!!입니다..
    showHI("테스트")의 결과는      입니다..(blank)
    그럼,
    showHI(null)의 결과는 무엇일까요?
    바로 NullPointException입니다...
    왜냐하면, equals()를 가진 str0자체가 null이기 때문에 equals()를 사용할 수
    없기 때문입니다.
    위의 메소드는 아래처럼 변경되어야 합니다.

    public void showHI(String str0)
    {
        if( "TEST".equals(str0) ) System.out.println("Hi!!!");
    }

    이 코드는 null이 들어와도 blank입니다.
    100%확실한 객체인 "TEST"를 사용하는 것이
    99.9999%의 확실성을 가진 str0 객체를 사용하는 것보다 좋습니다.

    일반적으로 String 비교를 사용할 때는
    비교할 문자열의 equals()를 사용하는 습관을 가져 주십시요.
    (물론 선택의 문제입니다.)
    ------------------------------------------------------------


==================================================
최초작성일 : 2002년 1월 25일
--------------------------------------------------
  본 문서는 자유롭게 배포/복사 할 수 있으나 반드시
  이 문서의 저자에 대한 언급을 삭제하시면 안됩니다.
  (이 내용은 javaservice.net에서 copy.)
--------------------------------------------------
  이호훈(siva6)
  E-mail: siva6@dreamwiz.com
==================================================
2007/09/01 23:04 2007/09/01 23:04
음....레이어로 나누어서
인쇄를 시작하기전에 현재 내용을 안보이게 해놓고
원하는 내용만 다른 레이어에 담다 그 레이어만 노출을 시키고 프린트를 한다.
프린트가 완료되면 노출된 레이어내용을 제거하고 숨겨진 원본 레이어를 다시 노출시킨다...

아래는 위 내용을 만들어논것.....예전에 어디서 알게된건데....기억도 안나고....
하여튼 원래 내용이 작동을 잘 안하고 그래서 좀 변경을 했다...레이어를 좀 추가시켰다고 해야하낭...
할튼 페이지 내용이 많다면 내용을 옮기고 뭐 이런것때문에 시간이 좀 많이 걸린다...약 100-200 페이지 이상 되는 출력일 경우이므로 그리 문제는 없다...그정도페이지면 원래 많이 걸린다...이게 좀더 많이 걸린다느것뿐....-0-;;;


============================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 인쇄 테스트 </TITLE>

<script language="JavaScript">
    function printLayer () {
      if (document.all && window.print) {
        window.onbeforeprint = beforeLayer;
        window.onafterprint = afterLayer;
        window.print();
      }
    }
    function beforeLayer () {
      if (document.all) {
        objContents.style.display = 'none';
        objSelection.innerHTML = document.all['printArea'].innerHTML;
      }
    }
    function afterLayer () {
      if (document.all) {
        objContents.style.display = 'block';
        objSelection.innerHTML = "";
      }
    }


</script>

</HEAD>

<BODY>

<DIV ID="objContents">

    이건 안찍을꺼란 말이지...

    <input type="button" value="출력" onclick="printLayer();">


    <DIV id="printArea" name="taxBill">

    이걸 찍을꺼야~~~

    </DIV>


</DIV>

<DIV ID="objSelection">
</DIV>


</BODY>
</HTML>
2007/09/01 23:02 2007/09/01 23:02