'mysql'에 해당되는 글 6건

  1. 2011/09/10 boyo mysql trigger 권한 부여
  2. 2010/10/27 boyo mysql 프로시저 권한주기
  3. 2010/10/15 boyo mysql 백업 및 복구
  4. 2010/10/13 boyo 각종 웹언어 MYSQL 연결 방법
  5. 2010/10/13 boyo [MySQL]로그(general_log) 쌓는 두 가지 방식 예
  6. 2010/10/12 boyo Mysql - innoDB 관련 -
mysql trigger 권한은 5.1.6 이전 부터는 슈퍼권한이 있어야 사용이 가능했지만,
5.1.6 이후 부터는 trigger 권한이 추가되었다.

하지만 5.1.45 에서도 trigger 권한은 있었다... 미스테리 ㅎ

1. 설정 방법
grant trigger on ID.* to [email protected];
set global log_bin_trust_function_creators = ON

2. 확인 방법

mysql> show grants for [email protected];
[email protected]---------------                                            ---------------------------------+
| Grants for [email protected]                                                                                                                               |
+-------------------------------------------------------------------------------                                            ---------------------------------+
| GRANT USAGE ON *.* TO 'hosting'@'localhost' IDENTIFIED BY PASSWORD '*4E0AE8EAA                                            E183E4454B803A602F1EF1E8F5DE9CA' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TRIGGER ON `hosting                                            `.* TO 'hosting'@'localhost'     |
+-------------------------------------------------------------------------------                                            ---------------------------------+
2 rows in set (0.00 sec)

2011/09/10 09:02 2011/09/10 09:02
TAG ,
GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.`proc` TO '사용자'@'아이피'
2010/10/27 16:11 2010/10/27 16:11

mysql 백업 및 복구

MYSQL 2010/10/15 13:24

[MySQL 백업하기]

mysqldump -hDB서버명 -u유저명 -p패스워드 --default-character=캐릭터셋 [백업할 테이터베이스명] > [외부로 저장할 파일명]

ex) mysqldump -h127.0.0.1 -uDBuser -pPassword--default-character=sjis MyTable > MyTable.sql



특정 테이블만 백업 할 경우 :

mysqldump -hDB서버명 -u유저명 -p패스워드 --default-character=캐릭터셋 [테이타베이스명] [특정테이블명] > [외부로 저장할 파일명]
ex) mysqldump -h127.0.0.1 -uDBuser -pPassword MyDB.MyTable > MyDB_MyTable.sql



테이블 구조만 백업받기
mysqldump -h127.0.0.1 -uDBuser -pPassword -d DATABASE > db_script.sql

이렇게 하면 test 데이터베이스 안의 모든 테이블의 구조만 db_script.sql 파일로 저장됩니다.




[MySQL 복구하기]
mysql -hDB서버명 -u유저명 -p패스워드 [복구할 테이터베이스명] < [외부로 저장된 파일명]
ex) mysql -h127.0.0.1 -uDBuser -pPassword MyDB < MyDB.sql




데이터베이스가 latin1 로 설정이 되어 있는데 덤프하면 한글이 깨지죠?

그럴땐 iconv~
 
iconv -c -f utf-8 -t latin1 원본명 > 새파일명

iconv -c -f utf-8 -t latin1 crm.sql > crm3.sql

2010/10/15 13:24 2010/10/15 13:24

ASP+MYSQL


ODBC 사용(X)
Set dbCon =Server.CreateObject("Adodb.Connection")
dbCon.open("Driver={SQL Server};Server=서버이름 또는 IP;Database=데이타베이스명;uid=아이디;pwd=패스워드")


ODBC 사용(O)
Set dbCon = Server.CreateObject("ADODB.Connection")
strConnect = "DSN=testODBC;uid=testUser;pwd=1234;"
dbCon.Open strConnect
SQL = "Select * from testTable"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open SQL, dbCon




PHP+MYSQL


$connect = mysql_connect("서버주소", "계정명","비밀번호");
$mysql_select_db("디비명", $connect);
$sql="create database mydb";
$result = mysql_query($sql, $connect);




JSP+MYSQL
<[email protected] contentType="text/html;charset=EUC-KR" import="java.sql.*,java.util.*" %>
<%
 
  Connection conn=null;
  Statement stmt = null;
  ResultSet rs = null;
  PreparedStatement pstmt = null;
