Installing MySQL 5.1 on Solaris 10 using MOCA
Introduction
The following instructions will lay out an installation of MySQL on Solaris using the MySQL Optimal Configuration Architecture (MOCA) for someone knowledgeable in MySQL/Solaris administration. MOCA is a set of best practices I put together to lay out a guidelines for installing and configuring a MySQL database server. MOCA is designed for someone with experience with MySQL, it is not for someone brand new to MySQL.
If you are new to MySQL or to Solaris, I recommend using the default package install for MySQL. The MySQL default install is recommended for someone new to MySQL or the operating system platform. If the default package install makes more sense for you, then you can stop reading. This install is for MySQL 5.1.24 but it would be the same steps for the 5.1.30 installation.
Why Perform a Manual Install
The default install with MySQL is great for users new to MySQL. It is simple, requires a few point and clicks and you are up and running. The problem with a default install is that it is designed to be a very simple install and take minimum resources. The default install also puts MySQL files in different locations on the filesystem dependent on the OS release and platform. The default install is not how an experienced DBA would want to set up a production database environment. It is much better to be able to control the layout and configuration of the database software for production database environments and for platforms where multiple MySQL servers may be installed in the future.
- This install assumes you have a fundamental understanding of Solaris and have an understanding of MySQL database administration fundamentals. Oracle DBAs will find this installation very similar to the concepts of the Optimal Flexible Architecture (OFA).
- For experienced MySQL DBAs a manual install is much better. For this purpose I created a best practices configuration and white paper called MOCA (MySQL Optimal Configuration Architecture). This is based on DBA best practices and should be very similar to Oracle, DB2 and SQL Server production DBAs. There are certain fundamental truths about how database servers should be installed, configured and managed. My MOCA whitepaper addresses these fundamental truths. This manual install will follow MOCA standards and conventions.
Why MOCA?
- Separating database software from other software.
- Separating data and index files, log files for recovery, administration and backup files.
- Developing standard naming conventions.
- Defines a flexible configuration that can support multiple database servers on same platform.
- A consistent configuration for multiple servers and versions of MySQL database software.
Installation Summary
This installation looks more complex than it is. I use this configuration for all beginning MySQL DBA classes.
- Remove old versions of MySQL if they exist. Setup up operating system user mysql and mysql user environment.
- Set up directories and directory permissions for all MySQL data files.
- Setup MySQL software and install MySQL software as mysql operating system user (not as root). Configure the my.cnf configuration file.
- Create the mysql database (mysql_install_db) and setup the security environment (mysql_secure_installation). Start the mysql database server.
- Test the shutdown and startup of the database server.
Installation Environment
The environment for this installation is below: Mac OS 10(Leopard) running VM Fusion with Solaris 10 - Downloaded DVD iso image from www.sun.com website. I installed the Solaris 10 05/08 x86/x64 image for this demo (sol-10-u5-ga-x86-dvd.iso). MySQL 5.1 - Downloaded from dev.mysql.com.
- Before installing MySQL on my platform, make sure there are no previous versions of MySQL preinstalled. Unless you want the older version of MySQL, your life will be much easier if you remove any previous releases.
- Read through this installation a few times before starting.
Look for existing MySQL software
This install uses 5.1.24, these installation procedures can be used for any 5.1.x installation. Dependent on the version of Solaris, different packages may need to be installed or removed (old MySQL installations).
Check to see if you see MySQL on your current system.
# grep mysql /etc/passwd #
# find /usr/local -name '*mysql*' - print # look here for MacOS, Unix/Linux
# find /var -name '*mysql*' - print # good place to start with Solaris
# find / -name "*mysql*' - print # look everywhere for MySQL installations
VM Fusion Choices for Installing Solaris 10
My choices for installing Solaris 10 in a VM Fusion environment. During the installation you will be asked to hit F2 to continue. On a MAC that will be EscapeKey-2 or FN-F2. Solaris Interactive US-English Networked - DHCP IPv6 - No You may need to specify the amount of disk space to use. I allocated 10228 MB.
- You should now be able to log in as root. With Solaris choose the Java Desktop Environment or the Common Desktop Environment (CDE), this is a personal preference.
Removing older versions of MySQL
Check for MySQL packages installed and remove them.
# pkginfo | grep mysql
The following packages SUNWmysqlr, SUNWmysqlt, SUNWmysqlu were found and removed.
# pkgrm SUNWmysqlr
# pkgrm SUNWmysqlt
# pkgrm SUNWmysqlu
Remove old MySQL files from common directories.
# sudo rm /usr/local/mysql
# sudo rm -rf /Library/StartupItems/MySQLCOM/
Set up the mysql user. Start by checking to see if there is an existing MySQL user.
# grep mysql /etc/passwd
Setup new mysql user if one does not exist. If a mysql user does exist, set up a password, default shell, default directory, etc.
No mysql user was found so I added one. Add the mysql group, mysql user, password and home directory.
# groupadd -g 300 mysql
# useradd -u 300 -g 300 -d /export/home/mysql -s /usr/bin/bash -c "MySQL DBA" mysql
# passwd mysql
# mkdir /export/home/mysql
# chown -R mysql:mysql /export/home/mysql
Login and verify the mysql user setup
# exec login mysql (or su - mysql)
Then define a default profile file using your favorite text editor.
--- .bash_profile file ------
PS1='$PWD: '
MYSQL_BASE=/opt/mysql
MYSQL_HOME=/opt/mysql/5.1.24
export MYSQL_BASE MYSQL_HOME
PATH=$PATH:$MYSQL_HOME/bin
--- end of .bash_profile file -------
Set your environment by sourcing your profile file.
$ cd $MYSQL_HOME
$ . ./.bash_profile
Downloading MySQL
Go to http://dev.mysql.com and go to downloads. Find the distributions and choose the install release you want. I chose 5.1.24. I prefer a manual install so I choose the Solaris Tar Packages the Solaris 10 64-bit install. Select a mirror. On the Select a Mirror page, I No thanks, just take me to the downloads!
MySQL Directory Organization
Organize how MySQL files and software will be located:
/opt/mysql/5.1.24 - Symbolic link to software directory location
/db01/mysql/mysql01/data - data directory
/db02/mysql/mysql01/binlogs - location of binary log files
/db03/mysql/mysql01/admin - main administration directory
/db04/mysql/mysql01/backups - location of backup files
I created the following directories to download the MySQL software in /opt/mysql/5.1.24.
# mkdir -p /opt/mysql/5.1.24
# export MYSQL_NAME=mysql01
Setup data directory structure
# mkdir -p /db01/mysql/$MYSQL_NAME/data
Setup mysql administration directory structure
# mkdir -p /db03/mysql/$MYSQL_NAME
# mkdir /db03/mysql/$MYSQL_NAME/logs
# mkdir /db03/mysql/$MYSQL_NAME/errors
# mkdir /db03/mysql/$MYSQL_NAME/sql
# mkdir /db03/mysql/$MYSQL_NAME/startup
# mkdir /db03/mysql/$MYSQL_NAME/run
Setup binary log structure
# mkdir -p /db02/mysql/$MYSQL_NAME/binlogs
Setup backup directory structure for backups and exports.
# mkdir -p /db04/mysql/$MYSQL_NAME
# mkdir /db04/mysql/$MYSQL_NAME/backups
# mkdir /db04/mysql/$MYSQL_NAME/exports
Set permissions and ownership for MySQL file directories.
# chmod -R 750 /db*/mysql/* /opt/mysql/*
# chown -R mysql:mysql /db*/mysql/* /opt/mysql/*
Before going further
Double check all paths. When you try to bring up database server, if it defaults to the default areas its because it can;t find a directory or doesn't have permission for directories specified so it will then try the default locations.
All following commands are run as the mysql OS user.
In the /opt/mysql directory unzip and untar the MySQL software as the mysql OS user.
$ cd /opt/mysql
$ gunzip mysql-5.1.24-rc-solaris10-x86_64.tar.gz
$ tar xvf mysql-5.1.24-rc-solaris10-x86_64.tar
$ ln -s mysql-5.1.24-rc-solaris10-x86_64 5.1.24
$ cp $MYSQL_HOME/support-files/my-small-cnf /dbadmin/mysql/mysql/startup/my.cnf
[mysqld]
log-error=/db03/mysql/mysql01/errors/mysql5.1.24.err
pid-file=/db03/mysql/mysql01/localhost.pid
datadir=/db01/mysql/mysql01/data
basedir=/opt/mysql/5.1.24
log-bin=/db02/mysql/mysql01/mysql-bin
port = 3426
#socket=/dbadmin/mysql/mysql01/run/mysql.sock
Add the following entries to the my.cnf file to the [client] group.
[client]
port = 3426
#socket = /dbadmin/mysql/mysql01/run/mysql.sock
Build a symbolic link from the default location to the real startup file. The step of adding a symbolic to the actual startup file is something I avoid but some environments like this addition.
$ cd $MYSQL_HOME
$ ln -s /dbadmin/mysql/mysql01/startup/my.cnf my.cnf
Create the mysql database files for the MySQL instance. This will create the default database schemas and database files.
$ scripts/mysql_install_db --datadir=/db01/mysql/mysql01/data --basedir=$MYSQL_HOME
Verify data files and directories have been created in the datadir directory.
$ cd /db01/mysql/mysql01/data
$ ls
ib_logfile0 ib_logfile1 ibdata1 mysql test
Start the MySQL database server pointing to the defined locations.
$ cd /opt/mysql/5.1.24
$ bin/mysqld_safe --defaults-file=/dbadmin/mysql/mysql01/startup/my.cnf &
If there are socket errors:
i.e. MySQL client cannot star twith the error "cannot connect to the MySQL server through socket <filename>
Solution:
MySQL needs to write to a socket. If you don't specify one, a default one is chosen which may not have the appropriate permissions. You can specify the socket file in the command line as below. Make sure the permissions are set properly (owned by mysql).
$ mysql -uroot -p -socket=/dbadmin/mysql/mysql01/run/mysql.sock
$ ps -ef |grep mysql
Clean up the database server by adding passwords and getting rid of anonymous users. If there are problems with the mysql_secure_installation script, then set the password manually and get rid of the anonymous accounts and any accounts with no passwords.
$ cd $MYSQL_HOME
$ bin/mysql_secure_installation
$ mysqladmin --defaults-file= /dbadmin/mysql/mysql01/startup/my.cnf shutdown
$ cd $MYSQL_HOME
$ bin/mysqld_safe --defaults-file= /dbadmin/mysql/mysql01/startup/my.cnf
This does not work exactly as stated. All entries of "/dbadmin/mysql/mysql/startup/my.cnf" should be "/dbadmin/mysql/mysql/run/my.cnf" as there is no startup directory (versioning error in the guide?)
Also, when I ran this I got the following error in my /dbadmin/mysql/mysql/errors/mysql5.1.25.err:
080624 11:56:48 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
This is because it requires the database be available before mysqld_safe is run. Running the following command before running mysqld_safe fixed the problem.
./scripts/mysql_install_db --datadir=/db01/mysql/mysql/data
Otherwise, works as expected on Solaris 10 5/08 with MySQL 5.1.25
Posted by Andrew D. on June 24, 2008 at 10:23 AM MDT #
Howdy George!
I found a typo, you created mysql group and user but never assigned the group to user:
#useradd -u 300 -d /export/home/mysql -s /usr/bin/bash -c "MySQL DBA" mysql
Need to add -g 300.
Thanks!
Wences
Posted by Wences Michel on December 21, 2008 at 10:35 AM MST #
Thanks Wences! I'll make the change now.
Posted by George Trujillo Jr on December 21, 2008 at 10:43 AM MST #
Howdy George!
Figure it out my previous posting and got it running. Did something tto the effect below:
#mkdir /db03/mysql/mysql01/admin
#mkdir -p /dbadmin/mysql
#su - mysql
>cd /dbadmin
>ln -s /db03/mysql/mysql01 ./
>cp $MYSQL_HOME/support-files/my-small.cnf /dbadmin/mysql/mysql/startup/my.cnf
+++++++++++++
also another typo, my-small.cnf, not my-small-cnf for:
$ cp $MYSQL_HOME/support-files/my-small-cnf /dbadmin/mysql/mysql/startup/my.cnf
should be my-small.cnf
++++++++++++++
Posted by Wences Michel on December 21, 2008 at 03:20 PM MST #
Thank you for this blog
I found it very helpful
Posted by Douglas on February 02, 2009 at 06:49 AM MST #
bash-3.00# ./mysql_install_db --datadir=/usr/local/mysql/data
./mysql_install_db: /usr/local/bin/hostname: cannot execute
WARNING: The host '' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
090322 23:36:12 [Warning] option 'max_join_size': unsigned value 184467440737095 51615 adjusted to 4294967295
090322 23:36:12 [Warning] option 'max_join_size': unsigned value 184467440737095 51615 adjusted to 4294967295
OK
Filling help tables...
090322 23:36:12 [Warning] option 'max_join_size': unsigned value 184467440737095 51615 adjusted to 4294967295
090322 23:36:12 [Warning] option 'max_join_size': unsigned value 184467440737095 51615 adjusted to 4294967295
OK
what is the problem?
thanks
Posted by seyfullah baskoylu on March 22, 2009 at 03:38 PM MDT #