Sql install

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

En informatique, une base de données relationnelle est un stock d'informations décomposées et organisées dans des matrices appelées relations ou tables conformément au modèle de données relationnel. Le contenu de la base de données peut ainsi être synthétisé par des opérations d'algèbre relationnelle telles que l'intersection, la jointure et le produit cartésien.

Une base de données est un ensemble d'informations, connexes de manière directe ou indirecte, enregistrées dans un dispositif informatique. Dans une base de données relationnelle, les informations sont stockées sous forme de groupe de valeurs : les enregistrements. Un ensemble d'enregistrements relatif à un sujet forme une relation et est stocké dans une table. La base de données comporte une ou plusieurs tables et les sujets sont connexes.

Le modèle de données relationnel permet d'utiliser les opérateurs de l'algèbre relationnelle pour retrouver une information quelconque stockée dans la base de données, ainsi que les informations connexes.

Wikipedia


Nous allons installer parallèlement une base de données MySQL et PostGreSQL. Si vous vous demandez quelle est la différence entre les deux, c'est grossièrement une histoire de taille. Plus la base de données est grosse, plus il faudra opter pour PostGreSQL et inversement, pour faire un petit site Web, MySQL suffit largement.

Je vous laisse juger par vous-même ici

Installation

MySQL PostGreSQL
yum -y install mysql-server mysql
yum -y install postgresql-server 

Premier démarrage

Cette étape varie en fonction du SGBDR. Pour MySQL on va d'abord démarrer le moteur et ensuite l'initialiser alors que pour PostGreSQL c'est l'inverse.

MySQL / Mariadb

Accès local

Démarrage Initialisation
  • Pour SystemVInit:
# service mysqld start
ou
# service mariadb start
  • Pour SystemD:
# systemctl start mysqld.service
ou
# systemctl start mariadb.service
Initialisation de la base de données MySQL :  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h web1 password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

                                                           [  OK  ]
Démarrage de mysqld :                                      [  OK  ]
# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

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? [Y/n] 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? [Y/n] 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? [Y/n] 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? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Accès distant

Pour accéder à distance à MySQL il faudra, en plus des étapes précédentes, ouvrir le pare-feu ainsi qu'accorder à un utilisateur le droit de se connecter à distance.

Pare-feu Ajout d'un utilisateur
# iptables -I INPUT 2 -p tcp --dport 3306 -j ACCEPT
# mysql -p
password:
mysql> grant all privileges on *.* to root@'%' identified by "password";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;

Remplacez :

  • "*.*" par le nom des bases de données et des tables;
  • "root" par votre utilisateur ;
  • "%" par l'adresse IP du serveur.

PostGreSQL

Accès local

Initialisation Démarrage Changement de mot de passe
# service postgresql initdb
Initialisation de la base de données :                     [  OK  ]
  • Pour SystemVInit:
# service postgresql start
  • Pour SystemD:
# systemctl start postgresql.service
# su postgres
bash-4.1$ psql
psql (8.4.20)
Type "help" for help.

postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
  • \q → ctrl+d

Accès distant

Pour accéder à distance à PostgreSQL il faudra, en plus des étapes précédentes, ouvrir le pare-feu, changer l'adresse d'écoute et autoriser l'hôte à se connecter à distance.

Pare-feu Changement de l'adresse d’écoute Ajout d'un utilisateur
# iptables -I INPUT 2 -p tcp --dport 5432 -j ACCEPT

Dans le fichier vi /var/lib/pgsql/data/postgresql.conf changez la ligne :

listen_addresses = 'localhost'

en

listen_addresses = '*'

Autorisez l'hôte à se connecter en ajoutant à la fin du fichier la ligne suivante:

host all all 192.168.100.137/32 password

Remplaçez 192.168.100.137 par l'adresse IP de la machine cliente.

Vous pouvez maintenant vous connecter depuis une machine distante grâce à la commande:

# psql -h 192.168.100.129 -d postgres

