Installation
(3 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 250 : | Ligne 250 : | ||
===Suppression des informations sensibles=== | ===Suppression des informations sensibles=== | ||
>/root/.bash_history | >/root/.bash_history | ||
+ | |||
+ | ==Installation sur un Ubuntu Server 20.04== | ||
+ | ===Ajout du dépôt MySQL=== | ||
+ | Un fois l'OS installé (comme [[Technique/Systèmes_d'exploitation/Ubuntu/Installation_Ubuntu_Server|décrit ici]]), télécharger et installer le dépôt MySQL : | ||
+ | wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb | ||
+ | sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb | ||
+ | |||
+ | Choisir le type d'OS. Ici, comme Ubuntu Focal n'est pas listé, il faut sélectionner <code>ubuntu bionic</code> : | ||
+ | :[[Fichier:ClipCapIt-210623-005906.PNG|none|thumb|300px]] | ||
+ | |||
+ | Choisir le type de produit qui sera utilisé (ici "MySQL Server & Cluster") : | ||
+ | :[[Fichier:ClipCapIt-210623-005944.PNG|none|thumb|300px]] | ||
+ | |||
+ | Choisir ensuite la version désirée (ici "mysql-5.7") : | ||
+ | :[[Fichier:ClipCapIt-210623-005206.PNG|none|thumb|300px]] | ||
+ | |||
+ | L'assistant revient au menu de départ. Se positionner sur le dernier choix de la liste '''Ok''' et valider : | ||
+ | :[[Fichier:ClipCapIt-210623-010010.PNG|none|thumb|300px]] | ||
+ | |||
+ | Reconstruire le cache du gestionnaire de paquets : | ||
+ | sudo apt-get update | ||
+ | |||
+ | Pour vérifier l'ajout du dépôt MySQL 5.7, lancer la commande : | ||
+ | sudo apt-cache policy mysql-server | ||
+ | |||
+ | Exemple de retour : | ||
+ | {{terminal|text= | ||
+ | myuser@myserver:~$ sudo apt-cache policy mysql-server | ||
+ | mysql-server: | ||
+ | Installed: (none) | ||
+ | Candidate: 8.0.25-0ubuntu0.20.04.1 | ||
+ | Version table: | ||
+ | 8.0.25-0ubuntu0.20.04.1 500 | ||
+ | 500 http://fr.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages | ||
+ | 500 http://fr.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages | ||
+ | 8.0.19-0ubuntu5 500 | ||
+ | 500 http://fr.archive.ubuntu.com/ubuntu focal/main amd64 Packages | ||
+ | 5.7.34-1ubuntu18.04 500 | ||
+ | 500 http://repo.mysql.com/apt/ubuntu bionic/mysql-5.7 amd64 Packages | ||
+ | }} | ||
+ | |||
+ | ===Installation de MySQL=== | ||
+ | Installer le serveur MySQL et son client avec la commande suivante : | ||
+ | sudo apt-get install mysql-community-server mysql-community-client mysql-client=5.7* | ||
+ | |||
+ | Pendant l'installation, il sera demandé de définir un mot de passe pour l'utilisateur root de MySQL : | ||
+ | :[[Fichier:ClipCapIt-210623-011123.PNG|none|thumb|300px]] | ||
+ | |||
+ | ===Sécurisation de MySQL=== | ||
+ | Pour sécuriser l'installation de MySQL, lancer la commande suivante : | ||
+ | sudo mysql_secure_installation | ||
+ | |||
+ | Un série de question sera posée. Y répondre selon les besoins : | ||
+ | {{terminal|text= | ||
+ | myuser@myserver:~$ sudo mysql_secure_installation | ||
+ | |||
+ | Securing the MySQL server deployment. | ||
+ | |||
+ | Enter password for user root: | ||
+ | |||
+ | VALIDATE PASSWORD PLUGIN can be used to test passwords | ||
+ | and improve security. It checks the strength of password | ||
+ | and allows the users to set only those passwords which are | ||
+ | secure enough. Would you like to setup VALIDATE PASSWORD plugin? | ||
+ | |||
+ | Press y{{!}}Y for Yes, any other key for No: | ||
+ | Using existing password for root. | ||
+ | Change the password for root ? ((Press y{{!}}Y for Yes, any other key for No) : | ||
+ | |||
+ | ... skipping. | ||
+ | By default, a MySQL installation has an anonymous user, | ||
+ | allowing anyone to log into MySQL without having to have | ||
+ | a user account created for them. This is intended only for | ||
+ | testing, and to make the installation go a bit smoother. | ||
+ | You should remove them before moving into a production | ||
+ | environment. | ||
+ | |||
+ | Remove anonymous users? (Press y{{!}}Y for Yes, any other key for No) : Y | ||
+ | Success. | ||
+ | |||
+ | |||
+ | Normally, root should only be allowed to connect from | ||
+ | 'localhost'. This ensures that someone cannot guess at | ||
+ | the root password from the network. | ||
+ | |||
+ | Disallow root login remotely? (Press y{{!}}Y for Yes, any other key for No) : Y | ||
+ | Success. | ||
+ | |||
+ | By default, MySQL comes with a database named 'test' that | ||
+ | anyone can access. This is also intended only for testing, | ||
+ | and should be removed before moving into a production | ||
+ | environment. | ||
+ | |||
+ | |||
+ | Remove test database and access to it? (Press y{{!}}Y for Yes, any other key for No) : Y | ||
+ | - Dropping test database... | ||
+ | Success. | ||
+ | |||
+ | - Removing privileges on test database... | ||
+ | Success. | ||
+ | |||
+ | Reloading the privilege tables will ensure that all changes | ||
+ | made so far will take effect immediately. | ||
+ | |||
+ | Reload privilege tables now? (Press y{{!}}Y for Yes, any other key for No) : Y | ||
+ | Success. | ||
+ | |||
+ | All done! | ||
+ | }} | ||
+ | |||
+ | ===Configuration de MySQL=== | ||
+ | Création des dossiers de destination : | ||
+ | sudo mkdir -p /data/{mysql,logs/mysql} | ||
+ | sudo chown mysql:mysql /data/{mysql,logs/mysql} | ||
+ | |||
+ | Arrêt de MySQL | ||
+ | sudo systemctl stop mysql.service | ||
+ | |||
+ | Modification de la configuration de MySQL pour prise en compte des nouveaux dossiers : | ||
+ | sudo sed -i 's@datadir\t\t= /var/lib/mysql@datadir\t\t= /data/mysql@g' /etc/mysql/mysql.conf.d/mysqld.cnf | ||
+ | sudo sed -i 's@log-error\t= /var/log/mysql/error.log@log-error\t= /data/logs/mysql/mysqld.log@g' /etc/mysql/mysql.conf.d/mysqld.cnf | ||
+ | |||
+ | Modification de l'adresse IP d'écoute (0.0.0.0 au lieu de 127.0.0.0) afin que les bases de données soient joignables par d'autres machines : | ||
+ | sudo sed -i 's@bind-address\t= 127.0.0.1@bind-address\t= 0.0.0.0@g' /etc/mysql/mysql.conf.d/mysqld.cnf | ||
+ | |||
+ | Personnalisation de MySQL : | ||
+ | <pre> | ||
+ | sudo bash -c 'cat <<EOF>> /etc/mysql/mysql.conf.d/mysqld.cnf | ||
+ | explicit_defaults_for_timestamp=1 | ||
+ | skip-ssl=1 | ||
+ | skip-name-resolve=1 | ||
+ | query_cache_size=0 | ||
+ | innodb_log_file_size=16777216 | ||
+ | character-set-server=utf8mb4 | ||
+ | collation-server=utf8mb4_general_ci | ||
+ | EOF' | ||
+ | </pre> | ||
+ | |||
+ | Déplacement des fichiers de données créés lors de l'installation vers les dossiers cible : | ||
+ | sudo bash -c 'mv /var/lib/mysql/* /data/mysql/' | ||
+ | |||
+ | Mise à jour de la configuration de AppArmor en conséquence : | ||
+ | sudo sed -i 's@/var/lib/mysql/@/data/mysql/@g' /etc/apparmor.d/usr.sbin.mysqld | ||
+ | sudo sed -i 's@/var/log/mysql/@/data/logs/mysql/@g' /etc/apparmor.d/usr.sbin.mysqld | ||
+ | sudo systemctl reload apparmor.service | ||
+ | |||
+ | Ouverture du port MySQL (par défaut) dans le pare-feu : | ||
+ | sudo ufw allow mysql | ||
+ | sudo ufw status verbose | ||
+ | |||
+ | Démarrage de MySQL : | ||
+ | sudo systemctl start mysql.service | ||
+ | |||
+ | Ajout du mot de passe ''root'' précédemment défini dans une variable d'environnement par défaut de MySQL (valable uniquement le temps de la session Linux) : | ||
+ | export MYSQL_PWD=mygreatpassword | ||
+ | ''NB'' : Par sécurité, il y a un espace juste devant la commande afin qu'elle n'apparaisse pas dans l'historique des commandes. | ||
+ | |||
+ | Création d'un utilisateur admin pour l'administration de MySQL : | ||
+ | mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'mysqladmin_user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'xxxxxxxx' WITH GRANT OPTION;" | ||
+ | ''NB'' : Par sécurité, il y a un espace juste devant la commande afin qu'elle n'apparaisse pas dans l'historique des commandes. | ||
[[Category:Webmin]] | [[Category:Webmin]] |
Version actuelle datée du 23 juin 2021 à 22:16
Sommaire
- 1 Présentation
- 2 Contexte
- 3 Installation à partir d'un serveur CentOS 7
- 3.1 Ajout de l'autorité de certification interne
- 3.2 Ajout du dépôt EPEL
- 3.3 Modification du umask
- 3.4 Suppression des pilotes inutiles
- 3.5 Désactivation de la wifi
- 3.6 Désactivation de l'IPv6
- 3.7 Désactivation du selinux
- 3.8 Suppression des utilisateurs inutiles
- 3.9 Augmenter l'historique des commandes de 1000 à 5000 lignes
- 3.10 Ajout de l'option "clean_requirements_on_remove=1" pour supprimer automatiquement les dépendances non-utilisées lors de la désinstallation d'un paquet
- 3.11 Installation de msmtp
- 3.12 Paramétrage NTP
- 3.13 Ajout du disque sous /data
- 3.14 Ajout du dépôt MySQL
- 3.15 Installation de MySQL
- 3.16 Configuration de MySQL
- 3.17 Ajout de l'outil mysqltuner
- 3.18 Installation de Webmin
- 3.19 Ajout Ansible
- 3.20 Configuration Shinken
- 3.21 Installation Zabbix
- 3.22 Suppression des informations sensibles
- 4 Installation sur un Ubuntu Server 20.04
Présentation
Cette page a pour objet de décrire comment installer de A à Z un serveur MySQL depuis un CentOS 7.
Contexte
Cette page n'est pas encore finalisée.
Installation à partir d'un serveur CentOS 7
Ajout de l'autorité de certification interne
Initialisation des certificats d'autorité racine :
update-ca-trust enable
Récupération du certificat de l'autorité de certification interne dans le dossier /etc/pki/ca-trust/source/anchors
et import du certificat précédemment déposé avec la commande :
update-ca-trust extract
Ajout du dépôt EPEL
yum -y install epel-release yum makecache yum -y update yum -y install yum-utils bind-utils yum-cron wget bash-completion lsof nmon net-tools dos2unix deltarpm vim sg3_utils open-vm-tools sysstat samba-client zip init 6
Modification du umask
sed -i -e 's/umask 022/umask 007/g' -e 's/umask 002/umask 007/g' /etc/bashrc sed -i -e 's/umask 022/umask 007/g' -e 's/umask 002/umask 007/g' /etc/csh.cshrc sed -i -e 's/umask 022/umask 007/g' -e 's/umask 002/umask 007/g' /etc/profile sed -i -e 's/umask 022/umask 007/g' -e 's/umask 002/umask 007/g' /etc/init.d/functions sed -i -e 's@Subsystem\tsftp\t/usr/libexec/openssh/sftp-server@\#Subsystem\tsftp\t/usr/libexec/openssh/sftp-server\nSubsystem\tsftp\tinternal-sftp -u 0007@g' /etc/ssh/sshd_config systemctl restart sshd
Suppression des pilotes inutiles
yum -y remove alsa-* ivtv-* iwl*firmware aic94xx-firmware
Désactivation de la wifi
nmcli radio all off
Désactivation de l'IPv6
echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network echo "IPV6INIT=no" >> /etc/sysconfig/network echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf sysctl -p sed -i 's/#AddressFamily any/AddressFamily inet/g' /etc/ssh/sshd_config systemctl restart sshd sed -i 's/OPTIONS=""/OPTIONS="-4"/g' /etc/sysconfig/chronyd systemctl restart chronyd
Désactivation du selinux
setenforce 0 sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Suppression des utilisateurs inutiles
userdel -r adm userdel -r ftp userdel -r games userdel -r lp groupdel games
Augmenter l'historique des commandes de 1000 à 5000 lignes
sed -i 's/HISTSIZE=.*/HISTSIZE=5000/g' /etc/profile
Ajout de l'option "clean_requirements_on_remove=1" pour supprimer automatiquement les dépendances non-utilisées lors de la désinstallation d'un paquet
yum-config-manager --setopt=clean_requirements_on_remove=1 --save
Installation de msmtp
yum install mailx ecat <<EOF >> /etc/mail.rc # Define SMTP server set smtp=smtp://smtp.mydomain.com:25 EOF
Tester avec la commande suivante :
echo "test" | mail -s "Test e-mail" myaddress@mydomain.com
Paramétrage NTP
yum -y install ntpdate && ntpdate ntp.mydomain.com && systemctl enable ntpdate.service
Ajout du disque sous /data
pvcreate /dev/sdb vgcreate vg_data /dev/sdb lvcreate -l 100%FREE vg_data -n lv_data mkfs.ext4 /dev/vg_data/lv_data mkdir /data echo "/dev/mapper/vg_data-lv_data /data ext4 defaults 0 0" >> /etc/fstab mount /data
Ajout du dépôt MySQL
yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum makecache yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community yum makecache
Installation de MySQL
yum -y install mysql-community-server
Configuration de MySQL
Création des dossiers hébergeant les logs et les bases :
mkdir -p /data/{mysql,logs} chown mysql:mysql /data/mysql chmod 777 /data/logs
Personnalisation de la configuration MySQL :
sed -i -e 's@datadir=/var/lib/mysql@datadir=/data/mysql@g' -e 's@log-error=/var/log/mysqld.log@log-error=/data/logs/mysqld.log@g' /etc/my.cnf echo "explicit_defaults_for_timestamp=1" >> /etc/my.cnf echo "skip-ssl=1" >> /etc/my.cnf echo "bind_address=0.0.0.0" >> /etc/my.cnf echo "skip-name-resolve=1" >> /etc/my.cnf echo "query_cache_size=0" >> /etc/my.cnf echo "innodb_log_file_size=16777216" >> /etc/my.cnf echo "character-set-server=utf8" >> /etc/my.cnf echo "collation-server=utf8mb4_general_ci" >> /etc/my.cnf
Ouverture du port MySQL dans le pare-feu :
firewall-cmd --add-service=mysql firewall-cmd --add-service=mysql --permanent
Démarrage et réinitialisation du mot de passe root de MySQL :
systemctl start mysqld export MYSQL_PWD=$(grep 'temporary password' /data/logs/mysqld.log | awk '{print $NF}') export MYSQL_NEW_PWD="xxxxxxxxxxxxx" mysql --connect-expired-password -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_NEW_PWD';"
Ajout des comptes d'administration :
export MYSQL_PWD=$MYSQL_NEW_PWD mysql -uroot -e "UNINSTALL PLUGIN validate_password;" mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin_user'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'xxxxxxxxxxxxx' WITH GRANT OPTION;" mysql -uroot -e "GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'phpmyadmin_controluser_user'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'xxxxxxxxxxxxx';" mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'%' IDENTIFIED BY 'xxxxxxxxxxxxx';" mysql -uroot -e "GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix_user'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxx';"
Ajout des tables pour le stockage de configurations PhpMyAdmin :
wget -q https://raw.githubusercontent.com/phpmyadmin/phpmyadmin/RELEASE_4_9_4/sql/create_tables.sql mysql -uroot < create_tables.sql rm -f create_tables.sql
Ajout de l'outil mysqltuner
yum -y install perl-Data-Dumper wget http://mysqltuner.pl/ -O /usr/bin/mysqltuner chmod u+x /usr/bin/mysqltuner
Installation de Webmin
cat <<EOF > /etc/yum.repos.d/webmin.repo [Webmin] name=Webmin Distribution Neutral #baseurl=https://download.webmin.com/download/yum mirrorlist=https://download.webmin.com/download/yum/mirrorlist enabled=1 EOF wget https://download.webmin.com/jcameron-key.asc rpm --import jcameron-key.asc yum -y install webmin perl-Authen-PAM /etc/rc.d/init.d/webmin stop find /etc -type l -name *webmin -exec unlink {} \; cat <<EOF > /usr/lib/systemd/system/webmin.service [Unit] Description=Webmin Requires=local-fs.target After=basic.target Conflicts=shutdown.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/etc/webmin/start ExecStop=/etc/webmin/stop ExecReload=/etc/webmin/reload [Install] WantedBy=multi-user.target EOF chmod o+r /usr/lib/systemd/system/webmin.service systemctl daemon-reload sed -i -e 's/ssl=1/ssl=0/g' /etc/webmin/miniserv.conf sed -i -e 's/ipv6=1/ipv6=0/g' /etc/webmin/miniserv.conf firewall-cmd --permanent --new-service=webmin firewall-cmd --permanent --service=webmin --set-description="Webmin is a web-based interface for system administration for Unix" firewall-cmd --permanent --service=webmin --set-short=webmin firewall-cmd --permanent --service=webmin --add-port=10000/tcp firewall-cmd --reload firewall-cmd --add-service=webmin --permanent systemctl start webmin.service systemctl enable webmin.service
Ajout Ansible
useradd ansible -U -d /home/ansible -m usermod -aG wheel ansible printf 'ansible:$6$mygreatsecret$AZ/JaHQRRgiIuD3a/LH.BIiB8Q1Qw5RdPHJbqzeeXcj84o8TihShBbZoW0VtXXspAK0f0km8DRvjqStakax7b0' | chpasswd --encrypted mkdir /home/ansible/.ssh chmod 700 /home/ansible/.ssh echo "ssh-rsa qagk5RkHRKE985lv2gZ4UTEfn7zZsngQW5HQEcR9ZMRK/e0o5ghy+RQpq/w4Hg/LbT+pfG3liXDP39xekOWzbcggWROb4ittFhA7NnU3At3FeEROUmWmpPH8aqUwQtpoNFY6qDJ0zsdIZn8NFTSxhxgXgTNIvkp7j6Omt4NdQcDiLQtAVafiNI0O7Euwualp8fZy64vL9lAR0Lgxf0PAwk8PwrIJaL3j8SyVr88ZzqB+Db8a/YYK+D2cXjZ1Fi4OKSwW6nQUBEeBBetWN0XkK6ObZ9XVepK9tO8iuWzQHj+Hr0iFAW3cD3cwwSZpjI5V ansible@myansibleserver.mydomain.com" >> /home/ansible/.ssh/authorized_keys chmod 600 /home/ansible/.ssh/authorized_keys chown -R ansible:ansible /home/ansible/.ssh
Configuration Shinken
useradd shinken -U -d /home/shinken -m printf 'shinken:$6$mygreatsecret$mluY2XZHeHd0KdJn7wYU6OwVZKrOX0SlGeIDLb8UWE73uPe8.ZZT2elKOQ2QH/EuvQUZOBnhH.TMRLTci2.hi/' | chpasswd --encrypted mkdir /home/shinken/.ssh chmod 700 /home/shinken/.ssh echo "ssh-rsa zGWtogJuIRY23//gGBGl0CFBX2V4roksaUq4/N9plVLFqMOhLwpumIOl9OYRKneRwtiA93JXhUAlBwr+8g9kSs28ZgoJpZipktbngbUegnMnmX7EHVVj9GwcjEUafae92wuWszkTJ7duTGokp/wUvzp41YLvROl1nHayWsrEeYz1lOXFW4PpHsozNgNLDPMlMV7RCWk7ltVU+HOkMgEdlO2DaU70CHK9wWZ+z6cFkg6OjxLIDSGcoXNCVnxeLYkWEhBZQBZCuIa+CJDDCV4Ijur15oLDJLu24bSkxmHVQCP7i9Hg87wb5 shinken@myshinkenserver.mydomain.com" >> /home/shinken/.ssh/authorized_keys chmod 600 /home/shinken/.ssh/authorized_keys chown -R shinken:shinken /home/shinken/.ssh
Installation Zabbix
Installation de l'agent
rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm rpm -import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591 yum -y install zabbix-agent sed -i -e 's/Server=127.0.0.1/Server=myzabbixserver/g' -e 's/ServerActive=127.0.0.1/ServerActive=myzabbixserver/g' -e 's/Hostname=Zabbix server/Hostname=mymysqlserver/g' -e 's@PidFile=/var/run/zabbix/zabbix_agentd.pid@PidFile=/run/zabbix/zabbix_agentd.pid@g' /etc/zabbix/zabbix_agentd.conf firewall-cmd --add-service=zabbix-agent --permanent
Installation du template MySQL Zabbix
mkdir -p $(grep zabbix /etc/passwd|awk -F: '{print $6}') chown zabbix:zabbix $(grep zabbix /etc/passwd|awk -F: '{print $6}') sudo -u zabbix mysql_config_editor set --user=zbx_monitor echo "MYSQL_PWD=xxxxxxxxxxxxxxxx" >> /etc/sysconfig/zabbix-agent wget -q https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/templates/db/mysql_agent/template_db_mysql.conf?at=refs%2Fheads%2Fmaster -O /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf chmod o+r /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf
Suppression des informations sensibles
>/root/.bash_history
Installation sur un Ubuntu Server 20.04
Ajout du dépôt MySQL
Un fois l'OS installé (comme décrit ici), télécharger et installer le dépôt MySQL :
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
Choisir le type d'OS. Ici, comme Ubuntu Focal n'est pas listé, il faut sélectionner ubuntu bionic
:
- Erreur lors de la création de la miniature : Fichier manquant
Choisir le type de produit qui sera utilisé (ici "MySQL Server & Cluster") :
- Erreur lors de la création de la miniature : Fichier manquant
Choisir ensuite la version désirée (ici "mysql-5.7") :
- Erreur lors de la création de la miniature : Fichier manquant
L'assistant revient au menu de départ. Se positionner sur le dernier choix de la liste Ok et valider :
- Erreur lors de la création de la miniature : Fichier manquant
Reconstruire le cache du gestionnaire de paquets :
sudo apt-get update
Pour vérifier l'ajout du dépôt MySQL 5.7, lancer la commande :
sudo apt-cache policy mysql-server
Exemple de retour :
myuser@myserver:~$ sudo apt-cache policy mysql-server mysql-server: Installed: (none) Candidate: 8.0.25-0ubuntu0.20.04.1 Version table: 8.0.25-0ubuntu0.20.04.1 500 500 http://fr.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 500 http://fr.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages 8.0.19-0ubuntu5 500 500 http://fr.archive.ubuntu.com/ubuntu focal/main amd64 Packages 5.7.34-1ubuntu18.04 500 500 http://repo.mysql.com/apt/ubuntu bionic/mysql-5.7 amd64 Packages
Installation de MySQL
Installer le serveur MySQL et son client avec la commande suivante :
sudo apt-get install mysql-community-server mysql-community-client mysql-client=5.7*
Pendant l'installation, il sera demandé de définir un mot de passe pour l'utilisateur root de MySQL :
- Erreur lors de la création de la miniature : Fichier manquant
Sécurisation de MySQL
Pour sécuriser l'installation de MySQL, lancer la commande suivante :
sudo mysql_secure_installation
Un série de question sera posée. Y répondre selon les besoins :
myuser@myserver:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y Success. All done!
Configuration de MySQL
Création des dossiers de destination :
sudo mkdir -p /data/{mysql,logs/mysql} sudo chown mysql:mysql /data/{mysql,logs/mysql}
Arrêt de MySQL
sudo systemctl stop mysql.service
Modification de la configuration de MySQL pour prise en compte des nouveaux dossiers :
sudo sed -i 's@datadir\t\t= /var/lib/mysql@datadir\t\t= /data/mysql@g' /etc/mysql/mysql.conf.d/mysqld.cnf sudo sed -i 's@log-error\t= /var/log/mysql/error.log@log-error\t= /data/logs/mysql/mysqld.log@g' /etc/mysql/mysql.conf.d/mysqld.cnf
Modification de l'adresse IP d'écoute (0.0.0.0 au lieu de 127.0.0.0) afin que les bases de données soient joignables par d'autres machines :
sudo sed -i 's@bind-address\t= 127.0.0.1@bind-address\t= 0.0.0.0@g' /etc/mysql/mysql.conf.d/mysqld.cnf
Personnalisation de MySQL :
sudo bash -c 'cat <<EOF>> /etc/mysql/mysql.conf.d/mysqld.cnf explicit_defaults_for_timestamp=1 skip-ssl=1 skip-name-resolve=1 query_cache_size=0 innodb_log_file_size=16777216 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci EOF'
Déplacement des fichiers de données créés lors de l'installation vers les dossiers cible :
sudo bash -c 'mv /var/lib/mysql/* /data/mysql/'
Mise à jour de la configuration de AppArmor en conséquence :
sudo sed -i 's@/var/lib/mysql/@/data/mysql/@g' /etc/apparmor.d/usr.sbin.mysqld sudo sed -i 's@/var/log/mysql/@/data/logs/mysql/@g' /etc/apparmor.d/usr.sbin.mysqld sudo systemctl reload apparmor.service
Ouverture du port MySQL (par défaut) dans le pare-feu :
sudo ufw allow mysql sudo ufw status verbose
Démarrage de MySQL :
sudo systemctl start mysql.service
Ajout du mot de passe root précédemment défini dans une variable d'environnement par défaut de MySQL (valable uniquement le temps de la session Linux) :
export MYSQL_PWD=mygreatpassword
NB : Par sécurité, il y a un espace juste devant la commande afin qu'elle n'apparaisse pas dans l'historique des commandes.
Création d'un utilisateur admin pour l'administration de MySQL :
mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'mysqladmin_user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'xxxxxxxx' WITH GRANT OPTION;"
NB : Par sécurité, il y a un espace juste devant la commande afin qu'elle n'apparaisse pas dans l'historique des commandes.