Changes

From SME Server
Jump to navigationJump to search
10,753 bytes removed ,  00:09, 12 January 2014
move mariadb to its own page
Line 1: Line 1: −
==Install mariadb 'alongside' mysql==
+
Mariadb notes moved to [[MariaDB_alongside_MySQL]]
MariaDB is a drop in place replacement for MySQL, but you can also install it alongside MySQL.
  −
 
  −
Installing another SQL database server 'alongside' the built-in SME MySQL server allows a SME admin to use web apps that are incompatible with the Centos/SME version of MySQL without making potentially destabilizing changes to core server components.
  −
 
  −
MariaDB or MySQL can both be installed in an alongside or side-by-side configuration, but MariaDB maintains binary executables compatible with CentOS 5 & 6 and MySQL does not (at least, I could not find any).
  −
 
  −
===Installation===
  −
These installation notes are taken from https://mariadb.com/kb/en/installing-mariadb-alongside-mysql/
  −
 
  −
IMPORTANT: Do not use yum for an 'alongside' ('side-by-side') installation of mariadb.
  −
 
  −
====Create service account====
  −
Create a user named '''mariadb''' in server-manager.  This user account will be used by mariadb when running, and does not need to have a password set.
  −
 
  −
SME will create a group of the same name automatically.
  −
 
  −
====Download MariaDB and extract into /opt====
  −
 
  −
<nowiki>mkdir -p ~/addons
  −
cd ~/addons
  −
RELEASE=5.5.34
  −
wget https://downloads.mariadb.org/interstitial/mariadb-$RELEASE/kvm-bintar-hardy-x86/mariadb-$RELEASE-linux-i686.tar.gz/from/http://mirror.jmu.edu/pub/mariadb
  −
cd /opt
  −
tar zxvf ~/addons/mariadb-$RELEASE-linux-i686.tar.gz</nowiki>
  −
 
  −
====Create folders and links====
  −
 
  −
<nowiki>RELEASE=5.5.34
  −
cd /opt
  −
ln -s mariadb-$RELEASE-linux-i686 mariadb
  −
mkdir mariadb-data
  −
#
  −
mkdir -p /var/run/mariadb</nowiki>
  −
 
  −
====Setup my.cnf and init.d====
  −
'''Important''': On a SME server, 'pid-file' must be specified in /opt/mariadb-data/my.cnf to override the SME default value in /etc/my.cnf
  −
 
  −
'''/opt/mariadb-data/my.cnf'''
  −
<nowiki>'cp' -f /opt/mariadb/support-files/my-medium.cnf /opt/mariadb-data/my.cnf
  −
sed -i -e '/^port.*3306$/ s/= 3306/= 3307/' /opt/mariadb-data/my.cnf
  −
sed -i -e '/^socket.*= \/tmp\/mysql.sock/ s~= /tmp/mysql.sock~= /opt/mariadb-data/mariadb.sock~' /opt/mariadb-data/my.cnf
  −
#
  −
BASEDIR='basedir\t\t= /opt/mariadb'
  −
DATADIR='datadir\t\t= /opt/mariadb-data'
  −
USER='user\t\t= mariadb'
  −
PIDFILE='pid-file\t= /var/run/mariadb/mariadb.pid'
  −
sed -i -e "/^\[mysqld\]$/ s~\[mysqld\]~\[mysqld\]\n$DATADIR\n$BASEDIR\n$USER\n$PIDFILE~" /opt/mariadb-data/my.cnf</nowiki>
  −
Note: The last 'sed' command will add lines for basedir, datadir, user, and pid into my.cnf every time it is run, even if these lines already exist.
  −
 
  −
'''/etc/rc.d/init.d/mariadb'''
  −
<nowiki>'cp' -f /opt/mariadb/support-files/mysql.server /etc/rc.d/init.d/mariadb
  −
sed -i "s~^# Provides: mysql$~# Provides: mariadb~" /etc/rc.d/init.d/mariadb
  −
sed -i "s~^basedir=$~basedir=/opt/mariadb~"          /etc/rc.d/init.d/mariadb
  −
sed -i "s~^datadir=$~datadir=/opt/mariadb-data~"      /etc/rc.d/init.d/mariadb
  −
sed -i "s~lockdir/mysql~lockdir/mariadb~"        /etc/rc.d/init.d/mariadb
  −
sed -i "s~bindir/mysqld_safe\ --datadir~bindir/mysqld_safe\ --defaults-file=/opt/mariadb-data/my.cnf\ --datadir~" /etc/rc.d/init.d/mariadb</nowiki>
  −
 
  −
====file and folder ownership====
  −
<nowiki>RELEASE=5.5.34
  −
chown -R mariadb:mariadb mariadb-data mariadb mariadb-$RELEASE-linux-i686
  −
chown mariadb:mariadb /var/run/mariadb</nowiki>
  −
 
  −
====Initialize Environment====
  −
 
  −
<nowiki>cd /opt/mariadb
  −
scripts/mysql_install_db --defaults-file=/opt/mariadb-data/my.cnf</nowiki>
  −
 
  −
