2014년 1월 23일 목요일

Install MySQL 5.5.33 on Fedora 18/17, CentOS/Red Hat (RHEL) 6.4/5.9

MySQL is a relational database management system (RDBMS) that runs as a server providing multi-user access to a number of databases. This is guide, howto install or upgrade MySQL Community Server latest and greatest version 5.5.33 on Fedora 18/17/16/15/14/13/12, CentOS 6.4/6.3/6.2/6.1/6/5.9 and Red Hat (RHEL) 6.4/6.3/6.2/6.1/6/5.9.
Note: If you are upgrading MySQL (from earlier version), then make sure that you backup (dump and copy) your database and configs. And remember run mysql_upgrade command.

Install MySQL Database 5.5.33 on Fedora 18/17/16/15/14/13/12, CentOS 6.4/5.9, Red Hat (RHEL) 6.4/5.9

1. Change root user

su -
## OR ##
sudo -i

2. Install Remi repository

Fedora

## Remi Dependency on Fedora 18, 17, 16
rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm 
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
 
## Fedora 18 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-18.rpm
 
## Fedora 17 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-17.rpm
 
## Fedora 16 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-16.rpm
 
## Fedora 15 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-15.rpm
 
## Fedora 14 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-14.rpm
 
## Fedora 13 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-13.rpm
 
## Fedora 12 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-12.rpm

CentOS and Red Hat (RHEL)

## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
 
## CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
 
 
## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
 
## CentOS 5 and Red Hat (RHEL) 5 ## 
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

3. Check Available MySQL versions

Fedora 18, 17, 16, 15, 14, 13, 12

yum --enablerepo=remi list mysql mysql-server

CentOS 6.4/6.3/6.2/6.1/6/5.9 and Red Hat (RHEL) 6.4/6.3/6.2/6.1/6/5.9

yum --enablerepo=remi,remi-test list mysql mysql-server
Output:
Loaded plugins: changelog, fastestmirror, presto, refresh-packagekit
...
remi                                                            | 3.0 kB     00:00     
remi/primary_db                                                 | 106 kB     00:00     
Available Packages
mysql.i686                               5.5.33-1.fc18.remi                        @remi
mysql-server.i686                        5.5.33-1.fc18.remi                        @remi

4. Update or Install MySQL 5.5.33

Fedora 18, 17, 16, 15, 14, 13, 12

yum --enablerepo=remi install mysql mysql-server

CentOS 6.4/6.3/6.2/6.1/6/5.9 and Red Hat (RHEL) 6.4/6.3/6.2/6.1/6/5.9

yum --enablerepo=remi,remi-test install mysql mysql-server

5. Start MySQL server and autostart MySQL on boot

Fedora 18/17/16

systemctl start mysqld.service ## use restart after update
 
systemctl enable mysqld.service

Fedora 15/14/13/12/11, CentOS 6.4/6.3/6.2/6.1/6/5.9 and Red Hat (RHEL) 6.4/6.3/6.2/6.1/6/5.9

/etc/init.d/mysqld start ## use restart after update
## OR ##
service mysqld start ## use restart after update
 
chkconfig --levels 235 mysqld on

6. MySQL Secure Installation

  • Set (Change) root password
  • Remove anonymous users
  • Disallow root login remotely
  • Remove test database and access to it
  • Reload privilege tables

Start MySQL Secure Installation with following command

/usr/bin/mysql_secure_installation
Output:
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] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
 
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] Y
 ... Success!
 
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] Y
 ... Success!
 
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] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
 
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
 
Reload privilege tables now? [Y/n] Y
 ... Success!
 
Cleaning up...
 
 
 
All done!  If you\'ve completed all of the above steps, your MySQL
installation should now be secure.
 
Thanks for using MySQL!
Note: If you don’t want some reason, do a “MySQL Secure Installation” then at least it’s very important to change the root user’s password
mysqladmin -u root password [your_password_here]
 
## Example ##
mysqladmin -u root password myownsecrectpass

7. Connect to MySQL database (localhost) with password

mysql -u root -p
 
## OR ##
mysql -h localhost -u root -p

8. Create Database, Create MySQL User and Enable Remote Connections to MySQL Database

This example uses following parameters:
  • DB_NAME = webdb
  • USER_NAME = webdb_user
  • REMOTE_IP = 10.0.15.25
  • PASSWORD = password123
  • PERMISSIONS = ALL
## CREATE DATABASE ##
mysql> CREATE DATABASE webdb;
 
## CREATE USER ##
mysql> CREATE USER 'webdb_user'@'10.0.15.25' IDENTIFIED BY 'password123';
 
## GRANT PERMISSIONS ##
mysql> GRANT ALL ON webdb.* TO 'webdb_user'@'10.0.15.25';
 
##  FLUSH PRIVILEGES, Tell the server TO reload the GRANT TABLES  ##
mysql> FLUSH PRIVILEGES;

