par , 11/01/2017 à 14h30 (2633 Affichages)
Introduction
Installation de MySQL 5.7 sous Linux, sans utilisation de package yum ou rpm.
Cette façon de faire permet de gérer aisément plusieurs versions Linux sur la même machine, sans être contraint par les "distributions officielles".
Elle permet aussi de faire cohabiter plusieurs instances sur le même serveur. A ce titre, la version utilisée doit être au minimum la 5.7.10.
A ma connaissance, le fork MariaDB ne fonctionne pas de la même manière.
Récupérer les binaires
Rechercher le bon binaire depuis le site de l'éditeur.
En tant que root, récupération des binaires et décompactage
1 2 3 4 5 6 7 8 9 10 11
| cd /tmp
wget https://dev.mysql.com/get/Downloads/...-x86_64.tar.gz
gunzip mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
tar -xvf mysql-5.7.17-linux-glibc2.5-x86_64.tar
mv mysql-5.7.17-linux-glibc2.5-x86_64.tar /mysql/
cd /mysql
chown mysql:mysql mysql-5.7.17-linux-glibc2.5-x86_64.tar
cd /etc
ln -s /mysql/admin/my.cnf my.cnf
cd /usr/local
ln -s /mysql/mysql-5.7.17/ mysql |
Le dernier softlink permet d'outrepasser un "bug" lié aux versions packagées.
Installation des binaires
Créer un login et un group mysql, puis
1 2 3 4 5 6
| mkdir /mysql
cd /mysql
mkdir admin data log
tar -xvf mysql-5.7.17-linux-glibc2.5-x86_64.tar
rm *.tar
mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql-5.7.17 |
Création de l'instance MySQL
Création du fichier de configuation /mysql/admin/my.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [mysql]
port = 33001
prompt = \p:\u$\d>
socket = /mysql/admin/01.sock
[mysqld@01]
basedir = /mysql/mysql-5.7.17/
datadir = /mysql/data/01
explicit_defaults_for_timestamp = true
innodb_file_per_table = on
innodb_data_home_dir = /mysql/data/01
innodb_log_group_home_dir = /mysql/data/01
socket = /mysql/admin/01.sock
log-error = /mysql/log/errorlog01.log
pid-file = /mysql/admin/01.pid
port = 33001
server-id = 0
slow-query-log-file = /mysql/log/slow-query-logfile01.log
collation-server = utf8_unicode_ci
character-set-server = utf8 |
Création des bases de données système et récupération du mot de passe par défaut
1 2
| /mysql/mysql-5.7.17/bin/mysqld --initialize --explicit_defaults_for_timestamp --datadir=/mysql/data/
tail –n1 /mysql/log/errorlog01.log | cut –d: -f4 |
Configuration Systemd
Démarrage de l'instance via systemd
En tant que root, créer le fichier /etc/systemd/system/mysqld@.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
ExecStart=/mysql/mysql-5.7.17/bin/mysqld --defaults-group-suffix=@%I --daemonize $MYSQLD_OPTS
Restart=on-failure
RestartPreventExitStatus=1
LimitNOFILE=infinity
LimitCORE=infinity
TimeoutSec=300
PrivateTmp=false
[Install]
WantedBy=multi-user.target |
Activation du service
1 2 3
| chmod +x /etc/systemd/system/mysqld@.service
systemctl daemon-reload
systemctl enable mysqld@01.service |
Démarrage
systemctl start mysqld@01
Etat
systemctl status mysqld@01
Arrêt
Connexion initiale à la base et ajout du compte root pour accès remote
1 2 3
| mysql -u root -p MotDePasseRootRecupere -S /mysql/admin/01.sock
set password for root@localhost = password('UnNouveauMotDePasse') ;
create user root@'%' identified by 'UnNouveauMotDePasse'; |
Clônage
Par la suite, on peut aisément clôner une base en quelques étapes
- ajouter une section [mysqld@Nouvelleinstance] dans le fichier my.cnf et s'assurer de modifier le no de port et le datadir
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [mysqld@02]
basedir = /mysql/mysql-5.7.17/
datadir = /mysql/data/02
explicit_defaults_for_timestamp = true
innodb_file_per_table = on
innodb_data_home_dir = /mysql/data/02
innodb_log_group_home_dir = /mysql/data/02
socket = /mysql/admin/02.sock
log-error = /mysql/log/errorlog02.log
pid-file = /mysql/admin/02.pid
port = 33002
server-id = 0
slow-query-log-file = /mysql/log/slow-query-logfile02.log
collation-server = utf8_unicode_ci
character-set-server = utf8 |
- Copier le datadir de la base source sur le nouveau datadir de la base clônée
cp -R /mysql/data/01 /mysql/data/02
- Démarrer le service de la nouvelle instance
1 2
| systemctl start mysqld@02
systemctl enable mysqld@02 |
Mis à jour 25/04/2018 à 17h39 par Fabien Celaia
Tags:
clonage,
clone,
copie,
db_create,
initialize,
linux,
multi instances,
mysql,
mysql_multi,
plusieurs instances,
systemd
- Catégories
-
SGBD
,
MySQL
,
MariaDB