PAB's blog - Tag - mysql2022-11-19T07:02:34+00:00urn:md5:5926f7e05a689ea9af53f3d15057feb6DotclearConvertir une base de données SQLite vers MySQL/MariaDBurn:md5:2693e205a2e16e2252b2edc60c0b98f42014-03-30T06:48:00+02:002017-07-31T07:40:03+02:00Pierre-Alain Bmariadbmysqlsqlite <p>Il est assez aisé de convertir une base SQLite pour MySQL/MariaDB. J'inspire le contenu de ce poste de cet article : <a href="http://fabianpeter.de/cloud/owncloud-migrating-from-sqlite-to-mysql/">http://fabianpeter.de/cloud/owncloud-migrating-from-sqlite-to-mysql/</a> écrit pour ownCloud mais qui peut fonctionner pour d'autres cas de migration bien sûr.</p>
<p>On commence par exporter le contenu de la base SQLite dans un fichier <em>dump.sql</em> :</p>
<pre>
sqlite3 database.sqlite3 .dump > dump.sql
</pre>
<p>On effectue ensuite automatiquement les modifications de syntaxe nécessaires pour que MySQL/MariaDB s'y retrouve à l'aide d'un script trouvé <a href="http://fabianpeter.de/cloud/owncloud-migrating-from-sqlite-to-mysql/">ici</a> dont le contenu est rappelé plus bas pour archivage :</p>
<pre>
cat dump.sql | python sqlite3-to-mysql.py > nouveau-sql-pour-mariadb.sql
</pre>
<h3>Le script de conversion (dont je ne suis pas l'auteur) :</h3>
<pre>
#! /usr/bin/env python
import sys
def main():
print "SET sql_mode='NO_BACKSLASH_ESCAPES';"
lines = sys.stdin.read().splitlines()
for line in lines:
processLine(line)
def processLine(line):
if (
line.startswith("PRAGMA") or
line.startswith("BEGIN TRANSACTION;") or
line.startswith("COMMIT;") or
line.startswith("DELETE FROM sqlite_sequence;") or
line.startswith("INSERT INTO \"sqlite_sequence\"")
):
return
line = line.replace("AUTOINCREMENT", "AUTO_INCREMENT")
line = line.replace("DEFAULT 't'", "DEFAULT '1'")
line = line.replace("DEFAULT 'f'", "DEFAULT '0'")
line = line.replace(",'t'", ",'1'")
line = line.replace(",'f'", ",'0'")
in_string = False
newLine = ''
for c in line:
if not in_string:
if c == "'":
in_string = True
elif c == '"':
newLine = newLine + '`'
continue
elif c == "'":
in_string = False
newLine = newLine + c
print newLine
if __name__ == "__main__":
main()
</pre>Sécuriser (un peu mieux) MariaDB/MySQL en une ligne de commandeurn:md5:39ee86a374969278c853160850ef18832013-11-01T08:02:00+01:002013-11-01T08:21:08+01:00Pierre-Alain Blinuxmariadbmysqlplanet-libresécurité <p>Cette petite astuce ne suffira pas à sécuriser parfaitement votre serveur MariaDB/MySQL mais cela y contribuera fortement ! Et ça ne coûte que quelques secondes donc il serait bête de s'en priver.</p>
<p>La commande :</p>
<pre>
mysql_secure_installation
</pre>
<p>va automatiquement durcir votre installation et la rendre plus à même d'être déployée en production en :</p>
<ul>
<li>vérifiant que le(s) compte(s) 'root' dispose(nt) d'un mot de passe</li>
<li>supprimer les comptes de test et la base de données de test accessible par défaut à tout utilisateur</li>
<li>supprimer les comptes root (si vous le souhaitez) accessibles depuis un hôte autre que 'localhost'</li>
<li>supprimer les comptes anonymes</li>
</ul>
<p>Voilà qui permet d'être plus serein !</p>Sauvegarder régulièrement ses bases de données MariaDB/MySQL (MàJ)urn:md5:5815d67288910f236fa058a15dc55f632013-10-31T08:05:00+01:002013-10-31T14:35:05+01:00Pierre-Alain Blinuxmariadbmysqlplanet-libresécurité <p>La commande <em>mysqldump</em> est fort pratique pour effectuer une sauvegarde des bases de données sur un serveur MariaDB/MySQL. On peut bien sûr l'utiliser pour mettre en place des solutions de sauvegarde maison (cf. 2e section de la dépêche). On peut aussi utiliser le petit outil "automysqlbackup" que m'a conseillé Jdrien.</p>
<h4>Une solution toute prête : automysqlbackup</h4>
<p>Automysqlbackup est un petit script qui fera sans doute tout ce que vous cherchez (et peut-être plus !) : conservation de versions journalières, hebdomadaires des bases, utilisation de l'utilisateur par défaut Debian pour éviter d'avoir à saisir un mot de passe dans un script cron...
Je vous laisse le découvrir dans cet article :
<a href="http://jdrien.net/chronicus/index.php?article66/automysqlbackup-ou-l-art-de-ne-pas-reinventer-la-roue">http://jdrien.net/chronicus/index.php?article66/automysqlbackup-ou-l-art-de-ne-pas-reinventer-la-roue</a></p>
<p>Merci à Jdrien pour m'avoir présenté cette solution !</p>
<h4>Une solution "maison" si automysqlbackup ne vous convainc pas :</h4>
<p>Voilà un petit script pour automatiser intelligemment le processus. Prévu pour être lancé une fois par jour, le script effectue les actions suivantes :</p>
<ul>
<li>il liste les bases contenues sur le serveur</li>
<li>il exporte chaque base dans un fichier nom_de_la_base.sql.X avec X le numéro du jour (1 pour Lundi, 2 pour Mardi...)</li>
</ul>
<pre>
#!/bin/bash
nbday=$(date +"%u")
cd /chemin/backup/mysql
for i in *.sql.$nbday; do rm -f "$i"; done
mysql --user=debian-sys-maint --password="abcdef123456" -e 'show databases' | while read dbname; do mysqldump --user=debian-sys-maint --password="abcdef123456" "$dbname" > "$dbname".sql.$nbday; done
</pre>
<p>Détaillons le travail ligne à ligne.</p>
<p>On récupère le numéro du jour :</p>
<pre>
nbday=$(date +"%u")
</pre>
<p>On se place dans le dossier de sauvegarde des bases SQL :</p>
<pre>
cd /chemin/backup/mysql
</pre>
<p>On supprime les sauvegardes de la semaine passée :</p>
<pre>
for i in *.sql.$nbday; do rm -f "$i"; done
</pre>
<p>On parcourt la base de données et on exporte avec mysqdump le contenu de chaque base dans un fichier .sql.X (avec X le numéro du jour) :</p>
<pre>
mysql --user=debian-sys-maint --password="abcdef123456" -e 'show databases' | while read dbname; do mysqldump --user=debian-sys-maint --password="abcdef123456" "$dbname" > "$dbname".sql.$nbday; done
</pre>
<p>Vous noterez que l'accès à la base est effectuée avec l'utilisateur 'debian-sys-maint'. Cela n'est bien sûr valable que sur les sytèmes Debian. 'debian-sys-maint' est équivalent à un compte 'root' et le mot de passe paramétré par défaut pour ce compte se trouve dans /etc/mysql/debian.cnf. Utilisé par le système pour certaines fonctions de maintenance, il vous permettra dans ce cas de ne pas laisser votre mot de passe 'root' "à vous" en clair dans un fichier !</p>
<p>Bonnes sauvegardes !</p>