String connURL = "jdbc:mysql://localhost:3306/test";


  try{
 
  //dirver loading
   Class.forName("com.mysql.jdbc.Driver");
   out.print("forNameload");


   //datebase conn
   conn = DriverManager.getConnection(connURL,"root","pw");
   out.print("getConn");


  }catch(ClassNotFoundException ex){
  System.out.println("classnotfound"+ ex.getMessage());
  }catch(Exception e){
  System.out.println("Exception"+e.getMessage());
  }finally{
   try{
    if(stmt !=null)stmt.close();
     if(pstmt !=null)pstmt.close();
    if(conn !=null)conn.close();
   }catch(SQLException sqle){
     System.out.println("SQLException"+sqle.getMessage());
   }
  }
 
 %>




JAVA+MYSQL


import java.lang.*;
import java.sql.*;
public class DriverTest{
 public static void main(String args[]){
  Connection con;
  try{
   Class.forName("org.gjt.mm.mysql.Driver").newInstance();
// Class.forName("com.mysql.jdbc.Driver").newInstance();
   
   con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","pw");
System.out.println("Success!");
  }
  catch(SQLException ex){System.out.println("SQLException:"+ex);}
  catch(Exception ex){System.out.println("Exception:"+ex);}
 }
}
2010/10/13 14:27 2010/10/13 14:27

[현재 서버 변수 값 확인]
mysql> show variables
    -> where Variable_name in ('version', 'log', 'general_log', 'general_log_file', 'log_output');
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| general_log      | OFF                                  |
| general_log_file | /usr/local/mysql/data/cluster201.log |
| log              | OFF                                  |
| log_output       | FILE                                 |
| version          | 5.1.42                               |
+------------------+--------------------------------------+
5 rows in set (0.00 sec)
// 로그 비활성화 상태


[로그 활성화 하기]
mysql> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| general_log   | ON     |
| log           | ON     |
| version       | 5.1.42 |
+---------------+--------+
3 rows in set (0.00 sec)
// 로그 활성화 상태 확인


[로그 다시 활성화 하기]
mysql> set global general_log = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| general_log   | OFF    |
| log           | OFF    |
| version       | 5.1.42 |
+---------------+--------+
3 rows in set (0.00 sec)
// 로그 비활성화 상태 확인


[로그 다시 활성화 하기]
mysql> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)


[로그 파일이 쌓는 방식 선택]
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)
// 로그 쌓는 방식을 "FILE" 혹은 "TABLE" 둘 중 한가지 방식으로 선택 할 수 있다.


[로그 파일이 테이블에 쌓이는 방식 선택]
mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 TABLE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global log_output='FILE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 FILE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)


mysql> truncate mysql.general_log;
Query OK, 0 rows affected (0.00 sec)
// TABLE에서 쌓여 있는 모든 로그들 삭제


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)


mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 다시 TABLE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)


[로그 파일이 파일,테이블 둘다 쌓이 방식 선택]
mysql> set global log_output='TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)


mysql>  show variables like 'log_output';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE,TABLE |
+---------------+------------+
1 row in set (0.00 sec)

[쿼리 실행]
mysql> insert into test.t1 values(1);


[테이블에 실행한 쿼리 기록]
mysql> select * from mysql.general_log limit 1;
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
| event_time          | user_host                          | thread_id | server_id | command_type | argument                        |
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
| 2008-09-01 18:21:29 | root[root] @ localhost [localhost] |        18 |         0 | Query        | insert into test.t1 values(1)   |
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
1 row in set (0.00 sec)

2010/10/13 13:59 2010/10/13 13:59
TAG ,

Mysql - innoDB 관련 -

MYSQL 2010/10/12 17:33

1. What is Innodb Table space  ?
    - 그 동안  Myisam 방식으로 테이블 스페이스를 사용하던 mysql은 rollback 이 되지 않는다.
       다른 데이터베이스 와 달리  autocommit 이 자동으로 실행 하여
       데이터 베이스의 트렌젝션시 발생되는 lock을 처리 하기 힘들었다.
   -  innodb는 오라클 처럼 shared tablespace ( ibdataN) 와 로그파일 (ib_logfileN ) 로 구성된다.
      로그파일은 트랜젝션들을 처리하는 오라클의 아카이브 로그 같이 생각 하면 된다.
 
