MySQL 5.6 버전이 릴리즈 되었습니다.
5.5 버전에 비해서… 많은 향상이 있다고 하는데…
뭐… 들리는 얘기론… 오픈소스 배포판들이 기존 MySQL 에서 MariaDB 로 변경하는 부분때문에
급하게 서두른게 아니냐는… 추측도 나오고 있네요…
MySQL 5.6 에 대한 자세한 내용은 아래의 링크를 참고 하세요

DBA and Developer Guide to MySQL 5.6
Link : http://dev.mysql.com/tech-resources/articles/mysql-5.6.html

MySQL 5.6 Release Notes
Link : http://dev.mysql.com/doc/relnotes/mysql/5.6/en/

DownLoad
Link :http://dev.mysql.com/downloads/mysql/5.6.html

본인의 블로그는 Debian 6.0.5 (squeeze) 버전이다.

특별히 leap second 이슈에 대해서는 신경도 안 쓰고 있었는데 오늘에서야 확인했다…ㅎㅎㅎ

air-video 목적으로 실행 시켜놓은 java 프로세스가 아래와 같은 cpu 사용률을 보이고 있었다.

 


2349 root      20   0 1312m  41m 3628 S  112  1.1   6128:37 /usr/bin/java -jar /usr/local/air-video/AirVideoServerLinux.jar /usr/local/air-video/airvideo.properties
58380 root      20   0 19120 1312  948 R    0  0.0   0:00.02 top -c
1 root      20   0  8404  608  564 S    0  0.0   0:06.64 init [2]
2 root      20   0     0    0    0 S    0  0.0   0:00.06 [kthreadd]

 

해결 방법은 스크린샷 화면에도 나와 있지만… 아래와 같이 입력 한다.

#export LANG=C

#date -s “`date`”

 

 

58382 root      20   0 19252 1388 1020 R    1  0.0   0:02.50 top -c
1817 mysql     20   0  732m 114m 3400 S    0  2.9 226:48.38 /usr/sbin/mysqld –basedir=/usr –datadir= –user=mysql –log-error=/–pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/my
1949 Debian-g  20   0  287m 9764 4252 S    0  0.2  17:39.63 /usr/lib/gdm3/gdm-simple-greeter
2349 root      20   0 1312m  41m 3516 S    0  1.1   6134:13 /usr/bin/java -jar /usr/local/air-video/AirVideoServerLinux.jar /usr/local/air-video/airvideo.properties

 

현재 관리하고 있는 서버가 RHEL 6 또는 Debian 6.0.x 버전인데 특정 process 가 사용률과 관련 없이 100% 이상의

사용률을 보인다면 leap second 상황을 검토해 보길 바란다.

 

[120724]

leap second 이슈가 지나간게 아닌가?

나의 블로그 서버를 재부팅 시켰는데… 이상하게 CPU 사용률이 높았다…

그래서 mysql 로그를 확인해본 결과… wordpress 관련 timestamp 를 계속 찍고 있는게 아닌가???

헐… 혹시나 하는 마음에…

#date -s “`date`”

를 입력하는 순간… CPU 사용률이 잦아들기 시작했다…

재부팅 순간… ntp 와 sync 되기 전에 이런 문제가 발생 되는것일까???

흠… 이상하다…

올해가 윤초(Leap Second) 가 발생되는 2012년 이라고 한다.

ex)

—————————————————————————-

Sat Jun 30 23:59:60 2012 <== 6월30일 23시59분60초 발생

Sun Jul  1 00:00:00 2012

—————————————————————————-

해당  상황이 되면 기존 59 초로 마무리되는 시간에 60초라는 1초의 값을 추가(또는 삭제도 되려나?)

시켜서 태양력과 원자력의 시간 간격을 조정한다고 한다.

@ 윤초(Leap Second)란?:

Link 1 : http://www.bek.me/index.php?document_srl=333668&mid=news

Link 2 : http://www.meinberg.de/english/info/leap-second.htm

 

