Mysql

Comment importer une base de donnée Mysql en ligne de commande

Je sais que pour beaucoup d’entre vous , la méthode préférée est PhpMyadmin pour importer des bases de données.

Mais pour ce qui est de la performance en rapidité, et lorsqu’on a affaire à une grosse base de données, cette méthode n’est pas viable, aussi il va falloir se retrousser les manches et passer en ligne de commande.

 

On parle beaucoup de sauvegarde en ligne de commande mais moins en restauration de base en ligne de commande. Rassurez vous la méthode est simple, il existe une méthode utilisant le mot clé source.

Le problème est qu’il faut se logger dans Mysql et le faire en mode interactif, donc deux étapes.

Cet article décrit une autre méthode en une étape :

mysql -u username -p database_name < file.sql

Il est préférable de donner le chemin complet vers le fichier pour éviter de potentiels problèmes.

 

https://stackoverflow.com/questions/17666249/how-to-import-an-sql-file-using-the-command-line-in-mysql

Mysql

Mysql Link to database cannot be established

si vous avez cette erreur alors que vous pensiez que tout allait bien, c’est vraisemblablement parce que Mysql a ouvert trop de fichier et n’est pas en mesure de traiter avec tout ça.

Mysql est limité à 1024 fichiers ouverts.

J’ai eu cette erreur que l’on ne voit pas très souvent, puisqu’il survient quand on a un grand nombre de sites web sur un même serveur dédié.

C’est ce qui m’est arrivé récemment lorsque j’ai combiné 3 serveur en un. J’avais 3 serveurs avec disque dur classiques, jusqu’au jour ou je me suis décidé à passer sur un serveur avec disque SSD, et plus de RAM. Pour être plus précis c’est le modèle XC SSD que j’ai pris, un octocoeur à 16 Go de Ram. Pour un prix de 15.99€ HT, soit un peu plus de 19 euros TTC (+ 20 € de frais d’installation). Au passage en résiliant deux serveur à 29 et 10 € j’économise 500 euros sur un an, une belle somme. A une époque j’avais pour presque 100 euros mensuel de serveurs, tous sous exploités, aujourd’hui comme je suis monté en compétence en gestion de serveur Linux, j’ai pris le parti de réduire mes coûts au strict minimum.

En configurant bien son serveur, on peut faire des merveilles. Cependant le chemin est semé d’embûches, la preuve pour que la base Mysql est tombée en rade avec une erreur du type :

ERROR 1018 (HY000): Can’t read dir of ‘.’ (errno: 24)

Vous pouvez voir ce que veut dire l’erreur 24 sous Linux avec la commande :

$ perror 24
OS error code  24:  Too many open files

Avec une trentaine de sites et donc de base de données, les 1024 n’allaient pas suffire !

En moins d’une heure, en cherchant sur le net, je suis arrivé à la solution suivante :

il faut affecter à mysql un plus grand nombre de fichiers ouvert. J’ai fixé pour ma part la valeur à 10240, ce qui est dix fois plus, mais vous pouvez aller jusqu’à 1024000, ce qui est souvent le cas si vous avez beaucoup de mutualisés.

Comment hausser la limite de fichiers ouvrable pour mysql

tout d’abord regardons les limites actuelle de votre système :

$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64127
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 64127
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

Si vous voulez connaitre les limites pour un utilisateur particulier :

$ su mysql ulimit -a

Si ça déclenche un erreur du genre argument -a inconnu, vous devez d'abord faire un changement utilisateur
$ su mysql
$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64127
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 64127
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Il faut éditer deux fichiers pour lever les limites.

$ vi /etc/security/limits.conf

mysql hard nofile 1024000
mysql soft nofile 1024000

$ vi /etc/security/limits.d/90-nproc.conf

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 10240
* hard nproc 10240
root soft nproc unlimited


$ vi /etc/my.cnf

[mysqld]
open_files_limit = 1024000

ou

[mysqld_safe]
open_files_limit = 1024000


$ service mysqld restart

Pour vérifier :

$ show global variables like 'open%';

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| open_files_limit | 102400 |
+------------------+--------+
1 row in set (0.00 sec)

Voilà j’espère que cela aura pu vous aider.

Voici le lien dont je me suis inspiré pour ce tuto :

Plus d’information sur le site officiel de Mysql.

https://duntuk.com/how-raise-ulimit-open-files-and-mysql-openfileslimithttp://i-learnings.blogspot.fr/2012/11/error-1018-hy000-cant-read-dir-of-errno.html

debian

Debian 8 Jessie, comment se logger en tant que root

Si vous avez récemment acquis un serveur dédié et fait l’installation d’un Linux Debian 8, vous aurez la désagréable surprise de constater qu’il est impossible de se logger en tant qu’utilisateur root.

En effet pour des raisons sans doute de sécurité, l’accès root a été désactivé par défaut.

C’est surtout énervant quand vous voulez utiliser WINSCP pour accéder à votre dédié, il est quasiment impossible de changer d’utilisateur en vous connectant, personnellement je n’ai pas réussi.

