Installation d’une base Mysql Multi-instances

Un petit tutoriel sur l’installation d’une base de données MySQL multi instance. Ce type d’installation vous sera particulièrement utile si votre serveur héberge plusieurs instances applicative. En effet admettons que vous hébergiez plusieurs instances applicatives, au lieu de créer une base de données par application, vous pourrez créer une instance MySQL dédié par application. L’avantage est que vous pourrez effectuer un tunning précis de votre base de données par application.

 

  •  Procédez à l’installation de mysql via la commande

[pastacode lang= »markup » manual= »apt-get%20install%20mysql-server » message= » » highlight= » » provider= »manual »/]

  •  Faites une sauvegarde du fichier de configuration original /etc/mysql/my.cnf et modifier le de la manière suivante (le fichier de configuration est bien sur à adapter. Dans cette exemple j’ai décidé de créer trois instances MySQL):

[pastacode lang= »markup » manual= »%5Bclient%5D%0Aport%20%20%20%20%20%20%20%20%20%20%20%20%3D%203306%0Asocket%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock%0A%5Bmysqld_safe%5D%0Asocket%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock%0Anice%20%20%20%20%20%20%20%20%20%20%20%20%3D%200%0A%5Bmysqld%5D%0A%23user%20%20%20%20%20%20%20%20%20%20%20%3D%20mysql%0A%5Bmysqldump%5D%0Aquick%0Aquote-names%0Amax_allowed_packet%20%20%20%20%20%20%3D%2016M%0A%5Bmysql%5D%0A%23no-auto-rehash%20%23%20faster%20start%20of%20mysql%20but%20no%20tab%20completition%0A%5Bisamchk%5D%0Akey_buffer%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2016M%0A!includedir%20%2Fetc%2Fmysql%2Fconf.d%2F%0A%5Bmysqld1%5D%0Auser%20%20%20%20%20%20%20%20%20%20%20%20%3D%20mysql1%0Apid-file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld1%2Fmysqld.pid%0Asocket%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld1%2Fmysqld.sock%0Aport%20%20%20%20%20%20%20%20%20%20%20%20%3D%2033061%0Abasedir%20%20%20%20%20%20%20%20%20%3D%20%2Fusr%0Adatadir%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flib%2Fmysql1%0Atmpdir%20%20%20%20%20%20%20%20%20%20%3D%20%2Ftmp%0Alc-messages-dir%20%3D%20%2Fusr%2Fshare%2Fmysql%0Askip-external-locking%0Abind-address%20%20%20%20%20%20%20%20%20%20%20%20%3D%20127.0.0.1%0Ageneral_log_file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flog%2Fmysql1%2Fmysql.log%0Ageneral_log%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%201%0Akey_buffer%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2016M%0Amax_allowed_packet%20%20%20%20%20%20%3D%2016M%0Athread_stack%20%20%20%20%20%20%20%20%20%20%20%20%3D%20192K%0Athread_cache_size%20%20%20%20%20%20%20%3D%208%0Amyisam-recover%20%20%20%20%20%20%20%20%20%20%3D%20BACKUP%0Aquery_cache_limit%20%20%20%20%20%20%20%3D%201M%0Aquery_cache_size%20%20%20%20%20%20%20%20%3D%2016M%0Aexpire_logs_days%20%20%20%20%20%20%20%20%3D%2010%0Amax_binlog_size%20%20%20%20%20%20%20%20%20%3D%20100M%0A%5Bmysqld2%5D%0Auser%20%20%20%20%20%20%20%20%20%20%20%20%3D%20mysql2%0Apid-file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld2%2Fmysqld.pid%0Asocket%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld2%2Fmysqld.sock%0Aport%20%20%20%20%20%20%20%20%20%20%20%20%3D%2033062%0Abasedir%20%20%20%20%20%20%20%20%20%3D%20%2Fusr%0Adatadir%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flib%2Fmysql2%0Atmpdir%20%20%20%20%20%20%20%20%20%20%3D%20%2Ftmp%0Alc-messages-dir%20%3D%20%2Fusr%2Fshare%2Fmysql%0Askip-external-locking%0Abind-address%20%20%20%20%20%20%20%20%20%20%20%20%3D%20127.0.0.1%0Ageneral_log_file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flog%2Fmysql2%2Fmysql.log%0Akey_buffer%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2016M%0Amax_allowed_packet%20%20%20%20%20%20%3D%2016M%0Athread_stack%20%20%20%20%20%20%20%20%20%20%20%20%3D%20192K%0Athread_cache_size%20%20%20%20%20%20%20%3D%208%0Amyisam-recover%20%20%20%20%20%20%20%20%20%20%3D%20BACKUP%0Aquery_cache_limit%20%20%20%20%20%20%20%3D%201M%0Aquery_cache_size%20%20%20%20%20%20%20%20%3D%2016M%0Alog_error%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flog%2Fmysql2%2Ferror.log%0Aexpire_logs_days%20%20%20%20%20%20%20%20%3D%2010%0Amax_binlog_size%20%20%20%20%20%20%20%20%20%3D%20100M%0A%5Bmysqld3%5D%0Auser%20%20%20%20%20%20%20%20%20%20%20%20%3D%20mysql3%0Apid-file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld3%2Fmysqld.pid%0Asocket%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Frun%2Fmysqld3%2Fmysqld.sock%0Aport%20%20%20%20%20%20%20%20%20%20%20%20%3D%2033063%0Abasedir%20%20%20%20%20%20%20%20%20%3D%20%2Fusr%0Adatadir%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flib%2Fmysql3%0Atmpdir%20%20%20%20%20%20%20%20%20%20%3D%20%2Ftmp%0Alc-messages-dir%20%3D%20%2Fusr%2Fshare%2Fmysql%0Askip-external-locking%0Abind-address%20%20%20%20%20%20%20%20%20%20%20%20%3D%20127.0.0.1%0Ageneral_log_file%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flog%2Fmysql3%2Fmysql.log%0Ageneral_log%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%201%0Akey_buffer%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2016M%0Amax_allowed_packet%20%20%20%20%20%20%3D%2016M%0Athread_stack%20%20%20%20%20%20%20%20%20%20%20%20%3D%20192K%0Athread_cache_size%20%20%20%20%20%20%20%3D%208%0Amyisam-recover%20%20%20%20%20%20%20%20%20%20%3D%20BACKUP%0Aquery_cache_limit%20%20%20%20%20%20%20%3D%201M%0Aquery_cache_size%20%20%20%20%20%20%20%20%3D%2016M%0Alog_error%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%2Fvar%2Flog%2Fmysql3%2Ferror.log%0Aexpire_logs_days%20%20%20%20%20%20%20%20%3D%2010%0Amax_binlog_size%20%20%20%20%20%20%20%20%20%3D%20100M » message= » » highlight= » » provider= »manual »/]

  • On crée  les différents users:

