[Mysql] MySQL 성능을 튜닝해 보자



debian 에 보면 mysqltuner 이란 패키지가 있는데 위의 패키지도 이와 비슷한 패키지가 아닐까 싶다. 결과치를 가지고 평균 튜닝값을 산출해주는 프로그램


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2009/06/11 07:31 2009/06/11 07:31
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/647

MySQL Cluster 설치하기

ㅡ.ㅡ 문서 저장이 안 되는 관계로... 파일 첨부 합니다.


저작권: 문서는 자유롭게 수정 배포가 가능합니다. 상업적 용도로 사용할 없습니다.
수정 배포 작성자의 이름 출처를 명시하기 바랍니다.
작성자 : f405(ccotti22)


작성일 : 2005 8 3 수요일
이메일 : f405@naver.com

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 삐꾸강아쥐

2009/04/04 23:57 2009/04/04 23:57
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/623

[MySQL] Default Storage Engine 사용하기

MySQL은 기본적으로 MyISam  엔진을 사용한다.

당연히 InnoDB 도 사용 가능하지만 tables 에 InnoDB 임을 선언해주지 않으면 MyISam 으로 지정이 된다.

이런경우 Default Storage Engine 로 지정을 해주면 번거더움을 덜 수 있다.

 방법 :

데몬을 시작할때 --default-storage-engine 옵션으로 지정하거나 /etc/my.cnf 에
default_storage_engine = 로 지시를 해 주면 된다.

또는???

기존 MyISam 테이블을 InnoDB 로 변경 할 경우...
alter table table_name engine=innodb;    

로 입력해주면 된다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2009/02/23 15:04 2009/02/23 15:04
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/605

[DB 속도저하에 따른 웹페이지 접속 지연] skip-name-resolve 옵션

skip-name-
resolve는 client 에서 server로 접속시에 DNS Lookup 과정을 생략해 줍니다. localhost 로
접속하는 경우는 문제가 없지만 IP 로 접속하는 환경에서는 DNS 서버가 느리거나 아님 장애 발생시에 해당 옵션을 설정해
주므로써 DB 접속시에 문제점을 해결하실 수 있습니다.


[root@smson root]# vi /etc/my.cnf


# The MySQL server
[mysqld]
skip-external-locking
skip-host-cache
skip-locking
skip-name-resolve
back_log                = 768
basedir                 = /opt/mysql/
connect_timeout         = 30


아래와 같이 show processlist 명령을 수행해서 unauthenticated user 가 표시되면


DB 연결 속도가 떨어지고, 웹페이지 접속이 느려진다.


mysql> show processlist;
| 3436942 | unauthenticated user | 192.168.0.52:49607 || Connect|| login |
| 3436943 | unauthenticated user | 192.168.0.52:49608 || Connect|| login

1. 해결방법
mysql 시작시 --skip-name-resolve 옵션을 줘서 실행한다.
또는 /etc/hosts 파일에 접속 IP와 호스트명을 넣어준다.


2. 원인?
mysql에서 접속시 ip에 대한 resolving(역질의)를 한다. 하지만, 대부분의 IP는 등록되어 있지 않으며,
DNS가 느리다면 이 부분은 더욱 심각한 속도 문제가 발생한다. mysql 4.0.XX에서는 보이자
않았던 문젠데... 4.1.X 부터는 문제가 보이기 시작했다. 위 해결법들은.
역질의를 하지 않는 방법과, DNS가 아닌 /etc/hosts파일에서 질의 하게 하는 방법이다.
둘 중 빠른 방법은 역질의하지 않게 하는것이며, DB를 잠시라도 정지하기 힘든 시스템에서는
두번째 방법을 사용하여 한가할 때 전자의 방법으로 바꾸는 것이 좋을 것으로 판단된다.


 


 


[MYSQL 접속함]
[root@DWSM logs]#
mysql --user=root -p.digital
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.11-log
mysql> use mysql;
Database changed
mysql> select * from user where User ='ering';   <<- 사용자 확인한다.
+-----------+-------+-------------------------------------------+-------------+----------
|
Host      | User  | Password                                  |
Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv |
Drop_priv | Reload_pr

iv |
Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv
| Index_priv | Alter_priv | Show_db_priv | Super_priv |
Create_tmp_table_priv |

Lock_tables_priv
| Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type |
ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates |
max

_connections |
+-----------+-------+-------------------------------------------+-------------+----------
| localhost
| ering | *A3279FE22E79F49A496CBFB6A9E9D30CD68E4052 | Y           |
Y           | Y           | Y           | Y           | Y         | Y

 
| Y             | Y            | Y         | Y          |
N               | N          | N          | N            | N          |
N                     |