Il est bien plus facile de réactiver la possibilité de se connecter en root.

Voici la manipulation :

Comme on est en ssh, il faut éditer le fichier /etc/ssh/sshd_config

 

$vi /etc/ssh/sshd_config
changer 
PermitRootLogin without-password
en
PermitRootLogin yes

Maintenant il faut redémarrer le ssh

/etc/init.d/ssh restart

 

https://linuxconfig.org/enable-ssh-root-login-on-debian-linux-server

certificat let's encrypt

Installer un certificat avec Let’s Encrypt

Installer certbot-auto

Je suis sous Debian 7, et apache 2.2

Obtenir la copie de certbot-auto sur son serveur

$ wget https://dl.eff.org/certbot-auto

Rendre exécutable

$ chmod a+x certbot-auto

Exécutez le script :

$./certbot-auto

Patienter quelques minutes le temps d’installer Python et autre configuration, répondez Yes à la question. Ensuite entrez un email pour recevoir des emails, utile en cas de problème, notification de renouvellement, sécurité.

Ensuite le programme va vous lister les domaines qui sont sur votre serveur dédié, entrez les domaine séparés par une virgule ou espace (les nombres pas les noms de domaine). Le message suivant vous demande de sauvegarder le répertoire où tous les fichiers seront sauvegardés.

 To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

Créer un certificat SSL pour un domaine

Pour ajouter un certificat SSL tapez la commande suivante:

./certbot-auto certonly --webroot -w /home/domaine/public_html -d www.domaine.com -d domaine.com -w /home/sousdomaine/public_html -d sous.domaine.com -w /home/autredomaine/public_html -d www.autredomaine.fr

Que fait certbot-auto avec cette commande?

Il va d’abord créer des CSR, et ensuite les fichiers pem qui sont les clé SSL proprement dites. Un fichier de configuration à inclure au format .conf est créé qui contient les directives SSL pour Apache. Le fichier httpd.conf doit inclure ce fichier pour comprendre les certificats SSL.

Contenu du fichier options-ssl-apache.conf :

# Baseline setting to Include for SSL sites

SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

#CustomLog /var/log/apache2/access.log vhost_combined
#LogLevel warn
#ErrorLog /var/log/apache2/error.log

# Always ensure Cookies have "Secure" set (JAH 2012/1)
#Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"

On retrouve les directives qui font fonctionner le SSL :

SSLEngine on

SSLProtocol

SSLCipherSuite

SSLHonorCipherOrder

SSLCompression

SSLOptions

Remarque vous devez avoir activé le module SSL pour Apache avec la commande a2enmod ssl

Les clés au format pem sont dans le sous répertoire live. Il y en a 4, cert.pem, chain.pem (pour Nginx), fullchain.pem (le certificat) et privkey.pem la clé privée (très important à ne pas divulguer). Ces fichiers qu’il ne faut surtout pas déplacer, sont à la base du fonctionnement.

Créer un fichier pour la version https du site

Il faut créer un fichier pour la version SSL (https) de votre site sans quoi ça ne marcherait pas. En gros c’est des lignes de configuration de la même  manière que http, mais englobé dans une directive <IfModule mod_ssl.c>

Voici un exemple

<IfModule mod_ssl.c>
<VirtualHost 163.172.63.51:443>
SuexecUserGroup "#1027" "#1025"
ServerName www.domaine.net

FcgidMaxRequestLen  2000000

DocumentRoot /home/domaine/public_html
ErrorLog /home/domaine/logs/ssl_error_log
CustomLog /home/domaine/logs/ssl_access_log combined
 
<Directory /home/domaine/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExeCGI,Includes,IncludesNOEXEC,Indexes,Multiviews,SymlinksIfOwnerMatch
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/domaine/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/domaine/fcgi-bin/php5.fcgi .php5
AddType application/x-httpd-php .php
Require all granted
</Directory>
SSLCertificateFile /etc/letsencrypt/live/www.domaine.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domaine.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.domaine.net/chain.pem


</VirtualHost>
</IfModule>

J’ai oublié d’ajouter un sous-domaine comment faire?

Le problème survient lorsque vous vous rendez compte que vous auriez aimé aussi émettre un certificat pour un sous-domaine sub.domaine.com, voire tout simplement domaine.com, en effet Let’s Encrypt n’émet que des certificats pour sous domaine, il n’émet pas un certificat qui gère tous les sous-domaines. Dans le commerce il existe des certificats (wildcard) qui gèrent les sous-domaines, ils sont en général trois fois plus chers que les certificats non wildcards.

Pas de problème, car il suffit d’indiquer les sous-domaines pour lesquels vous voulez un certificat.

Cela se fait avec l’argument expand. (**Voir la nouvelle méthode plus efficace**)

certbot-auto --expand -d existing.com,example.com,newdomain.com

« expand » va dire à certbot de mettre à jour le certificat existant avec un nouveau certificat qui contient les domaines existants et va y ajouter le ou les nouveaux domaines (ou sous domaine). En fait ce que je viens de dire signifie que pour deux domaines distincts, vous pouvez créer deux certificats distincts OU un seul certificat qui va fonctionner pour les deux domaines distinct. Voir la documentation officielle pour ces manipulations.

