Tag Archives: Installation

18 Nov

10 Steps: MySQL Monitoring through Nagios: Install & Configure

Nagios is a powerful monitoring system and here we will learn how to monitor MySQL through Nagios. We will be installing Nagios, required plugins and configuring it to monitor MySQL Database Server.

Let’s unleash the power step by step:

Installing and configuring Nagios

Step-1 : Install required stuff:
yum install httpd
yum install gcc
yum install glibc*
yum install gd*

Step-2 :Create Nagios user account and group
useradd nagios
passwd nagios
groupadd nagcmd
usermod -G nagcmd nagios
usermod -G nagcmd apache

Step-3: Downloads:
Create directory:
mkdir NagiosSetup
cd NagiosSetup

Download nagios
wget -X Get "http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nagios-3.2.1.tar.gz/download"

Download Nagios Plugins:
wget -X Get "http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz/download"

Follow up articles:
1: Installing Percona Monitoring Tools for MySQL Nagios.
2: Adding remote MySQL Host to Nagios Setup.

Step-4: Install Nagios

tar -xzvf nagios-3.2.1.tar.gz
cd nagios-3.2.1
./configure --with-command-group=nagcmd
make all
make install
make install-config
make install-commandmode
make install-init
chkconfig --add nagios

[If you miss step “make install-init” you may get:: error reading information on service nagios: No such file or directory ]

Configure Nagios Web Interface:
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

[specify password for nagios admin]

Step-5: Install plugins
tar xvf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

Step-6: Verify Installation, Starting nagios for the first time

service nagios start
Browse: http://localhost/nagios

Here if you get Error:
“You don’t have permission to access /nagios/ on this server.”

Check /etc/httpd/conf/httpd.conf for DirectoryIndex.
If it’s not having index.php add it as follows:

vi /etc/httpd/conf/httpd.conf
DirectoryIndex index.php index.html index.html.var

Make sure you do restart apache(httpd) and nagios every time you change the config file. You must have php installed.

Monitoring MySQL:

Step-7: Download, Extract and install the MySQL Plugin:

wget http://labs.consol.de/wp-content/uploads/2010/10/check_mysql_health-2.1.3.tar.gz

tar -zxvf check_mysql_health-2.1.3.tar.gz
cd check_mysql_health-2.1.3
./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-perl=/usr/bin/perl
make
make install

Step-8: Create database user:
grant usage, replication client on *.* to 'nagios'@'localhost' identified by 'nagios';

Step-9: Provide email address for nagiosadmin:
[Change contacts.cfg file accordingly.]
vi /usr/local/nagios/etc/objects/contacts.cfg

define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Kedar ; Full name of user
email kedar@nitty-witty.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}

Step-10: Configuring Nagios to Monitor MySQL Server

vi /usr/local/nagios/etc/nagios.cfg
add following line:
cfg_file=/usr/local/nagios/etc/objects/mysqlmonitoring.cfg

Define check_mysql_health command as follows:

vi /usr/local/nagios/etc/objects/commands.cfg

define command{
command_name check_mysql_health
command_line $USER1$/check_mysql_health -H $ARG4$ --username $ARG1$ --password $ARG2$ --port $ARG5$ --mode $ARG3$
}

Enter services to be monitored in mysqlmonitoring.cfg:

vi /usr/local/nagios/etc/objects/mysqlmonitoring.cfg
Add:

define service{
use local-service
host_name localhost
service_description MySQL connection-time
check_command check_mysql_health!nagios!nagios!connection-time!127.0.0.1!3306!
}


define service{
use local-service
host_name localhost
service_description MySQL slave-io-running
check_command check_mysql_health!nagios!nagios!slave-io-running!127.0.0.1!3306!
}


define service{
use local-service
host_name localhost
service_description MySQL slave-sql-running
check_command check_mysql_health!nagios!nagios!slave-sql-running!127.0.0.1!3306!
}

Here we’ve monitored 3 services: Connection-time, io thread and sql thread (replication) status. You can monitor more parameters described here: http://labs.consol.de/nagios/check_mysql_health/

Note: Every time you change configuration file, verify before starting nagios using command:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Finally start nagios service and you’re done with nagios installation and configuration for monitoring MySQL.

Download PDF

I hope you’ve found this useful.

28 Oct

Installing MySQL On Mac OS X (Darwin Kernel)

Recently I happen to install MySQL on Mac OS X (Darvin Kernel).  Below are the quick 5 steps to accomplish the task.

Step 1: Check Mac Version
Very first step is to verify the Mac OS X’s current version to decide MySQL Installation file to be downloaded.
For example for Mac version: 10.4 you should download “Mac OS X 10.4 (x86, 32-bit), Compressed TAR Archive (mysql-5.1.51-osx10.4-i686.tar.gz)”

How to Check Mac Version:
cat /System/Library/CoreServices/SystemVersion.plist

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"

"http://www.apple.com/DTDs/PropertyList-1.0.dtd">