====Start Server====
  −
/etc/rc.d/init.d/mariadb start
  −
 
  −
====set mariadb root password====
  −
A freshly installed mariadb server has no password set for the root user.
  −
 
  −
In order secure your mariadb server yet easily manage mariadb set the root password for mariadb to match the SME mysql root password.
  −
 
  −
SME has a template-driven sql command specifically for setting the root password:
  −
<nowiki>CONNECT=--socket=/opt/mariadb-data/mariadb.sock
  −
mysql $CONNECT -password="" < /var/service/mysqld/set.password</nowiki>
  −
 
  −
====Testing====
  −
If you set the mariadb root password as shown above you can verify the versions of mysql and mariadb as described in the howto:
  −
<nowiki># show mysql version
  −
mysql -e "SELECT VERSION();"</nowiki>
  −
 
  −
<nowiki># show mariadb version
  −
CONNECT=--socket=/opt/mariadb-data/mariadb.sock
  −
mysql -e "SELECT VERSION();" $CONNECT</nowiki>
  −
 
  −
Here are alternative ways to show the mariadb version:
  −
<nowiki># show mariadb version using TCP on port 3307
  −
CONNECT="--protocol=TCP --port=3307"
  −
mysql -e "SELECT VERSION();" $CONNECT
  −
 
  −
# command lines to check mariadb versions
  −
mysql -e "SELECT VERSION();" --protocol=TCP --port=3307
  −
mysql -e "SELECT VERSION();" --socket=/opt/mariadb-data/mariadb.sock</nowiki>
  −
 
  −
====Configure to start at boot====
  −
<nowiki>cd /etc/init.d
  −
chkconfig --add mariadb
  −
chkconfig --levels 3 mariadb on
  −
# SME Server uses runlevel 7...
  −
cp /etc/rc3.d/S64mariadb /etc/rc7.d</nowiki>
  −
 
  −
 
  −
====Raw notes====
  −
<nowiki>
  −
#####################################################################################
  −
# BEGIN
  −
#####################################################################################
  −
# yum repos aren't useful; use the side-by-side install
  −
# Install mariadb side-by-side with mysql on SME Server v8
  −
# From: https://mariadb.com/kb/en/installing-mariadb-alongside-mysql/
  −
#
  −
# create user 'mariadb' in server-manager
  −
#
  −
cd ~
  −
mkdir -p addons
  −
cd addons
  −
RELEASE=5.5.34
  −
wget https://downloads.mariadb.org/interstitial/mariadb-$RELEASE/kvm-bintar-hardy-x86/mariadb-$RELEASE-linux-i686.tar.gz/from/http://mirror.jmu.edu/pub/mariadb
  −
cd /opt
  −
tar zxvf ~/addons/mariadb-$RELEASE-linux-i686.tar.gz
  −
ln -s mariadb-$RELEASE-linux-i686 mariadb
  −
mkdir mariadb-data
  −
cp mariadb/support-files/my-medium.cnf mariadb-data/my.cnf
  −
#
  −
# edit my.cnf as described on the mariadb-alongside-mysql howto (link above)
  −
chown -R mariadb:mariadb mariadb-data mariadb mariadb-$RELEASE-linux-i686
  −
#
  −
cp mariadb/support-files/mysql.server /etc/init.d/mariadb
  −
chmod +x /etc/init.d/mariadb
  −
#
  −
# edit /etc/init.d/mariadb as described in the howto
  −
#
  −
cd /opt/mariadb
  −
scripts/mysql_install_db --defaults-file=/opt/mariadb-data/my.cnf
  −
cd /etc/init.d
  −
chkconfig --add mariadb
  −
chkconfig --levels 3 mariadb on
  −
# SME Server uses runlevel 7...
  −
mv /etc/rc3.d/S64mariadb /etc/rc7.d
  −
#
  −
# customizations not mentioned in the howto:
  −
mkdir /var/run/mariadb
  −
chown mariadb:mariadb /var/run/mariadb
  −
#
  −
# customize the execution line in /etc/init.d/mariadb
  −
#
  −
# version from howto:
  −
#  $bindir/mysqld_safe --defaults-file=/opt/mariadb-data/my.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
  −
#
  −
# version I'm using:
  −
# $bindir/mysqld_safe --defaults-file=/opt/mariadb-data/my.cnf --datadir="/opt/mariadb-data" --pid-file="/var/run/mariadb/mariadb.pid" $other_args >/dev/null 2>&1 &
  −
#
  −
# Finally, testing access requires asking for a password, then entering an empty password (SME feeds the 'root'@'localhost' password to mysql by default:
  −
# mysql -e "SELECT VERSION();" --port=3307 --protocol=TCP -p
  −
#
  −
# set root password in mariadb same as root password in mysql
  −
mysql --port=3307 --protocol=TCP -p < /var/service/mysqld/set.password
  −
#
  −
# Now the example version check from the howto works:   
  −
mysql -e "SELECT VERSION();" --socket=/opt/mariadb-data/mariadb.sock
  −