Vous devez indiquer tous les sous-domaines y compris les sous-domaine déjà pris en compte par le certificat, c’est un peu fastidieux à écrire, sinon vous allez exclure le ou les sous-domaines non énumérés dans la commande.

update : maintenant il y a une meilleure façon de faire plus précise et plus intuitive en utilisant le flag –cert-name

./certbot-auto --cert-name www.domaine.com -d www.domaine.com,blog.domaine.com,support.domaine.com

Vous devez indiquer tous les sous-domaines y compris les sous-domaine déjà pris en compte par le certificat, c’est un peu fastidieux à écrire, sinon vous allez exclure le ou les sous-domaines non énumérés dans la commande.

$ ./certbot-auto --apache certonly --expand -d domaine.com,www.domaine.com
la sortie à l'écran :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for domaine.com
tls-sni-01 challenge for www.domaine.com
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0003_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0003_csr-certbot.pem

N’oubliez pas de redémarrer Apache en faisant :

service apache2 restart

Comment effacer un certificat?

Effacer un certificat en effaçant simplement les répertoire, mais non en fait ce n’est pas une bonne solution. Il y a une commande exprès pour ça :

certbot-auto delete --cert-name mondomaine.com

La validité des certificats de Lets’Encrypt est seulement de 90 jours, au-delà il vous faut renouveler avec la commande renew. Vous pouvez effacer à la main en utilisant un programme comme WinSCP par exemple.

Nous allons automatiser ce renew pour ne pas l’oublier, avec un crontab.

Le flag -n veut dire qu’on n’est pas en interactif, c’est à dire que le prompt ne va pas vous demander de taper une touche du clavier pour continuer le process, c’est nécessaire quand vous voulez fiare une tache CRON qui va renouveler automatiquement.

Efface un certificat Letsencrypt The Right Way!

Mais avant je vais vous lister une commande pour lister les certificats déjà en place:

Lister les certificats générés

./certbot-auto certificates

Found the following certs:
 Certificate Name: www.domaine.fr
 Domains: www.domaine.fr
 Expiry Date: 2017-12-29 15:11:49+00:00 (VALID: 78 days)
 Certificate Path: /etc/letsencrypt/live/www.domaine.fr/fullchain.pem
 Private Key Path: /etc/letsencrypt/live/www.domaine.fr/privkey.pem
 Certificate Name: www.domaine.com
 Domains: www.domaine.com
 Expiry Date: 2017-12-23 18:28:00+00:00 (VALID: 72 days)
 Certificate Path: /etc/letsencrypt/live/www.domaine.com/fullchain.pem
 Private Key Path: /etc/letsencrypt/live/www.domaine.com/privkey.pem

Cette commande est très utile, elle vous donne la liste des certificats et les jours avant expiration.

$./certbot-auto delete --cert-name www.domaine.com



-------------------------------------------------------------------------------
Deleted all files relating to certificate www.domaine.com.
-------------------------------------------------------------------------------

Supplément : rediriger les anciennes url vers la version sécurisée:

RedirectMatch permanent ^/(.*) https://www.domaine.fr/$1

Vous pouvez mettre cette directive dans le fichier de configuration du virtual host.

Les pièges du certificat SSL

Toujours considérer la version non www

J’insisterai en particulier sur la création pour le sous-domaines sans www. Par exemple www.domaine.com, www est le sous domaine, en vrai le domaine c’est domaine.com.

Donc si vous avez un site www.domaine.com et que vous vouliez rediriger domaine.com vers www.domaine.com, il vous faut aussi intégrer ce sous-domaine dans le certificat. Parce que si vous ne le faites pas, tout requête de domaine.com  va se solder par un avertissement comme quoi le site n’est pas sécurisé et qu’il vous faut confirmer l’exception de sécurité. Cela étant déjà un roblème pour un humaine, imaginez Google !

Non mais j’ai fait une redirection 301 vers le www.domaine.com

Et non ça ne marche pas comme ça ! Quand vous faites une requête HTTP à domaine.com, il doit le résoudre domaine.com avec de faire le redirection, et sans certificat SSL, il ne pourra le résoudre, dans votre redirection 301 tombe à l’eau.

Ok je m’en fiche Google aura une erreur sur ce sous-domaine c’est pas grave

Là encore je suis désolé, dans le cas où vous avez un dédié tournant sous Apache (cas que je connais) avec plusieurs virtual host (donc plusieurs domaines), si le domaine.com est résolu manuellement (forçage SSL), il va pointer sur un autre site, en fait le premier qu’Apache aura trouvé.

serveur web apache php

Différence entre une zone et un domaine

Une zone est une portion d’un domaine.

Relation entre une zone et son parent : Par exemple sousdomaine.example.com a pour parent example.com

http://stackoverflow.com/questions/22440582/difference-between-a-dns-zone-and-dns-domain

Retour en haut