</p> <plist version="1.0"> <dict>

<key>ProductBuildVersion</key>  <string>8S2169</string>

<key>ProductCopyright</key><string>1983-2007 Apple Inc.</string>

<key>ProductName</key> <string>Mac OS X</string>

<key>ProductUserVisibleVersion</key> <string>10.4.11</string>

<key>ProductVersion</key> <string>10.4.11</string> </dict>

Installation Error:

dyld: unknown required load command 0x80000022

I ran in to problems while I installed MySQL for Mac OS X 10.5. Ofcourse I missed the step one and paid for it.
It’s about MySQL binary’s version difference errors: “dyld: unknown required load command 0x80000022”.

Step 2: Download MySQL Installation (tar.gz) file from dev.mysql’s download section.
For example go to: http://dev.mysql.com/downloads/mysql/5.1.html

Select appropriate OS & version and get the exact download link from mirror:

cd /usr/local/
wget http://dev.mysql.com/get/Downloads/
MySQL-5.1/mysql-5.1.51-osx10.4-i686.tar.gz/from/http://mysql.mirror.rafal.ca/

Step 3: Create MySQL User and Group.

Through command line we can use NetInfo Utility as:
niutil -create / /groups/mysql
niutil -createprop / /groups/mysql gid 401
niutil -create / /users/mysql
niutil -createprop / /users/mysql gid 401
niutil -createprop / /users/mysql uid 401

Assign password to “mysql” user
passwd mysql

Step: 4 Installing MySQL using Generic Binaries
cd /usr/local
tar -xzvf mysql-VERSION-OS.tar.gz
ln -s full-path-to-mysql-VERSION-OS mysql
cd mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf

Step: 5 Start MySQL Server:

bin/mysqld_safe –user=mysql &

This finishes basic installation of MySQL on Mac OS X. Make sure you follow “best practices” or “after installation steps” as recommended.

Recently I happen to install MySQL on Mac OS X (Darvin Kernel). Below are the quick 5 steps to accomplish the task.

<strong>Step 1:  Check Mac Version</strong>
Very first step is to verify the Mac OS X’s current version to decide MySQL Installation file to be downloaded.
For example for Mac version: 10.4 you should download “Mac OS X 10.4 (x86, 32-bit), Compressed TAR Archive (mysql-5.1.51-osx10.4-i686.tar.gz)”

How to Check Mac Version:
<code>cat /System/Library/CoreServices/SystemVersion.plist
<xmp>
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>ProductBuildVersion</key>
<string>8S2169</string>
<key>ProductCopyright</key>
<string>1983-2007 Apple Inc.</string>
<key>ProductName</key>
<string>Mac OS X</string>
<key>ProductUserVisibleVersion</key>
<string>10.4.11</string>
<key>ProductVersion</key>
<string>10.4.11</string>
</dict></code>
</xmp>

Installation Error: <h2>dyld: unknown required load command 0x80000022<h2>
I ran in to problems while I installed MySQL for Mac OS X 10.5. Ofcourse I missed the step one and paid for it.
It’s about MySQL binary’s version difference errors: “dyld: unknown required load command 0x80000022”.

<strong>Step 2: Download MySQL Installation (tar.gz) file from dev.mysql’s download section.</strong>
For example go to: http://dev.mysql.com/downloads/mysql/5.1.html

Select appropriate OS & version and get the exact download link from mirror:
<code>
cd /usr/local/
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.51-osx10.4-i686.tar.gz/from/http://mysql.mirror.rafal.ca/</code>

<strong>Step 3: Create MySQL User and Group.</strong>

Through command line we can use NetInfo Utility as:
<code>niutil -create / /groups/mysql
niutil -createprop / /groups/mysql gid 401
niutil -create / /users/mysql
niutil -createprop / /users/mysql gid 401
niutil -createprop / /users/mysql uid 401</code>

Assign password to “mysql” user
passwd mysql

<strong>Step: 4   Installing MySQL using Generic Binaries</strong>
<code>cd /usr/local
tar -xzvf mysql-VERSION-OS.tar.gz
ln -s full-path-to-mysql-VERSION-OS mysql
cd mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db –user=mysql
chown -R root .
chown -R mysql data
cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf</code>

<strong>Step: 5     Start MySQL Server:</strong>

bin/mysqld_safe –user=mysql &

This finishes basic installation of MySQL on Mac OS X. Make sure you follow “best practices” or “after installation steps” as recommended.

04 Nov

Quick Multi MySQL Server Installation with Master-Master Replication on Same Windows Box

This article is a brief step-by-step tutorial on the subject task which is divided into the following main parts:

  • Installing two MySQL Server Instances
  • Setting up master-slave replication
  • Setting up slave-master replication

Let’s begin covering those points…

Installing Two MySQL Server Instances on Windows:

1. Install MySQL:

  • Download MySQL Binaries from dev.mysql.com.
  • Install normal MSI Package of mysql. (I used: mysql-essential-5.0.83-win32).

