Création section config mem
This commit is contained in:
parent
72bf84b10f
commit
ff3db0a0cd
|
@ -96,6 +96,7 @@ Sur Debian 8, c'est le paquet `libmysqlclient-dev`.
|
|||
|
||||
Sur Debian 9 (et Debian 8 avec backports), c'est le meta-paquet `default-libmysqlclient-dev` qui permet de facilement installer la paquet adapté à votre base de données.
|
||||
|
||||
|
||||
### MySQL 5.7
|
||||
|
||||
<https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/>
|
||||
|
@ -117,6 +118,7 @@ On peut ensuite installer les paquets :
|
|||
|
||||
> *Note* : il faudra alors installer *mytop* en récupérant le package de Debian 8
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Le fichier de configuration principal est `/etc/mysql/my.cnf` qui inclue notamment les fichiers `.cnf` présents dans les sous-répertoires `conf.d/` et `mariadb.conf.d/`.
|
||||
|
@ -129,9 +131,9 @@ Le fichier `/etc/mysql/mariadb.conf.d/z-evolinux-defaults.cnf` contient nos opti
|
|||
[mysqld]
|
||||
|
||||
###### Connexions
|
||||
# Maximum de connexions concurrentes (defaut = 100)... provoque un "Too many connections"
|
||||
# Maximum de connexions concurrentes (défaut = 100)... provoque un "Too many connections"
|
||||
max_connections = 250
|
||||
# Maximum de connexions en attente en cas de max_connections atteint (defaut = 50)
|
||||
# Maximum de connexions en attente en cas de max_connections atteint (défaut = 50)
|
||||
back_log = 100
|
||||
# Maximum d'erreurs avant de blacklister un hote
|
||||
max_connect_errors = 10
|
||||
|
@ -141,12 +143,12 @@ slow_query_log_file = /var/log/mysql/mysql-slow.log
|
|||
long_query_time = 10
|
||||
|
||||
###### Tailles
|
||||
# Taille reservee au buffer des index MyIsam
|
||||
# A ajuster selon les resultatsutilisateurs
|
||||
# Taille réservée au buffer des index MyIsam
|
||||
# A ajuster selon les résultats utilisateurs
|
||||
key_buffer_size = 512M
|
||||
# Taille max des paquets envoyés/reçus … provoque un "Packet too large"
|
||||
max_allowed_packet = 64M
|
||||
# Taille de la memoire reserve pour un thread
|
||||
# Taille de la mémoire réservée pour un thread
|
||||
thread_stack = 192K
|
||||
# A mettre le nombre de threads CPU alloues pour MySQL
|
||||
thread_cache_size = 1
|
||||
|
@ -154,28 +156,28 @@ thread_cache_size = 1
|
|||
max_heap_table_size = 64M
|
||||
|
||||
###### Cache
|
||||
# max_connections x nbre max de tables dans une jointure (defaut = 64)
|
||||
# max_connections x nombre max de tables dans une jointure (défaut = 64)
|
||||
table_open_cache = 4096
|
||||
table_definition_cache = 4096
|
||||
# Taille max des requetes cachees (defaut = 1M)
|
||||
# Taille max des requêtes cachées (défaut = 1M)
|
||||
query_cache_limit = 8M
|
||||
# Taille reservee pour le cache (defaut = 0)
|
||||
# Taille réservée pour le cache (défaut = 0)
|
||||
query_cache_size = 256M
|
||||
# Type de requetes a cacher (defaut = 1 : tout peut etre cache)
|
||||
# Type de requêtes à cacher (défaut = 1 : tout peut être caché)
|
||||
query_cache_type = 1
|
||||
# Cache tables
|
||||
max_heap_table_size = 128M
|
||||
tmp_table_size = 128M
|
||||
|
||||
###### InnoDB
|
||||
# Si InnoDB n'est pas utilise... le desactiver
|
||||
# Si InnoDB n'est pas utilisé... le désactiver
|
||||
#skip-innodb
|
||||
# En general, il est plus optimum d'avoir un fichier par table
|
||||
# En général, il est plus optimum d'avoir un fichier par table
|
||||
innodb_file_per_table
|
||||
# Taille memoire allouee pour le cache des datas et index
|
||||
# A ajuster en fonction de sa RAM (si serveur dedie a MySQL, on peut aller jusqu'a 80%)
|
||||
# Taille mémoire allouée pour le cache des datas et index
|
||||
# A ajuster en fonction de sa RAM (si serveur dédié à MySQL, on peut aller jusqu'à 70%)
|
||||
innodb_buffer_pool_size = 512M
|
||||
# Nombre maximum de threads systeme concurents
|
||||
# Nombre maximum de threads système concurrents
|
||||
innodb_thread_concurrency = 16
|
||||
# Ajuste la valeur des logs InnoDB
|
||||
# (attention, il faut ensuite stopper MySQL et effacer les fichiers ib_logfile*)
|
||||
|
@ -183,7 +185,7 @@ innodb_thread_concurrency = 16
|
|||
#innodb_log_files_in_group = 2
|
||||
|
||||
###### Misc
|
||||
# charset utf8 par defaut
|
||||
# Charset utf8 par défaut
|
||||
character-set-server=utf8
|
||||
collation-server=utf8_general_ci
|
||||
# Patch MySQL 5.5.53
|
||||
|
@ -212,21 +214,57 @@ Pour activer les connexions réseau à distance, il faut ajouter la configuratio
|
|||
bind-address = 0.0.0.0
|
||||
~~~
|
||||
|
||||
Pour plus d'informations sur l'optimisation avancée de MySQL, consultez le guide [/HowtoMySQL/Optimize]().
|
||||
|
||||
> *Note* : Sous Debian 8, nous mettons notre configuration dans `/etc/mysql/conf.d/evolinux.cnf`
|
||||
|
||||
|
||||
### Configuration de la mémoire (InnoDB)
|
||||
|
||||
Selon les ressources de la machine, il faut optimiser davantage les options (par défaut, la configuration est adaptée pour une machine avec très peu de mémoire vive !).
|
||||
|
||||
On conseille au minimum d'ajuster *thread_cache_size* et *innodb_buffer_pool_size* :
|
||||
On conseille au minimum d'ajuster `thread_cache_size` et `innodb_buffer_pool_size` :
|
||||
|
||||
~~~{.ini}
|
||||
[mysqld]
|
||||
# Nombre de threads CPU alloués pour MySQL
|
||||
thread_cache_size = 2
|
||||
# Mémoire allouée pour le cache InnoDB (si serveur dédié, on peut aller jusqu'à 80% de la RAM)
|
||||
# Mémoire allouée pour le cache InnoDB (si serveur dédié à MySQL, on peut aller jusqu'à 70% de la RAM)
|
||||
innodb_buffer_pool_size = 2G
|
||||
~~~
|
||||
|
||||
Pour plus d'informations sur l'optimisation avancée de MySQL, consultez le guide [/HowtoMySQL/Optimize]().
|
||||
**Attention :** MySQL consomme plus de mémoire que ce qui est indiqué dans la variable `innodb_buffer_pool_size`. Celle-ci n'est que la taille totale du tampon mémoire utilisable par les instances des « workers » de InnoDB.
|
||||
|
||||
> *Note* : Sous Debian 8, nous mettons notre configuration dans `/etc/mysql/conf.d/evolinux.cnf`
|
||||
Si MySQL utilise trop de mémoire, le système va swapper, et on peut observer une importante baisse des performances. Pour vérifier que MySQL ne swappe pas, il faut que les valeurs `si` et `so` de la commande suivante soient égales à zéro :
|
||||
|
||||
~~~
|
||||
# vmstat
|
||||
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
|
||||
r b swpd free buff cache si so bi bo in cs us sy id wa st
|
||||
0 0 976884 3301840 200564 1540540 0 0 6 53 0 0 2 1 96 1 0
|
||||
~~~
|
||||
|
||||
Il est possible d'ajuster dynamiquement (= sans redémarrer) la variable `innodb_buffer_pool_size`. Elle doit être un multiple de `innodb_buffer_pool_chunk_size` x `innodb_buffer_pool_instances` (par défaut 128M x 8), en octets (1 Go = 1073741824 octets).
|
||||
|
||||
~~~
|
||||
# Afficher la valeur de innodb_buffer_pool_size :
|
||||
mysql > SELECT @@innodb_buffer_pool_size;
|
||||
|
||||
# Redimensionner dynamiquement innodb_buffer_pool_size :
|
||||
mysql > SET GLOBAL innodb_buffer_pool_size=...; # en octets
|
||||
|
||||
# Afficher l'avancement du redimensionnement dynamique :
|
||||
mysql > SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';
|
||||
+----------------------------------+----------------------------------------------------+
|
||||
| Variable_name | Value |
|
||||
+----------------------------------+----------------------------------------------------+
|
||||
| Innodb_buffer_pool_resize_status | Completed resizing buffer pool at ... |
|
||||
+----------------------------------+----------------------------------------------------+
|
||||
~~~
|
||||
|
||||
Il faut ensuite penser à ajuster aussi la valeur de `innodb_buffer_pool_size` dans `/etc/mysql/mariadb.conf.d/zzz-evolinux-custom.cnf` comme indiqué ci-dessus.
|
||||
|
||||
Pour aller plus loin : <https://mariadb.com/kb/en/mariadb-memory-allocation/>
|
||||
|
||||
|
||||
## datadir / tmpdir
|
||||
|
@ -252,6 +290,7 @@ Par défaut il utilise `/tmp` mais vu qu'il est parfois nécessaire d'avoir plus
|
|||
tmpdir = /srv/mysql-tmpdir
|
||||
~~~
|
||||
|
||||
|
||||
### Liste toutes les permissions utilisateurs
|
||||
|
||||
Si vous avez installé le paquet `percona-toolkit` vous pouvez utiliser la commande `pt-show-grants`. De nombreuses options permettent de filtrer la sortie par base, utilisateur, type de permissions…
|
||||
|
|
Loading…
Reference in a new issue