</nowiki>
  −
 
  −
===Gotchas===
  −
====my.cnf====
  −
I have not copied the customization instructions for my.cnf from the mariadb howto page.
  −
 
  −
Be sure to make all of the changes to my.cnf suggested.
  −
 
  −
https://mariadb.com/kb/en/installing-mariadb-alongside-mysql/
  −
 
  −
====/var/run/mariadb====
  −
I could not get mariadb to run until I manually created the folder for the process id file.
  −
<nowiki>mkdir /var/run/mariadb
  −
chown mariadb:mariadb /var/run/mariadb</nowiki>
  −
 
  −
====/etc/rc.d/init.d/mariadb====
  −
After adding '''pid-file = /var/run/mariadb/mariadb.pid''' in /opt/mariadb-data/my.cnf the howto command line worked.
  −
 
  −
<strike>I was unable to make the 'mysqld_safe' command line from the howto work.  Where the howto wanted this command:
  −
$bindir/mysqld_safe --defaults-file=/opt/mariadb-data/my.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
  −
 
  −
I needed to specify the datadir instead of using the "$datadir" variable:
  −
$bindir/mysqld_safe --defaults-file=/opt/mariadb-data/my.cnf --datadir="/opt/mariadb-data" --pid-file="/var/run/mariadb/mariadb.pid" $other_args >/dev/null 2>&1 &
  −
 
  −
If I use the line suggested in the HOWTO, mariadb never starts (although it reports starting on the command line, it records an error in /opt/mariadb-data/<hostname>.err)</strike>
  −
 
  −
===Backup & Restore===
  −
* (RequestedDeletion) Nice notes. Would it be worth it to look at the pre-backup and pre-restore events (And config db settings) so MariaDB databases are being backup up ?
  −
====/etc/e-smith/events/actions/mariadb-dump-tables====
  −
* Based on /etc/e-smith/events/actions/mysql-dump-tables
  −
* "CONNECT" options separated out for easy modification and potential movement into db variables
  −
* "-x" option added to the mysqldump command line to avoid an error about locking log files
  −
<nowiki>#!/bin/sh
  −
#CONNECT=--socket=/opt/mariadb-data/mariadb.sock
  −
CONNECT="--protocol=TCP --port=3307"
  −
 
  −
if ! $(mysqladmin $CONNECT ping >/dev/null 2>&1)
  −
then
  −
    echo "mariadb is not running - no tables dumped" >&2
  −
    exit 0
  −
fi
  −
 
  −
mkdir -p /home/e-smith/db/mariadb
  −
for db in $(mysql $CONNECT -BNre "show databases;")
  −
do
  −
    mysqldump $CONNECT  -x --add-drop-table  -QB "$db" -r /home/e-smith/db/mariadb/"$db".dump  || exit 1
  −
done</nowiki>
  −
====/etc/e-smith/events/actions/mariadb-load-tables====
  −
* based on /etc/e-smith/events/actions/mysql-load-tables
  −
* doesn't actually load the dbs
  −
* NEEDS EXAMINATION!
  −
<nowiki>#!/bin/sh
  −
#CONNECT=--socket=/opt/mariadb-data/mariadb.sock
  −
CONNECT="--protocol=TCP --port=3307"
  −
MARIADATA=/opt/mariadb-data
  −
 
  −
if ! $(mysqladmin $CONNECT ping >/dev/null 2>&1)
  −
then   
  −
    echo "mariadb is not running - no tables restored" >&2
  −
    exit 0
  −
fi
  −
 
  −
if [ ! -f $MARIADATA/mysql/user.frm ]
  −
then
  −
    mkdir -p /etc/e-smith/mariadb/init
  −
    for db in $(ls /home/e-smith/db/mariadb/*.dump 2> /dev/null | grep -v '/mysql.dump')
  −
    do
  −
        mv $db /etc/e-smith/mariadb/init/01_$(basename $db .dump).sql
  −
    done
  −
fi</nowiki>
  −
====Automation====
  −
=====Backup=====
  −
* Link mariadb-dump-tables into the pre-backup event
  −
* Dumped tables should be included in backups as they are stored under /home/e-smith
  −
<nowiki>cd /etc/e-smith/events/pre-backup
  −
ln -s ../actions/mariadb-dump-tables S20mariadb-dump-tables</nowiki>
  −
=====Restore - NEEDS WORK=====
  −
The SME Server mysql restore is complicated by various factors that may not apply to a mariadb "alongside" installation.
  −
Here's what would need to be done to restore all mariadb databases:
  −
* Reinstall mariadb, including setting the password to match the mysql root password
  −
* Restore the 'dump' files created during pre-backup individually using:
  −
<nowiki>cd /home/e-smith/db/mariadb
  −
CONNECT=--socket=/opt/mariadb-data/mariadb.sock
  −
mysql $CONNECT < <dbname>.dump</nowiki>
      
==Install Moodle 2.6 using git==
 
==Install Moodle 2.6 using git==

Navigation menu