Remplacez :

  • 192.168.100.129 → par l'adresse IP de votre serveur PostgreSQL;
  • postgres → par le nom de votre base de données.

Outils d'administration

Installation

Avant d'aller plus loin, assurez-vous d'avoir installé le dépôt EPEL.

Ce dépôt va nous permettre d'installer phpMyAdmin pour MySQL et phpPgAdmin pour PostGreSQL qui sont des interfaces Web d'administration.

MySQL PostGreSQL
# yum -y install phpmyadmin
# yum -y install phpPgAdmin

Éditez le fichier /etc/phpPgAdmin/config.inc.php pour changer :

  • $conf['servers'][0]['host'] de "" à '127.0.0.1';
  • $conf['extra_login_security'] de true à false;

Enfin, éditez le fichier /var/lib/pgsql/data/pg_hba.conf pour changer tous les ident par des password

Vous pouvez maintenant accéder au site à l'URL suivante

MySQL PostGreSQL

http://127.0.0.1/phpmyadmin

PhpMyAdmin.jpg

http://127.0.0.1/phpPgAdmin

PhpPgAdmin.png

Accès à distance

Pour accéder à distance à l'interface il faut désactiver les restrictions d'accès au niveau d'Apache.

MySQL PostGreSQL

Modifiez le fichier /etc/httpd/conf.d/phpMyAdmin.conf de la sorte:

# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Allow from All
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Allow from All
   </IfModule>
</Directory>

.....

Modifiez le fichier /etc/httpd/conf.d/phpPgAdmin.conf de la sorte:

#
# This configuration file maps the phpPgAdmin directory into the URL space.
# By default this application is only accessible from the local host.
#

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Location /phpPgAdmin>
    Order deny,allow
    Allow from all
    # Allow from .example.com
</Location>

Redémarrez Apache:

  • Pour SystemVInit:
# service httpd restart
  • Pour SystemD:
# systemctl restart httpd.service

Enregistrement dans le chargeur de démarrage

MySQL PostGreSQL
  • Pour SystemVInit:
# chkconfig mysqld on
  • Pour SystemD :
# systemctl enable mysqld.service
  • Pour SystemVInit:
# chkconfig postgresql on
  • Pour SystemD :
# systemctl enable postgresql.service

Sauvegarde et restauration

La sauvegarde (dump)

On appelle dump, une sauvegarde de la base à un instant T. Cette sauvegarde, qui se fait dans un fichier est destinée à être exportée sur une autre machine, soit pour une sauvegarde, soit pour un redéploiement (migration de serveur).

MySQL PostGreSQL
# mysql --host $host --user $user --password $pass $dbname >  $outfile

ou bien

# su mysql
$ mysqldump $dbname >  $outfile
  • $host → nom de la machine où se trouve la base de données;
  • $user → nom d'utilisateur ayant accès au données à dumper;
  • $pass → mot de passe associé à l'utilisateur;
  • $dbname → nom de la base de données;
  • $outfile → nom du fichier contenant le dump.
# su postgres
$ pg_dump $dbname > $outfile

ou bien pour sauvegarder toutes les bases !

# su postgres
$ pg_dumpall > $outfile
  • $dbname → nom de la base de données;
  • $outfile → nom du fichier contenant le dump.

La restauration

MySQL PostGreSQL
# mysql -h $host -u $user -p $pass $dbname < $infile
  • $host → nom de la machine où se trouve la base de données;
  • $user → nom d'utilisateur ayant accès au données à dumper;
  • $pass → mot de passe associé à l'utilisateur;
  • $dbname → nom de la base de données;
  • $infile → nom du fichier contenant le dump.
# su postgres
$ psql
postgres=# create database my_wiki; 
postgres=# \q
$ psql $dbname < $infile

ou bien si la commande dumpall à été utilisée:

# psql -f $infile postgres
  • $dbname → nom de la base de données;
  • $infile → nom du fichier contenant le dump.