Enable Remote Connection to MySQL Server –> Open MySQL Port (3306) on Iptables Firewall (as root user again)

1. Edit /etc/sysconfig/iptables file:

nano -w /etc/sysconfig/iptables

2. Add following INPUT rule:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

3. Restart Iptables Firewall:

service iptables restart
## OR ##
/etc/init.d/iptables restart

4. Test remote connection:

mysql -h dbserver_name_or_ip_address -u webdb_user -p webdb

2014년 1월 20일 월요일

SysBench on CentOS – HowTo

SysBench on CentOS – HowTo

If you want to test server performance, you can think about SysBench. SysBench is a modular, cross-platform and multi-threaded benchmark tool for evaluating OS parameters that are important for a system running a database under intensive load. The idea of this benchmark suite is to quickly get an impression about system performance without setting up complex database benchmarks or even without installing a database at all.
Current features allow to test the following system parameters:
* file I/O performance
* scheduler performance
* memory allocation and transfer speed
* POSIX threads implementation performance
* database server performance (OLTP benchmark)
(Primarily written for MySQL server benchmarking, SysBench will be further extended to support multiple database backends, distributed benchmarks and third-party plug-in modules)
I couldn’t find CentOS RPM so here are few tips how to install it manually.
Download Sysbench (current version is 0.4.12)
# wget http://garr.dl.sourceforge.net/sourceforge/sysbench/sysbench-0.4.12.tar.gz
Then unpack it and install with
# tar -xvzf sysbench-0.4.12.tar.gz
# cd sysbench-0.4.12
# libtoolize --force --copy 
# ./autogen.sh
# ./configure
# make
# make install
To test CPU performance you can try
# sysbench --test=cpu --cpu-max-prime=20000 run
For MySQL test, you’ll need to prepare database for testing with
# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=500000 --mysql-user=test_database --mysql-password=test_database_password --mysql-socket=/var/lib/mysql/mysql.sock prepare
(replace test_database with valid username and test_database_password with valid password)
This command will create sample table inside test_database and it will have 500 000 rows (InnoDB engine).
sysbench 0.4.12:  multi-threaded system evaluation benchmark
 
