MySQL
MySQL is a fast, multi-threaded, multi-user, and robust SQL database server. It is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software.
Installation
Pour installer MySQL, exécutez la commande suivante dans un terminal :
sudo apt install mysql-server
Lors du processus d'installation, vous serez invité à entrer un mot de passe pour l'utilisateur root MySQL.
Une fois l'installation terminée, le serveur MySQL devrait démarrer automatiquement. Vous pouvez utiliser la commande suivante à l'invite d'un terminal pour vérifier si le serveur MySQL fonctionne :
sudo netstat -tap | grep mysql
Quand vous exécutez cette commande, vous devriez voir apparaître la ligne suivante ou quelque chose de similaire :
tcp 0 0 localhost:mysql *:* LISTEN 2556/mysqld
Si le serveur ne fonctionne pas correctement, saisissez la commande suivante pour le démarrer :
sudo systemctl restart mysql.service
Configuration
You can edit the /etc/mysql/my.cnf file to configure the basic settings -- log file, port number, etc. For example, to configure MySQL to listen for connections from network hosts, change the bind-address directive to the server's IP address:
bind-address = 192.168.0.5
Remplacez 192.168.0.5 par l'adresse appropriée.
Après tout changement dans /etc/mysql/my.cnf, le démon MySQL devra être redémarré :
sudo systemctl restart mysql.service
Si vous souhaitez changer le mot de passe root MySQL, saisissez dans un terminal :
sudo dpkg-reconfigure mysql-server-5.5
Le démon MySQL sera arrêté et vous serez invité à saisir un nouveau mot de passe.
Moteurs de bases de données
Bien que la configuration par défaut de MySQL fournie par les paquets Ubuntu soit parfaitement fonctionnelle et performante, il y a des choses que vous devez prendre en compte avant de poursuivre.
MySQL is designed to allow data to be stored in different ways. These methods are referred to as either database or storage engines. There are two main engines that you'll be interested in: InnoDB and MyISAM. Storage engines are transparent to the end user. MySQL will handle things differently under the surface, but regardless of which storage engine is in use, you will interact with the database in the same way.
Chaque moteur a des avantages et des inconvénients.
While it is possible, and may be advantageous to mix and match database engines on a table level, doing so reduces the effectiveness of the performance tuning you can do as you'll be splitting the resources between two engines instead of dedicating them to one.
-
MyISAM is the older of the two. It can be faster than InnoDB under certain circumstances and favours a read only workload. Some web applications have been tuned around MyISAM (though that's not to imply that they will slow under InnoDB). MyISAM also supports the FULLTEXT data type, which allows very fast searches of large quantities of text data. However MyISAM is only capable of locking an entire table for writing. This means only one process can update a table at a time. As any application that uses the table scales this may prove to be a hindrance. It also lacks journaling, which makes it harder for data to be recovered after a crash. The following link provides some points for consideration about using MyISAM on a production database.
-
InnoDB is a more modern database engine, designed to be ACID compliant which guarantees database transactions are processed reliably. Write locking can occur on a row level basis within a table. That means multiple updates can occur on a single table simultaneously. Data caching is also handled in memory within the database engine, allowing caching on a more efficient row level basis rather than file block. To meet ACID compliance all transactions are journaled independently of the main tables. This allows for much more reliable data recovery as data consistency can be checked.
As of MySQL 5.5 InnoDB is the default engine, and is highly recommended over MyISAM unless you have specific need for features unique to the engine.
Configuration avancée
Creating a tuned my.cnf file
There are a number of parameters that can be adjusted within MySQL's configuration file that will allow you to improve the performance of the server over time. For initial set-up you may find Percona's my.cnf generating tool useful. This tool will help generate a my.cnf file that will be much more optimised for your specific server capabilities and your requirements.
Do not replace your existing my.cnf file with Percona's one if you have already loaded data into the database. Some of the changes that will be in the file will be incompatible as they alter how data is stored on the hard disk and you'll be unable to start MySQL. If you do wish to use it and you have existing data, you will need to carry out a mysqldump and reload:
mysqldump --all-databases --routines -u root -p > ~/fulldump.sql
Once the dump has been completed, shut down MySQL:
sudo systemctl stop mysql.service
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup sudo cp /path/to/new/my.cnf /etc/mysql/my.cnf
sudo rm -rf /var/lib/mysql/* sudo mysql_install_db sudo chown -R mysql: /var/lib/mysql sudo systemctl start mysql.service
sudo apt install pv pv ~/fulldump.sql | mysql
This is not necessary for all my.cnf changes. Most of the variables you may wish to change to improve performance are adjustable even whilst the server is running. As with anything, make sure to have a good backup copy of config files and data before making changes.
Configurateur MySQL
MySQL Tuner is a useful tool that will connect to a running MySQL instance and offer suggestions for how it can be best configured for your workload. The longer the server has been running for, the better the advice mysqltuner can provide. In a production environment, consider waiting for at least 24 hours before running the tool. You can get install mysqltuner from the Ubuntu repositories:
sudo apt install mysqltuner
mysqltuner
-------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Increase table_cache gradually to avoid file descriptor limits Variables to adjust: key_buffer_size (> 1.4G) query_cache_size (> 32M) table_cache (> 64) innodb_buffer_pool_size (>= 22G)
One final comment on tuning databases: Whilst we can broadly say that certain settings are the best, performance can vary from application to application. For example, what works best for Wordpress might not be the best for Drupal, Joomla or proprietary applications. Performance is dependent on the types of queries, use of indexes, how efficient the database design is and so on. You may find it useful to spend some time searching for database tuning tips based on what applications you're using it for. Once you get past a certain point any adjustments you make will only result in minor improvements, and you'll be better off either improving the application, or looking at scaling up your database environment through either using more powerful hardware or by adding slave servers.
Ressources
-
Consultez la page d'accueil de MySQL pour plus d'informations.
-
Full documentation is available in both online and offline formats from the MySQL Developers portal
-
For general SQL information see Using SQL Special Edition by Rafe Colburn.
-
La page du wiki anglophone d'Ubuntu sur Apache MySQL PHP contient également des informations utiles.