N              
| N            | N               | N                |        
|            |             |              |             0 |           0
|

           0 |
1 row in set (0.00 sec)


mysql> INSERT INTO user VALUES ('%','ering', password('.digital'),'Y','Y','Y','Y','Y','Y',
    -> 'Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);

Query OK, 1 row affected (0.00 sec)


mysql> commit;
Query OK, 0 rows affected (0.00 sec)


mysql> quit
Bye
[root@DWSM logs]# /etc/init.d/mysql restart
Shutting down MySQL. SUCCESS!
Starting MySQL SUCCESS!


<<- 웹접속해본다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2009/02/04 10:28 2009/02/04 10:28
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/595

mysql 의 mysql_secure_installation 를 사용 하자

MySQL 몇 버전 부터인지는 정확히 알 수 없다.

5.x 버전부터 아닐까 싶기는 한데

mysql_secure_installation  이라를 스크립트가 존재 한다.

뭐... 의미는 기본적인 보안을 강화 시켜주는 기능이라고 한다.

뭐... 알만한 사람은 다 아는 내용에 대한 보안이지만 ...

./mysql_secure_installation  ( 실행 )
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] ## root 패스워드를 설정 할 것인지 물어본다.
 ... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] ##  anonymous 유저를 삭제 할것인지 물어본다.
 ... skipping.

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] ## root의 원격 접속을 허용할 것인지 물어본다.
 ... skipping.

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] ## test 데이터베이스를 삭제 할것인지 물어본다.
 ... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] ## privileges 테이블을 재 시작 할 것인지 물어본다.
 ... skipping.

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

알아두면 유용한 스크립트다.

참고로 mysql 데몬이 동작하는 상태에서 실행을 시켜야 한다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2009/01/30 11:51 2009/01/30 11:51
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/594

mysql 설치시 mysql 유저가 아닌 다른 유저로 설치하기

MySQL을 설치하기 위해서 사용되는 유저는 기본적으로 mysql 을 사용한다.

그러나 일부 패키징된 제품의 경우 mysql이 아닌 다른 사용자를 사용할 경우가 생긴다.

이 경우 mysql 의 home_path 는 당연히 해당 사용자 권한이어야 하며

아래의 2개 파일을 변경해 주어야 한다.
------------------------------------------------------------------------
## /etc/init.d/mysqld << user 변경
56 # The following variables are only set for letting mysql.server find things.
     57
     58 # Set some defaults
     59 pid_file=
     60 server_pid_file=
     61 use_mysqld_safe=1
     62 user=testuser
     63 if test -z "$basedir"

### mysqld_safe << user 변경
 17 # Initial logging status: error log is not open, and not using syslog
 18 logging=init
 19 want_syslog=0
 20 syslog_tag=
 21 #user=mysql
 22 user=testuser
 23 pid_file=
 24 err_log=

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

위 2가지 설정 파일을 변경 해준다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2009/01/21 23:04 2009/01/21 23:04
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/590

ssh 터널링을 이용한 mysql replication 구축

출처 => http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=55304
작성자의 요청이 있을경우 자삭 합니다.


[보안] ssh 터널링을 이용한 mysql replication 구축       
글쓴이       전진하는아르고     날 짜     07-07-20 13:22     조 회     54
Mysql 서버의 데이터를 미러링 할 목적으로 replication 을 셋팅하던 도중에...
갑자기 생각이 나서 한번 해봤습니다.
딴거는 다 포트가 막혀있거나 또는 SSH 터널링을 이용하는데 replication 을 위해..
mysql 포트를 열어야 하는것과 mysql 권한에 원격 로그인을 허용한다는게 좀 맘에 안들어서... ^^

replication 을 구축하기 위해 최소 2개의 mysql 서버가 필요하겠죠.
master 서버 : insert, update, delete 등이 일어나는서버..
slave 서버 : select 를 주로 하는 서버...
우선 두 서버가 리눅스라는 가정하에 설명하겠습니다.
한쪽이 윈도우거나 두쪽다 윈도우인 경우는 별도의 툴들이 필요하니...
대체적으로 replication 을 사용하시는 분들은 둘다 리눅스를 많이 사용할듯 싶으니...

설치 환경
master : fedora4 mysql.4.1.16
slave : centos5 mysql.5.0.41

SSH 터널링
우선 ssh 터널링을 만들어야 합니다.
ssh 터널링은 slave 서버쪽에 셋팅합니다.
# ssh -CNf -L3307:127.0.0.1:3306 ssh계정@master서버IP
패스워드를 입력하자.
이제 slave 서버와 master 서버간에 터널링이 되었다.

# netstats -an | grep LISTEN
하면 3307 포트가 열려있는것을 확인할수 있다.