해당 내용을 보면… 일반적인 경우엔…
————————————–
2005-12-31 23.59.57
2005-12-31 23.59.58
2005-12-31 23.59.59
2006-01-01 00.00.00
2006-01-01 00.00.01
2006-01-01 00.00.02
————————————–

 

이런식으로 시간이 지나 가지만… 해당 윤초가 발생되면
————————————–
2005-12-31 23.59.57 2
2005-12-31 23.59.58
2005-12-31 23.59.59
2005-12-31 23.59.60 <– leap second
2006-01-01 00.00.00
2006-01-01 00.00.01
2006-01-01 00.00.02

————————————–

 

위처럼 59분 60초 라는 결과까지 카운트가 되면서 1초가 추가되는 현상 생기는것 같다.
이 이슈는 time zone 에 따라서 발생되는걸로 보이며 아래의 명령어로 언제 Leap Second 가
발생될지 확인 가능 하다.

 

#zdump -v right/UTC

 

@ 한국 시간 확인

#zdump -v right/Asia/Seoul

 

위 명령으로 확인 하였을때 최신 버전의 tzdata 가 아니라면 Leap Second 관련
Time List 확인이 안 된다.

 

@ RHEL Leap Second Hang Issue

Link : https://access.redhat.com/knowledge/articles/15145 (RHN ID 필요)

 

#kernel Update
RHEL 4    kernel-2.6.9-89.EL         4.8    RHSA-2009:1024-1
RHEL 5    kernel-2.6.18-164.el5    5.4    RHSA-2009:1243-3
RHEL 6    RHEL 6 kernel is not affected by this problem

Please note that PPC and IA64 kernels may not insert the leap second properly.

For systems running on those architectures, the method below for systems not

running NTP should be used.

 

#tzdata Update ( 2012 Leap Second )
RHEL 3    tzdata-2011n-2.el3
RHEL 4    tzdata-2011n-2.el4
RHEL 5    tzdata-2011n-2.el5
RHEL 6    tzdata-2011n-2.el6

For additional information on the update to tzdata, please refer to RHEA-2012:0356-1 tzdata

 

업데이트 후 각 지역에 맞는 zoneinfo 파일을 아래와 같이 overwrite 한다.
한국 zoneinfo 파일은 /usr/share/zoneinfo/right/Asia/Seoul 이다.

*) tzdata 를 update 하게되면 Leap Second 가 List UP 되므로 kernel update 가 안 되어 있는 서버라면

해당 기간엔 tzdata update 를 자제하길 바란다.

 

#cp /usr/share/zoneinfo/right/Asia/Seoul /etc/localtime

 

@ Debian Leap Second Hang Issue

Link : http://lists.debian.org/debian-user/2005/12/msg03343.html

 

[2012/07/01]

찾아본 결과 java 쪽도 별도의 tzdata 를 가지고 update 를 하는걸로 보인다.

### Timezone Updater Tool for java
Link : http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html

 

RHEL 제품의 RPM 을 보면

tzdata-2012c-1.el5
tzdata-java-2012c-1.el5

이런식으로 java 용 tzdata 가 존재한다.

 

그 외… 이번 leap second 이슈는 OS 부분에서만 발생되는게 아닌것으로 보인다.

[java]
Link : http://forums.pentaho.com/showthread.php?98217-Java-leap-second-bug-how-to-fix-your-broken-servers
Link : http://remibergsma.wordpress.com/2012/07/01/high-cpu-load-on-cloudstack-management-servers-after-leap-second-3062012235959-utc/
Link : http://www.mail-archive.com/user@cassandra.apache.org/msg23462.html

[mysql]
Link : http://blog.mozilla.org/it/2012/06/30/mysql-and-the-leap-second-high-cpu-and-the-fix/
Link : http://planet.mysql.com/entry/?id=33709
Link : http://planet.mysql.com/

[amazone]
Link : https://forums.aws.amazon.com/thread.jspa?messageID=360449&tstart=0

 

그리고 아래의 링크에 leap second 조취 방법은 아래와 같다.

Link : http://pedroalves-bi.blogspot.kr/2012/07/java-leap-second-bug-how-to-fix-your.html

[RHEL]

