MySQL
Les logs sont par défaut dans /var/log/mysql/.
Le fichier de configuration est par défaut /etc/mysql/my.cnf
Serveur MySQL
Installer le paquet mysql-server. L'alternative semble maintenant être mariadb-server et mariadb-client. Si utilisation avec PHP, également le paquet php-mysql (valable également pour MariaDB).
Pour configurer la sécurité du serveur, notamment définir le mot de passe root, lancer la commande mysql_secure_installation.
Client MySQL
Installer le paquet mysql-client. La commande est ensuite mysql.
Options:
-h: préciser l'adresse de l'hôte. Par défaut, essaie la socket locale.-u <user>-p: affichera un prompt pour saisir le mot de passe–sslutilise SSL<database>
Exécuter des commandes depuis un fichier
mysql <database> < script.sql
Exécuter des commandes sans lancer la CLI
mysql <database> -e "SELECT * FROM table"
CLI
Lister les bases de données
SHOW DATABASES;
Sélectionner une base de données
USE <database>;
Lister les tables
SHOW TABLES;
Décrire la structure d'une table
DESC TABLE_NAME;
Ou pour avoir la commande SQL qui permet de créer la table en question :
SHOW CREATE TABLE <table_name>;
Obtenir les informations sur le serveur
\s
Vider une base de données
DROP DATABASE db; CREATE DATABASE db;
Connaître l'espace occupé par les tables
En Mo :
SELECT TABLE_NAME, ROUND((data_length+index_length)/POWER(1024,2), 2) tablesize_mb FROM information_schema.tables WHERE table_schema='mydb' ORDER BY TABLE_NAME;
Afficher les paramètres de configuration
SHOW VARIABLES LIKE '%max%';
Connaître le moteur de stockage utilisé pour les tables
SHOW TABLE STATUS WHERE Name = 'xxx'
Dupliquer une base de données
Créer la base de données de destination, puis (source) :
mysqldump db_src | mysql db_dest
Configurer SSL avec Let's Encrypt
cp /etc/letsencrypt/live/mysite.com/{chain,cert}.pem /var/lib/mysql/ openssl rsa -in /etc/letsencrypt/live/mysite.com/privkey.pem -out /var/lib/mysql/privkey.pem chmod 400 /var/lib/mysql/*.pem chown mysql:mysql /var/lib/mysql/*.pem
Ajouter dans le fichier de configuration de MySQL:
- /etc/mysql/my.cnf
ssl_ca=/var/lib/mysql/chain.pem ssl_cert=/var/lib/mysql/cert.pem ssl_key=/var/lib/mysql/privkey.pem
Redémarrer MySQL:
service mysql restart
Les erreurs concernant SSL sont rapportées dans le fichier /var/log/mysql/errors.log.
Pour s'assurer que SSL est bien configuré:
mysql --ssl
Puis demander:
SHOW STATUS LIKE 'Ssl_cipher';
La valeur ne doit pas être vide.
PhpMyAdmin
Connexion interdite avec root
Si PhpMyAdmin refuse de se connecter avec l'utilisateur root:
Dans un shell MySQL, connecté en tant que root:
SELECT USER, Host, plugin FROM mysql.user;
Si cette commande renvoie autre chose que mysql_native_password, exécuter les commandes suivantes:
USE mysql; UPDATE USER SET plugin='mysql_native_password' WHERE USER='root'; FLUSH PRIVILEGES;
Fonctionne avec MySQL 5.5. À voir si cela persiste avec les mises à jour.
La meilleure solution semble être la création d'un utilisateur dédié à PhpMyAdmin
Installer MySQL 5.7 sur Debian 8 Jessie
Télécharger le paquet de MySQL pour l'installation via APT: https://dev.mysql.com/downloads/repo/apt/.
Installer le paquet avec dpkg.
apt update
apt install mysql-community-server
En root, en s'assurant que MySQL fonctionne, lancer la commande suivante:
mysql_upgrade -p
Utilisateurs
Problème d'accès avec debian-sys-maint
Si mysql_upgrade échoue avec un problème d'accès pour l'utilisateur debian-sys-maint, il faut probablement corriger le mot de passe MySQL de cet utilisateur:
- le mot de passe est dans
/etc/mysql/debian.cnf
Mot de passe root
Supprimer un utilisateur
DROP USER 'jeffrey'@'localhost';
Créer un utilisateur
Avec tous les droits sur toutes les bases de données (source) :
CREATE USER 'user'@'localhost' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost'; FLUSH PRIVILEGES;
Pour qu'il n'y ait pas de mot de passe (source) :
CREATE USER 'user'@'localhost' IDENTIFIED BY '';
Sans doute que cet utilisateur ne peut se connecter qu'en TCP et pas via la socket (à tester…).
Voir comment un utilisateur a été créé
SHOW CREATE USER USER@localhost;
Sauvegardes
mariadb-backup permet d'exporter la structure et les données d'un serveur MariaDB.
Mariabackup
Installer le paquet mariadb-backup.
Sauvegardes incrémentales et compressées :
# Sauvegardes : mkdir 20220306-1230-full # il faut créer le dossier avant mariabackup --backup --stream=xbstream --extra-lsndir=$(pwd)/20220306-1230-full | gzip > $(pwd)/20220306-1230-full/backup.stream.gz mkdir 20220306-1408 mariabackup --backup --stream=xbstream --extra-lsndir=$(pwd)/20220306-1540 --incremental-basedir=$(pwd)/20220306-1408/ | gzip > $(pwd)/20220306-1540/backup.stream.gz # Restauration : cd 20220306-1230-full mkdir backup gunzip -c backup.stream.gz | mbstream -x -C backup/ cd ../20220306-1408 mkdir backup gunzip -c backup.stream.gz | mbstream -x -C backup/ cd .. mariabackup --prepare --target-dir 20220306-1230-full/backup mariabackup --prepare --target-dir 20220306-1230-full/backup --incremental-dir 20220306-1408/backup service mysql stop mv /var/lib/mysql{,.old} mariabackup --copy-back --target-dir 20220306-1230-full/backup/ chown -R mysql:mysql /var/lib/mysql service mysql start
Table de verrous trop petite
Dans my.cnf, augmenter la valeur de innodb_buffer_pool_size à 64MB par exemple.
Optimisation des tables
Les DELETE ne libèrent pas de la place sur le disque. Il faut exécuter :
OPTIMIZE TABLE TABLE;