* Following MSI Installation is quite easy, proceed and finish the installation.
This server will be installed on default 3306 port with all windows default settings.

2. Register/Install another MySQL instance:

To have two servers we make sure to have separate values of port, datadir etc. Please check the configuration file for according changes.

Create a duplicate of /etc/my.cnf as /etc/my2.cnf and make according changes.

mysqld-nt.exe –install “MySQL1″ –defaults-file=”C:\Program Files\MySQL\MySQL Server 5.0\my2.ini”

This will register the mysql1 service, and thus we’ll end up having two mysql instances on windows.

3. Start Both MySQL Servers:

net start mysql
net start mysql1

4. Check connecting client from command prompt:

mysql -uroot -p –port=3306
mysql -uroot -p –port=3307

* It will prompt for password, on success you will end up logging in both mysql servers.

Setting up Master-Master Replication on Windows – Single machine:

Setting up Master-Master Replication mainly consists of getting both servers to perform Master and Slave Replication Roles.

For replication I have used database named ‘master’ having table named ‘test’ with following structure:

Create database master;
Use master;
CREATE TABLE `temp` (
`id` int(10) NOT NULL auto_increment,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Here we’ve two MySQL server instances, namely mysql and mysql1.

We will setup Master-Slave Replication from mysql1 to mysql. Later we will setup Master-Slave Replication from mysql to mysql1.
For your reference please check the appendix section for sample configuration files along with below mentioned instructions.

1. Setting Master Slave “mysql1 –> mysql”:

Considering:

mysql1 @ port: 3307 as Master
mysql @ port: 3306 as Slave

– On mysql1(master): Add following line to my.ini:

binlog-do-db=master

– We require a ‘Replication Slave’ privileged user on Master for slave to connect:

mysql> Grant replication slave on *.* to ‘replication1’@’localhost’ identified by ‘slave1’;

On mysql(slave):
– Add following line to my.ini:

#Conn. Pmtr for slave:

master-host = localhost
master-user = replication1
master-password = slave1
master-port = 3307

*It’s not a good idea to add such parameters in configuration file; but this is just learning purpose. Use CHANGE MASTER& command.

– Start Slave Server:

net start mysql

– On Slave Client:

mysql>Start Slave;

** Check for working Master-Slave Replication.**
** Stop both MySQL Servers **

2. Setting Slave Master “mysql1 <– mysql” :


Considering:

mysql1 @ port: 3307 as Slave
mysql @ port: 3306 as Master

– On mysql(master) Add following line to my.cnf:

binlog-do-db=master

– Start Master Server:

net start mysql1

– We require a ‘Replication Slave’ privileged user:

mysql> Grant replication slave on *.* to ‘replication2’@’localhost’ identified by ‘slave2’;

– On mysql1 (slave):
Add following line to my.cnf:

#Conn. Pmtr for slave:

master-host = localhost
master-user = replication2
master-password = slave2
master-port = 3306

– Start Slave Server:

net start mysql

– On Slave client:

mysql>Start Slave;

** Check for working Master-Slave **
** Check for working Master-Master **

And that’s it.  We now have two different instances of MySQL server running with a Master-Master replication scheme.  Hopefully, you found this tutorial helpful.  Please see examples of the final configuration files in the appendix below along with references for more information regarding this topic.

Appendix: Configuration Files for master-master mysql setup:

Following is the my.ini [configuration] file for first MySQL Server Instance:

##my.ini for mysql (Regularly installed):
[client]
port=3306
[mysqld]
server-id=2
port=3306
# Replication
log-bin=binlog
#For this as master:
binlog-do-db=master
binlog-ignore-db=mysql
binlog-ignore-db=test
#Conn. Pmtr for slave:
master-host = localhost
master-user = replication1
master-password = slave1
master-port = 3307
basedir=”C:/Program Files/MySQL/MySQL Server 5.0/”
datadir=”C:/Program Files/MySQL/MySQL Server 5.0/Data/”
auto_increment_increment=1
auto_increment_offset=1

Following is the my2.ini [configuration] file for second MySQL instance named “mysql1”:

##my2.ini for Mysql1:
[client]
port=3307
[mysqld]
server-id=1
port=3307
# Replication
log-bin=binlog
#For this as master:
binlog-do-db=master
binlog-ignore-db=mysql
binlog-ignore-db=test
#Conn. Pmtr for slave:
master-host = localhost
master-user = replication2
master-password = slave2
master-port = 3306
basedir=”C:/Program Files/MySQL/MySQL Server 5.0/”
datadir=”C:/Program Files/MySQL/MySQL Server 5.0/Data1/”
auto_increment_increment=1
auto_increment_offset=2

References:

  1. http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
  2. http://dev.mysql.com/doc/refman/5.0/en/multiple-windows-servers.html
  3. http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html
  4. http://dev.mysql.com/doc/refman/5.0/en/replication-options-master.html#sysvar_auto_increment_increment
-- Kedar Vaijanapurkar --