/etc/init.d/ntpd stop;export LANG=C;date;date `date +”%m%d%H%M%C%y.%S”`;date

ntp daemon 을 stop 시키고 date 를 실행하여 시간 데이터를 초기화 시킨다.

 

[2012/07/02]

레드헷 커스터머포털 메인에 “Learn more about how Red Hat Enterprise Linux supports leap seconds. ( RHN ID 필요 ) ”

이란 내용이 걸리고 아래와 같은 이슈 사항들이 공유 되었습니다.

 

High CPU Usage after inserting the leap second.
– After the insertion of the leap second several processes, notably java, were reporting a High CPU usage.
Link : https://access.redhat.com/knowledge/solutions/154793 ( RHN ID 필요 )

해당 이슈를 보면 java 프로세스가 100% 이상의 사용률을 보입니다.

그리고 call trace 에 ktime_get 관련 내용도 발생 될 수 있습니다.

해결 방법은

#export LANG=C 
#date -s "`date`" >> 해당 내용은 수동으로 사간값을 초기화 하는 것 이라고 합니다. 위의 7월 1일 회피 방법과 비슷 하다고 보면 될듯 하다. 

Systems hang due to leap-second livelock.
– Systems repeatedly crash due to NMI Watchdog detecting a hang. There are two similar backtraces that appear to be related to this issue.
Link : https://access.redhat.com/knowledge/solutions/154713 ( RHN ID 필요 )

위 이슈는 RHEL6 에 해당되는 이슈 입니다.

MySQL 취약점 보고가 떳습니다.

관련 내용 첨부 :

A few days ago Sergei Golubchik of Monty Program sent an e-mail to the Open Source Security mailing list informing about a security vulnerability in MySQL authentication system. Under certain circumstances a remote attacker may easily gain access to MySQL database as any user and all they need to know is a valid user name (e.g. root user exists in nearly all installations). The problem has only been addressed in the most recent database versions.

The full details are covered in Sergei’s post linked above. Not all MySQL releases are affected as the cause appears to be related to the build environment and the options used in the binary build process. For instance binaries distributed by Oracle appear to be safe as well as those available from RedHat’s repository.

We encourage you to test this against your database if you’re running MySQL versions up to 5.1.61 or 5.5.22 to see whether you need to upgrade or not. The test can be done with a simple line that can be run in bash:

for i in `seq 1 2000`; do mysql -u root --password=somerandomcharacters -h 127.0.0.1 ; done

Remember that following even the basic security practices can often save you from getting your database hacked after a new vulnerability is published:

  • never let MySQL to listen on a network interface accessible from the internet (set bind-address in my.cnf if necessary)
  • build firewall rules to filter out any addresses that do not require database access
  • always create a new privileged MySQL user under a different name to replace the default root account and remove root afterwards
  • remove test account that is installed by default
  • upgrade database as soon as possible after a new vulnerability is published

Original Source : http://planet.mysql.com/entry/?id=33544

 

위의 내용에 해당 하는 서버는 위의 내용대로 적용  하시기 바랍니다.

 

Red Hat BugZilla : https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-2122

Debian : http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677018

Ubuntu : http://www.ubuntu.com/usn/usn-1467-1/

 

The Hackers News : http://thehackernews.com/2012/06/cve-2012-2122-serious-mysql.html

Youtube : http://www.youtube.com/watch?v=B_3BpxXv7bU&feature=related

CVE-2012-2122: A Tragically Comedic Security Flaw in MySQL

 https://community.rapid7.com/community/metasploit/blog/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql

 

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

Link : http://webjawns.com/2010/01/optimize-php-apache-mysql-with-tuner-scripts-best-practices-and-more/

링크에 보면 MySQLTuner (Perl) and MySQL Performance Tuning Primer (Shell) 에 대한 내용이 나온다… 본인은 현재 MySQLTuner(Debian Package) 를 사용하고 있다.

 

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

1099908477.doc

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

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

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;    

로 입력해주면 된다.

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!

<<- 웹접속해본다.

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 데몬이 동작하는 상태에서 실행을 시켜야 한다.