Build / Compile MariaDB on FreeBSD¶
Getting Source¶
get source from MariaDB
extract to /usr/local/src/mariadb
Configure¶
Modular configure (usually you need to load plugins with my.cnf) i am using this one.
ORBuild With Plugin
./configure --with-extra-charsets=all --with-plugin-maria --with-plugin-xtradb --localstatedir=/var/db/mysql
OR
Static Build as suggested by MariaDB wiki.
./configure --prefix=/usr/local/mysql --enable-assembler \
--with-extra-charsets=all --enable-thread-safe-client --with-big-tables \
--with-plugin-maria --with-maria-tmp-tables --with-plugin-xtradb \
--with-mysqld-ldflags=-static --with-client-ldflags=-static --with-readline \
--with-ssl --with-plugins=max-no-ndb --with-embedded-server --with-libevent \
--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static \
--with-zlib-dir=bundled --enable-local-infile
rc script¶
You can simply use script provided with port version of mysql. Just in case if you dont have it, use below.
File: /usr/local/etc/rc.d/mysql
#!/bin/sh
#
# $FreeBSD: ports/databases/mysql51-server/files/mysql-server.sh.in,v 1.6 2008/07/30 06:11:16 ale Exp $
#
# PROVIDE: mysql
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable mysql:
# mysql_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable MySQL.
# mysql_limits (bool): Set to "NO" by default.
# Set it to yes to run `limits -e -U mysql`
# just before mysql starts.
# mysql_dbdir (str): Default to "/var/db/mysql"
# Base database directory.
# mysql_args (str): Custom additional arguments to be passed
# to mysqld_safe (default empty).
#
. /etc/rc.subr
name="mysql"
rcvar=`set_rcvar`
load_rc_config $name
: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
: ${mysql_dbdir="/var/db/mysql"}
: ${mysql_args=""}
mysql_user="mysql"
mysql_limits_args="-e -U ${mysql_user}"
pidfile="${mysql_dbdir}/`/bin/hostname`.pid"
command="/usr/local/bin/mysqld_safe"
command_args="--defaults-extra-file=${mysql_dbdir}/my.cnf --user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args} > /dev/null 2>&1 &"
procname="/usr/local/libexec/mysqld"
start_precmd="${name}_prestart"
start_postcmd="${name}_poststart"
mysql_install_db="/usr/local/bin/mysql_install_db"
mysql_install_db_args="--ldata=${mysql_dbdir}"
mysql_create_auth_tables()
{
eval $mysql_install_db $mysql_install_db_args >/dev/null 2>/dev/null
[ $? -eq 0 ] && chown -R ${mysql_user}:${mysql_user} ${mysql_dbdir}
}
mysql_prestart()
{
if [ ! -d "${mysql_dbdir}/mysql/." ]; then
mysql_create_auth_tables || return 1
fi
if checkyesno mysql_limits; then
eval `/usr/bin/limits ${mysql_limits_args}` 2>/dev/null
else
return 0
fi
}
mysql_poststart()
{
local timeout=15
while [ ! -f "${pidfile}" -a ${timeout} -gt 0 ]; do
timeout=$(( timeout - 1 ))
sleep 1
done
return 0
}
run_rc_command "$1"
Enable and Start
Final steps…. (remember i am using Modular configure)
File: /etc/my.cnf
[mysqld]
##
## Load Plugins
## To specify cutom plugin dir use line below.
## plugin_dir=/usr/local/lib/mysql/plugin
##
plugin-load=ha_xtradb.so
##
## General Optimization
##
open-files-limit=1024
local-infile
character-set-server=utf8
connect-timeout=60
key_buffer_size=1M
sort_buffer=256K
max_heap_table_size=1M
##
## InnoDB Configuration.
##
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_log_files_in_group=2
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_file_per_table
##
## Setting Log / Bin expiry and name
##
expire_logs_days=5
log-bin=mysqld-bin
log-bin-trust-function-creators=1
datadir=/usr/local/var
relay-log=freebsd-relay-bin
binlog-ignore-db=mysql,test
##
## Replication Options
##
server-id=0
#server-id=2
#replicate-same-server-id=0
#auto-increment-increment=5
#auto-increment-offset=2
#slave-net-timeout=120
#master-host=192.168.1.3
#master-user=repl
#master-password=password
#master-connect-retry=60
#replicate-ignore-db=mysql,test
Enabled it in rc.conf
Now start it using.
Error
If you get any error related to DB not found (usually get created on first RUN).
ENJOY!! Optimized Version of MySQL MariaDB