No DB drivers specified, using mysql
Creating table 'test-database'...
Creating 500000 records in table 'test-database'...
Now to start read test
# sysbench --num-threads=16 --max-requests=100000 --test=oltp --oltp-table-size=500000 --mysql-socket=/var/lib/mysql/mysql.sock --oltp-read-only --mysql-user=test_database --mysql-password=test_database_password run
For read-write test you can try
# sysbench --num-threads=16 --max-requests=10000 --test=oltp --oltp-table-size=500000 --mysql-socket=/var/lib/mysql/mysql.sock --oltp-test-mode=complex --mysql-user=test_database --mysql-password=test_database_password run
More info about specific parameters can be found in official docs (http://sysbench.sourceforge.net/docs/)

윈도우 서버 모니터링 항목설명

Windows Server와 SQL Server를 모니터링 할 때 사용하는 개체들에 대한 설명입니다.
아래 표는 Windows의 관리도구 -> 성능에 있는 개체입니다.




메모리와 페이징 파일 사용 모니터링

개체:카운터설명지침
Memory:Available bytes프로세서가 실행 작업에 사용 가능한 바이트 수를 모니터링 한다.5000KB 보다 커야 한다.
값이 작으면 실제 메모리가 전반적으로 부족하므로 메모리를 늘려야 한다.
Memory:Page/sec심각한 페이지 부재 문제를 해결하기 위해서 페이지 수를 모니터링 한다.0 보다 크면 안된다.
계속적으로 0보다 크면 운영체제는 멤모리 요청을 만족시키기 위해서 페이징 파일을 사용 중이다.
Process:Page Faults/sec/SQL Server Instance운영체제의 작업 집합 크리 트리밍으로 야기된 페이지 부재를 모니터링한다.값이 크면 과도한 페이징과 디스크 스래싱을 나타낸다. 그 원인이 sql server인지 과도한 페이징을 야기하는 다른 프로세스인지 검사한다.


SQL Server에서 사용하는 메모리 격리
 

개체:카운터설명지침
Process:Working Set/SQL Server Instancesql server 프로세스가 sql server의 인스턴스용으로 사용하는 메모리의 양을 모니터링 한다.이 카운터는 5000KB 보다 커야한다. 이 카운터 값이 5000KB 아래로 떨어지는 경우 SQL Server가 사용할 수 있는 추가 메모리는 없다.
SQL Server:Buffer Manager:Buffer Cache Hit Ratio하드 디스크에서 읽기를 하지 않고 버퍼 캐시에서 페이지의 백분율을 모니터링 한다. 버퍼 캐시에서 사용되는 페이징 파일 메모리와 실제 메모리를 구별하지 않는다.이 카운터는 캐시에 있는 페이지의 수를 나타내므로 90% 보다 커야 한다.
SQL Server:Buffer Manager:Total Pages데이터베이스 페이지, 사용 가능한 페이징, 빼앗긴 페이지를 포함하여 버퍼 캐시의 총 페이지 수를 모니터링 한다.낮은 값은 잦은 디스크 I/O작업이나 스래싱을 의미한다. 메모리를 더 추가하는 것이 좋다.
SQL Server:Buffer Manager:Total Server Memory서버가 사용중인 총 동적 메모리 양을 모니터링 한다.
이 카운터가 실제 사용 가능한 메모리 양에 비해서 계속해서 높은 경우 메모리가 더 필요할
수도 있다.


스레드와 프로세서 사용 모니터링 
 
개체:카운터설명지침
Process:%Processor Time프로세서가 유휴 상태가 아닌 스레드를 처리하는 데 보내는 시간의 백분율을 모니터링 한다.이 카운터는 90%보다 작어야 한다. 이 카운터가 더 높으면 작업 부하를 낮추고 작업 부하의 효율성을 증가시키거나 프로세스 용량을 더 추가한다.
System:Context Switches/sec프로세스가 스레드 사이에서 전환하는 초당 횟수를 모니터링 한다.다중 프로세서 컴퓨터에서 이 카운터가 8000 에 도달하고 Processor:%Processor Time 카운터가 90%를 넘는 경우 SQL Server 파이버 모드 일정을 활성화 하는 것이 좋다.
System:ProcessorQueue Length프로세서 시간 동안 대기하는 스레드의 수를 모니터링 한다.이 카운터는 계속해서 2보다 크면 안 된다. 이 카운터가 계속해서 2보다 큰 경우에는 작업 부하를 낮추고 작업 부하의 효율성을 증가시키거나 다중 프로세서 시스템에서 프로세서 용량을 더 추가한다.
Processor:%Privileged Time프로세서가 특별 허가된 사간 동안 운영체제 커널 명령을 실행하면서 보내는 시간의 백분율을 모니터링 한다.프로세서 시간의 백분율이 대부분 시스템 커널 명령을 수행하는데 보내고 실제 하드 디스크 카운터가 높은 상태인 경우 하드 디스크 I/O 하위 시스템의 성능을 향상시키는 것이 좋다.
Processor:%User Time프로세서가 사용자 프로세스를 실행하면서 보내는 시간의 백분율을 모니터링 한다.이 카운터는 다른 프로세서나 응용 프로그램이 SQL Server 작업을 수행하고 있음을 알려준다.


디스크 I/O 모니터링 
 
개체:카운터설명지침
PhysicalDisk:%DiskTime하드디스크가 읽기/쓰기 요청을 서비스하는데 소요된 시간의 백분율을 모니터링 한다.이 카운터는 계속해서 90%보다 작아야 한다.
PhysicalDisk:Avg.DiskQueue Length대기하고 있는 평균 읽기/쓰기 요청 수를 모니터링 한다.이 카운터는 스핀들 수의 2배 정도여야 한다.
PhysicalDisk:DiskReads/sec읽기 작업의 속도를 모니터링 한다.이 카운터는 계속해서 하드 디스크 하위 시스템 용량보다 작아야 한다.
PhysicalDisk:DiskWrites/sec쓰기 작업의 속도를 모니터링 한다.이 카운터는 계속해서 하드 디스크 하위 시스템 용량보다 작아야 한다.


그외 SQL 관련 개체 
 

개체:카운터설명지침
SQL Server Access Methods:Skipped Ghosted Records/sec고스트 레코드를 마주 친 횟수데이터베이스 조각 모음이 필요하다.
DBCC DBREINDEX
SQL Server Buffer Manager:Checkpoint pages/sec체크포인트 발생 횟수
SQL Server Buffer Manager:Lazy Writes/secLazy write 발생횟수
SQL Server Database:Transactions/sec초당 트랜젝션 발생 수
SQL Server Database:Percent Log Used로그 사용률
SQL Server General Statistics:User Connections현재 연결된 사용자 수기본 값을 확보한 후 지나치게 많으면 connetion pooling을 사용하는지 점검한다.
SQL Server Lock에 있는 모든 카운터각 잠금 요청에 대한 평균 대기 시간기본 값 확보. 지나치게 느리면 블록킹이 발생하지 않았는지 확인한다. 이 부분에 있는 모든 카운터를 모니터하고 기본값을 확보하자.
SQL Server Statistics:SQL Compilations/sec초당 SQL 문의 컴파일 수(재컴파일로 인해 실행한 컴파일도 포함)서버 시작 초기에는 높고 점차 안정화 된다. 기본 값을 확보해 두자
SQL Server SQL Statistics:SQL Re-Compilations/sec초당 SQL 문의 재 컴파일 수적을 수록 좋다. 기본값 확보, 지나치게 높으면 프로시저를 일일이 살표볼 필요가 있다