2. Mysql의 주요 특징
   참고 : Mysql Technical Reference fo Ver 5.0 : 16장  InnodB Configureation
  -  rollback 을 구현 할수 있다.
  -  transaction isolation Level
     : READ-UNCOMMITED, READ-COMMITED, REPEATABLE-READ, SERIALIZABLE
  - innodb_buffer_pool_size
    : MyIsam 방식과 달리 buffer poll을 이용하여 인덱스와 raw data를 캐싱한다.
      따라서 사용량이 많아 지면 tablespace  Disk I/O  가 그만큼 줄어 든다
      pool의 용량은 real memory의 80% 까지 줄수 있으나,  다른 어플리 케이션과 사용시
     너무 많이 주게 되면 운영 체제의 paging을 일으키게 된다.
     ( 참고로 오라클은 SGA 를 50%로 권고 한다)
     또 32bit 시스템의 경우 2 ~ 3.5G의 제한되므로 너무 많이 주면 안된다고 한다.
 - innodb_data_file_path
    아직 오라클 같이 Shared Table Space 를 온라인상에서 추가 하기 힘들다.
    오직 my.cnf 환경 파일로 생성이 되고 변경 된다.
      형식
     innodb_data_file_path  = [파일위치1/]파일명1:파일1사이즈:autoextend:max:MAX파일 사이즈
     파일 간의 구분자는 ";" 이고 파일의 속성 구분자는 ":" 이며
     autoextend:max:2000M 는 맨마지막 파일에만 해당된다.
innodb_file_per_table
   를 사용하면 이전 isam 같이 데이터 베이스 폴더 안에 table_name.ibd 라는 파일이 생긴다.
   사용예는 다음과 같다.
    innodb_data_home_dir=/export/DATABASE/MyData
   innodb_data_file_path = ibdata1:500M;ibdata2:500M;ibdata3:500M;ibdata4:200M:autoextend:max:2000M
 
3. InnoDB 만들기
1) Mysql 다운로드
wget http://downloads.mysql.com/archives/mysql-5.4/mysql-5.4.2-beta-linux-i686-glibc23.tar.gz
 
2) 링크걸기
tar xvfz mysql-5.4.2-beta-linux-i686-glibc23.tar.gz
mv mysql-5.4.2-beta-linux-i686-glibc23 /usr/local/mysql-5.4.2
ln -s /usr/local/mysql-5.4.2 /usr/local/mysql
 
3) 구동 스크립 등록하기
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
 
4) InnoDb 설정
cp -pr /usr/local/mysql/support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
vi /etc/my.cnf
[mysqld]
...
## 한글(euckr) 설정
character-set-client-handshake=FALSE
init_connect          = SET collation_connection=euckr_korean_ci
init_connect          = SET NAMES euckr
default-character-set = euckr
character-set-server  = euckr
collation-server      = euckr_korean_ci
language=korean
...
# 풀사이즈 조절 (디폴트 2G <- 1G)
innodb_buffer_pool_size = 1G
...
# 바이너리 로그 주석처리(필요에 따라..)
#log-bin=mysql-bin
...
log-error        = /usr/local/mysql/logs/mysql_error.log
log-slow-queries = /usr/local/mysql/logs/mysql_slow.log
...
innodb_data_file_path =ibdata1:4000M;ibdata2:100M;ibdata3:100M:autoextend
innodb_data_home_dir            = /usr/local/mysql/ibdata
innodb_log_group_home_dir       = /usr/local/mysql/iblogs
innodb_log_arch_dir             = /usr/local/mysql/iblogs
 
4. myisam -> innodb 로 바꿔보자.
1) 기존 데이터베이스 스키마 덤프
2) 기존 데이터베이스 데이타 덤프
// mysql 로그인
# mysql -u -p
Enter password : 비밀번호 (첫 접속시에는 비밀번호 없음)
// innodb 설정 상태 확인
mysql> SHOW VARIABLES LIKE 'have_innodb';
 +---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb   | YES   |
+---------------+-------+
1 row in set (0.00 sec)
// 설정 상태 확인
mysql> SHOW STATUS LIKE '%innodb%';
3) 데이터베이스 생성
mysql> create database testdb;
mysql> grant all on testdb.* to testdb  identified by 'testdb';
mysql> flush privileges;
4) 기존 데이터베이스 스키마 복구
 
 
5) 테이블 Type innodb로 변경
2010/10/12 17:33 2010/10/12 17:33
TAG ,