systemadmin.es > Instalaciones > Instalación de MySQL 5.6 en CentOS 6 con upstart

Instalación de MySQL 5.6 en CentOS 6 con upstart

Vamos a ver cómo instalar MySQL 5.6 desde código fuente en CentOS 6 y con upstart, deshabilitando storage engines que son poco usados

También están disponibles las instalaciones de MySQL 5.1 en CentOS 5 y de MySQL 5.5 en CentOS 5 y tambien MySQL 5.5 en CentOS 6.

Descargamos el código en /usr/local/src y descomprimimos:

mkdir -p /usr/local/src
cd /usr/local/src
wget wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz
tar xzf mysql-5.6.15.tar.gz
cd mysql-5.6.15

A continuación podemos aplicar el patch para que el número de conexiones SUPER por encima de max_connections sea configurable y aplicamos el parche:

svn export http://nagios-systemadmin.googlecode.com/svn/trunk/patchs/mysql.56.max_super_connections.patch 
patch -p1 < mysql.56.max_super_connections.patch 

La instalación la haremos con las siguientes características:

  • Instalamos en /usr/local/mysql56, para poder tener en el mismo servidor varias versiones
  • Definimos el datadir por defecto en /var/mysql
  • Deshabilitamos Storage Engines que se usan raramente: Federated, BlackHole y Archive

Primero compilaremos e instalaremos el software:

cmake . -DMYSQL_DATADIR=/var/mysql/ -DENABLE_DEBUG_SYNC=0 \
        -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 \
        -DWITH_UNIT_TESTS=0 -DWITH_FEDERATED_STORAGE_ENGINE=0 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=0 -DENABLE_DTRACE=0 \
        -DCMAKE_BUILD_TYPE=Release
make && make install

A continuación prepararemos el entorno de ejecución:

'cp' support-files/my-medium.cnf /etc/my.cnf
unlink /usr/local/mysql 2>/dev/null
ln -s /usr/local/mysql56 /usr/local/mysql
groupadd mysql
useradd -g mysql mysql
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
mkdir /var/mysql -p
chown mysql. /var/mysql/
mkdir /var/log/mysql -p
chown mysql. /var/log/mysql/

A continuación configuramos el MySQL con las siguientes características por defecto:

  • Deshabilitar que escuche a un puerto TCP, por lo tanto dejando únicamente la conexión por socket
  • Habilitar el log de slow queries a 1 segundo
  • Deshabilitar el binary log
  • Definir el usuario que usará el MySQL para ejecutar-se sea "mysql" (en los comandos anteriores ya hemos hecho el useradd)
  • Usar el innodb_flush_method a O_DIRECT para evitar el problema del doble buffering
  • Habilitar un tablespace por table (innodb_file_per_table)

Los comandos son:

sed 's@^\(skip-external-locking\)@\1\n\ndatadir=/var/mysql\nlog_error = /var/log/mysql/mysql.log\n\n#slow queries\nlong_query_time=1\nslow_query_log=1\nslow_query_log_file=/var/log/mysql/mysql.slow.log\n@' -i /etc/my.cnf
sed -i 's/^#\(skip-networking\)/\1\nskip-name-resolve/' /etc/my.cnf
sed -i 's/^log-bin/#log-bin/' /etc/my.cnf
sed -i 's/^binlog_format/#binlog_format/' /etc/my.cnf
sed -i 's#^\[mysqld\]#\[mysqld\]\nuser = mysql#' /etc/my.cnf
sed -i 's/\(#innodb_lock_wait_timeout.*\)/\1\ninnodb_file_per_table\ninnodb_flush_method=O_DIRECT\n\n/' /etc/my.cnf

Seguimos preparando el datadir para arrancar la base de datos:

cd /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql \
                                          --datadir=/var/mysql \
                                          --basedir=/usr/local/mysql

Y preparamos en entorno para el uso de MySQL:

ln -s /usr/local/mysql/lib /usr/local/mysql/lib64
sed -i 's#unset pathmunge#pathmunge /usr/local/mysql/bin\nunset pathmunge#' /etc/profile
sed -i 's#unset -f pathmunge#pathmunge /usr/local/mysql/bin\nunset pathmunge#' /etc/profile
echo "alias mysql='mysql -u root -p\$(cat /var/mysql/.mysql.root.pass)'" >> /etc/profile.d/mysql.sh
. /etc/profile
. /etc/profile.d/mysql.sh
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf.d/mysql.conf
ldconfig

Preparamos el MySQL para ser ejecutado mediante upstart y lo arrancamos:

cat <<EOF > /etc/init/mysql.conf
start on runlevel 3

respawn

exec /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
EOF
initctl start mysql
sleep 5

Finalmente, definimos un password de root para el usuario de MySQL (/var/mysql/.mysql.root.pass) y eliminamos las cuentas de usuario sin contraseña y la base de datos test:

pwgen 20 > /var/mysql/.mysql.root.pass
chmod 600 /var/mysql/.mysql.root.pass
/usr/local/mysql/bin/mysqladmin -u root password $(cat /var/mysql/.mysql.root.pass)
echo 'delete from mysql.user where Password="";' | mysql
echo 'drop database test;' | mysql
echo 'flush privileges;' | mysql

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>