잠깐 ssh 터널링을 설명하자면 slave 서버에서 로컬(-L)의 3307번 포트로 접속하면 slave의 ssh를 통해..
master 의 ssh 에 접속하여 127.0.0.1의 3306번 포트로 접속한다는것이다.

주의 : 여기서 127.0.0.1 은 slave의 client ssh로 master 서버의 ssh 서버에 접속한 다음에 IP를
의미하는것이므로 127.0.0.1 은 master 서버 자신을 의미한다.
mysql 계정들의 host 권한을 모두 localhost 로 만들어둔 상태라..
127.0.0.1 이 아닌 master 서버의 도메인으로 셋팅한 경우에 접속이 되질 않았다.
이것때문에 삽질을 좀했다.

-f 는 백그라운드로 돌린다는 말이고..
-C는 압축한다는 의미이다.
-N 은 명령어 실해없이 시작한다는 ...

그럼.. 실제로 접속을 해보자.
/usr/local/mysql/bin/mysql -u root -p -P 3307 -h 127.0.0.1
db 리스트 및 내용을 확인해보면 master 로 접속된걸 확인할수 있을것이다.

Tip
위에서 언급한 ssh 터널링은 재부팅되면 초기화 되므로 재부팅시 자동으로활성화 되도록 만들어보자
/root/sshlogin 이란 화일을 만든다음
===========================================================================================
#!/usr/bin/expect
spawn bash -c "ssh -CNf -L3307:127.0.0.1:3306 ssh계정@master서버IP"
expect -re "Password:"
sleep 0.2
send "master서버의ssh계정패스워드\r"
interact
===========================================================================================
위와 같이 입력해준다.
만약 expect 가 없다면 expect 를 yum install expect 해서 설치하거나..
http://rpmseek.com 또는 http://rpmfind.net 에서 찾아서 설치하시길....

이제 해당화일에 chmod 700 권한을 주고... ==> chmod 700 /root/sshlogin
/etc/rc.local 에
/root/sshlogin <== 이부분을 추가..
그럼 리눅스 시스템이 부팅하면서 해당 화일을 실행하고 ssh 터널링이 열린다.



Replication
이제 replication 이 남았다.
일반적인 replication 과 설정이 다른것은 하나밖에 없을것이다.
Slave Server 에서...

Master Server
my.cnf
========================================================================================================
[mysqld]
log-bin = mysql-bin
server-id   = 1
binlog-do-db = db_name1
#binlog-do-db = db_name2
========================================================================================================

Slave Server
my.cnf
========================================================================================================
[mysqld]
server-id       = 2
master-host     = 127.0.0.1
master-user     = 리플리케이션아이디
master-password = 패스워드
master-port     = 3307
# DB 별
replicate-do-db = db_name1
#replicate-do-db = db_name2
# 테이블 별
# replicate-do-table=db_name.tbl_name
========================================================================================================
이제 mysql 서버를 각각 실행시키면 ssh 터널링을 이용해 replication 이 된다.
이문서는 mysql 설치 초기에 replication 환경을 만들기 위한것이다..
mysql 이 서비스 되는 상태에서 replication을 셋팅하는것은 인터넷에 자료가 많으니...
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2007/08/09 15:00 2007/08/09 15:00
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/451

My sql 사용자 생성하기 그리고 root 비밀번호를 잊어 버렸을때

Mysql 에서 사용자를 생성 할경우

use mysql;

insert into user values ();
insert into db values ();

형식으로 스키마에 맞게 값을 추가 해주는 경우도 있지만

한번에 user 및 DB를 추가 해주는 방법도 있다.

grant all on db_name.* to id@localhost 
# 까지만 하면 기존 유저에 DB 권한을 추가 해주는 것이고

grant all on db_name.* to id@localhost identified by 'password';
# 사용자 및 DB 권한 그리고 패스워드까지 설정하는 명령어 이다.

뽀너스로 mysql 의 root 비밀 번호를 잊어 벼렸을때 대처법

기존 mysqld 데몬을 killall mysqld 해서 disabled 시킨다음

./mysqld_safe --skip-grant-table & # 옵션을 주고 데몬을 띄우면
root 계정이 패스워드 없이 로긴이 된다.

로긴 후 root 패스워드를 바꿔주고 mysqld 데몬을 다시 정상적으로 띄워주면 작업 끝.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 삐꾸강아쥐

2007/04/24 11:59 2007/04/24 11:59
이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색, 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색
Response
No Trackback , No Comment
RSS :
http://blog.seabow.pe.kr/rss/response/315


Recent Trackbacks

Calendar

«   2010/07   »
        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

Site Stats

Total hits:
78737
Today:
24
Yesterday:
78
qrcode
QrooQroo code generator