Installer l'engine MySQL Pinba sur Debian
Pinba est un moteur MySQL destiné à la collecte de données statistiques. Il a été développé à l'origine pour collecter des informations sur les performances d'applications PHP.
Ce guide est testé sur:
- Debian 7.0 Wheezy
- Debian 9.0 Stretch
Ce guide est testé avec ces versions du logiciel:
- 1.2.0
Prérequis
Ce guide nécessite:
- un serveur MySQL, comme décrit par Installer et configurer MySQL sur Debian.
Ce guide recommande:
- L'extension Pinba pour PHP, comme décrit par Installer l'extension PHP Pinba sur Debian.
- l'application Web Intaro Pinboard, comme décrit par Installer Intaro Pinboard sur Debian.
Installation
Détectez le proxy de commande (command ou sudo):
cmdProxy='command'
command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'
Détectez les versions logicielles disponibles:
libmysqlclientDev='libmysqlclient-dev'
[ -n "$(command apt-cache pkgnames 'default-libmysqlclient-dev')" ] && libmysqlclientDev='default-libmysqlclient-dev'
libprotobufLite='libprotobuf-lite7'
[ -n "$(command apt-cache pkgnames 'libprotobuf-lite10')" ] && libprotobufLite='libprotobuf-lite10'
libprotobuf='libprotobuf7'
[ -n "$(command apt-cache pkgnames 'libprotobuf10')" ] && libprotobuf='libprotobuf10'
Détectez l'instance du serveur MySQL ou MariaDB installé:
mysqlServer='mysql'
grep 'MARIADB' '/usr/include/mysql/mysql_version.h' > '/dev/null' && mysqlServer='mariadb'
Détectez le chemin d'installation des plugins Mysql:
mysqlPluginPath='/usr/lib/mysql/plugin/'
mariaDBLibPath="$(command find '/usr/lib' -name 'mariadb*' -type d | sort | tail -n 1)"
[[ -e "${mariaDBLibPath}/plugin" ]] && mysqlPluginPath="${mariaDBLibPath}/plugin"
Préparation de l'environnement
Installez les logiciels nécessaires:
${cmdProxy} apt-get install build-essential protobuf-compiler \
libjudydebian1 libevent-dev libjudy-dev git libevent-2.0-5 libtool \
libevent-core-2.0-5 libevent-extra-2.0-5 libevent-openssl-2.0-5 \
libevent-pthreads-2.0-5 automake libprotobuf-dev \
"${libmysqlclientDev}" ${libprotobufLite} ${libprotobuf}
Mise en place du logiciel
Téléchargez les sources:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/tmp/sf-downloader'
command chmod +x '/tmp/sf-downloader'
source="$(${cmdProxy} /tmp/sf-downloader \
--generic='http://pinba.org/' \
--tgz 'pinba' 'pinba_engine-VERSION.tar.gz')"
Obtenez les sources de MySQL:
command pushd '/tmp'
command apt-get source "${mysqlServer}-server"
command popd
mysqlSource="$(command find '/tmp' -maxdepth 1 -type d -name "${mysqlServer}-*")"
mysqlIncludePath='/usr/include/mysql'
[[ -e '/usr/include/mariadb/mysql_version.h' ]] && mysqlIncludePath='/usr/include/mariadb'
command cp "${mysqlIncludePath}/mysql_version.h" "${mysqlSource}/include"
[[ -e "${mysqlIncludePath}/mariadb_version.h" ]] && command cp "${mysqlIncludePath}/mariadb_version.h" "${mysqlSource}/include"
command cp "${mysqlIncludePath}/my_config.h" "${mysqlSource}/include"
Obtenez les options de configuration du serveur MySQL installé:
mysqlOptions="$(VISUAL="$(command -v 'cat')" command mysqlbug \
| command grep 'Configured with' \
| command sed -e 's/.*configure -v //')"
Générez les scripts de configuration:
command pushd "${source}"
command aclocal
command automake --add-missing
[[ -e "${source}/buildconf.sh" ]] && ${source}/buildconf.sh
[[ -e "${source}/sparsehash/autogen.sh" ]] && ${source}/sparsehash/autogen.sh
command automake
command popd
Configurez les sources:
${source}/configure \
--with-mysql="${mysqlSource}" \
--with-judy \
--with-protobuf \
--with-event \
--libdir="${mysqlPluginPath}" \
CXXFLAGS="-fno-rtti"
Corrigez les sources pour permettre la compilation avec l'option -fno-rtti:
command sed -i \
-e 's/<< typeid(TypeParam).name()//' \
"${source}/sparsehash/src/hashtable_test.cc"
Placez-vous dans le dossier des sources:
command pushd "${source}"
Compilez le logiciel:
command make
Installez le logiciel:
${cmdProxy} make install
Quittez le dossier des sources:
command popd
Activation de l'engine
Configurez le serveur MySQL pour utiliser l'engine Pinba:
command mysql --execute="INSTALL PLUGIN pinba SONAME 'libpinba_engine.so';" --user=root
Créez une base de données pour Pinba:
command mysql --execute="CREATE DATABASE pinba DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;" --user=root
Initialisez le contenu de la base de données:
command mysql --user=root 'pinba' < '/tmp/pinba_engine/default_tables.sql'
Supprimez les sources:
command rm -r "${source}" "${mysqlSource}"
Configuration de l'engine
Installez le fichier de configuration pour l'engine Pinba:
${cmdProxy} wget 'https://raw.github.com/biapy/howto.biapy.com/master/mysql/pinba.cnf' \
--quiet --no-check-certificate --output-document='/etc/mysql/conf.d/pinba.cnf'
${cmdProxy} service "${mysqlServer}" restart
Vous pouvez ajuster la configuration de Pinba à votre besoin en modifiant le fichier pinba.cnf, puis en redémarrant le serveur MySQL pour prendre en compte les modifications:
${cmdProxy} vim '/etc/mysql/conf.d/pinba.cnf'
Si le serveur PHP générant les statistiques stockées dans Pinba est sur un autre hôte que le serveur MySQL, ouvrez le port d'écoute de Pinba sur le réseau (dangereux, assurez-vous de disposer d'un pare-feu):
# ${cmdProxy} sed -i -e 's/^pinba_address/#pinba_address/' '/etc/mysql/conf.d/pinba.cnf'
# ${cmdProxy} service "${mysqlServer}" restart
Remerciements
- Merci aux développeurs de Pinba (en).