[pastacode lang= »markup » manual= »useradd%20-r%20mysql1%0A%0Auseradd%20-r%20mysql2%0A%0Auseradd%20-r%20mysql3″ message= » » highlight= » » provider= »manual »/]

  • On crée les répertoires avec les bons droits :

[pastacode lang= »markup » manual= »mkdir%20%2Fvar%2Flib%2Fmysql%7B1%2C2%2C3%7D%0Amkdir%20%2Fvar%2Flib%2Fmysql%7B1%2C2%2C3%7D%0Achown%20mysql1%3Aadm%20%2Fvar%2Flog%2Fmysql1%0Achown%20mysql2%3Aadm%20%2Fvar%2Flog%2Fmysql2%0Achown%20mysql3%3Aadm%20%2Fvar%2Flog%2Fmysql3%0Amkdir%20%2Fvar%2Frun%2Fmysqld%7B1%2C2%2C3%7D%0Achown%20mysql1%20%2Fvar%2Frun%2Fmysqld1%0Achown%20mysql2%20%2Fvar%2Frun%2Fmysqld2%0Achown%20mysql3%20%2Fvar%2Frun%2Fmysqld3″ message= » » highlight= » » provider= »manual »/]

  • On initialise les datastores pour chaque instances

[pastacode lang= »markup » manual= »mysql_install_db%20–datadir%3D%2Fvar%2Flib%2Fmysql1%20–user%3Dmysql1%0Amysql_install_db%20–datadir%3D%2Fvar%2Flib%2Fmysql2%20–user%3Dmysql2%0Amysql_install_db%20–datadir%3D%2Fvar%2Flib%2Fmysql3%20–user%3Dmysql3″ message= » » highlight= » » provider= »manual »/]

  • On démarre nos instances:

[pastacode lang= »markup » manual= »mysqld_multi%20–verbose%20–no-log%20start%201%0A%0Amysqld_multi%20–verbose%20–no-log%20start%202%0A%0Amysqld_multi%20–verbose%20–no-log%20start%203″ message= » » highlight= » » provider= »manual »/]

  • Pour stopper une instance spécifique : mysqld_multi --verbose --no-log stop <numéro de l'instance>
  • Il est possible d’avoir un statut pour chaque instance grâce à la commande : mysqld_multi report
  • Enfin la connexion à une instance via le client mysql se fait avec ce type de commande : mysql -uroot –socket=<chemin du fichier>
    Exemple : mysql -uroot -ptoto --socket=/var/run/mysql1/mysqld.sock

 

Source