@@ -1,763 +0,0 @@
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
< meta name = "generator" content = "AsciiDoc 8.6.9" >
< title > SQLite Backup< / title >
< style type = "text/css" >
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
/* Default font. */
body {
font-family : Georgia , serif ;
}
/* Title font. */
h1 , h2 , h3 , h4 , h5 , h6 ,
div . title , caption . title ,
thead , p . table . header ,
# toctitle ,
# author , # revnumber , # revdate , # revremark ,
# footer {
font-family : Arial , Helvetica , sans-serif ;
}
body {
margin : 1 em 5 % 1 em 5 % ;
}
a {
color : blue ;
text-decoration : underline ;
}
a : visited {
color : fuchsia ;
}
em {
font-style : italic ;
color : navy ;
}
strong {
font-weight : bold ;
color : #083194 ;
}
h1 , h2 , h3 , h4 , h5 , h6 {
color : #527bbd ;
margin-top : 1.2 em ;
margin-bottom : 0.5 em ;
line-height : 1.3 ;
}
h1 , h2 , h3 {
border-bottom : 2 px solid silver ;
}
h2 {
padding-top : 0.5 em ;
}
h3 {
float : left ;
}
h3 + * {
clear : left ;
}
h5 {
font-size : 1.0 em ;
}
div . sectionbody {
margin-left : 0 ;
}
hr {
border : 1 px solid silver ;
}
p {
margin-top : 0.5 em ;
margin-bottom : 0.5 em ;
}
ul , ol , li > p {
margin-top : 0 ;
}
ul > li { color : #aaa ; }
ul > li > * { color : black ; }
. monospaced , code , pre {
font-family : "Courier New" , Courier , monospace ;
font-size : inherit ;
color : navy ;
padding : 0 ;
margin : 0 ;
}
pre {
white-space : pre-wrap ;
}
# author {
color : #527bbd ;
font-weight : bold ;
font-size : 1.1 em ;
}
# email {
}
# revnumber , # revdate , # revremark {
}
# footer {
font-size : small ;
border-top : 2 px solid silver ;
padding-top : 0.5 em ;
margin-top : 4.0 em ;
}
# footer-text {
float : left ;
padding-bottom : 0.5 em ;
}
# footer-badges {
float : right ;
padding-bottom : 0.5 em ;
}
# preamble {
margin-top : 1.5 em ;
margin-bottom : 1.5 em ;
}
div . imageblock , div . exampleblock , div . verseblock ,
div . quoteblock , div . literalblock , div . listingblock , div . sidebarblock ,
div . admonitionblock {
margin-top : 1.0 em ;
margin-bottom : 1.5 em ;
}
div . admonitionblock {
margin-top : 2.0 em ;
margin-bottom : 2.0 em ;
margin-right : 10 % ;
color : #606060 ;
}
div . content { /* Block element content. */
padding : 0 ;
}
/* Block element titles. */
div . title , caption . title {
color : #527bbd ;
font-weight : bold ;
text-align : left ;
margin-top : 1.0 em ;
margin-bottom : 0.5 em ;
}
div . title + * {
margin-top : 0 ;
}
td div . title : first-child {
margin-top : 0.0 em ;
}
div . content div . title : first-child {
margin-top : 0.0 em ;
}
div . content + div . title {
margin-top : 0.0 em ;
}
div . sidebarblock > div . content {
background : #ffffee ;
border : 1 px solid #dddddd ;
border-left : 4 px solid #f0f0f0 ;
padding : 0.5 em ;
}
div . listingblock > div . content {
border : 1 px solid #dddddd ;
border-left : 5 px solid #f0f0f0 ;
background : #f8f8f8 ;
padding : 0.5 em ;
}
div . quoteblock , div . verseblock {
padding-left : 1.0 em ;
margin-left : 1.0 em ;
margin-right : 10 % ;
border-left : 5 px solid #f0f0f0 ;
color : #888 ;
}
div . quoteblock > div . attribution {
padding-top : 0.5 em ;
text-align : right ;
}
div . verseblock > pre . content {
font-family : inherit ;
font-size : inherit ;
}
div . verseblock > div . attribution {
padding-top : 0.75 em ;
text-align : left ;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div . verseblock + div . attribution {
text-align : left ;
}
div . admonitionblock . icon {
vertical-align : top ;
font-size : 1.1 em ;
font-weight : bold ;
text-decoration : underline ;
color : #527bbd ;
padding-right : 0.5 em ;
}
div . admonitionblock td . content {
padding-left : 0.5 em ;
border-left : 3 px solid #dddddd ;
}
div . exampleblock > div . content {
border-left : 3 px solid #dddddd ;
padding-left : 0.5 em ;
}
div . imageblock div . content { padding-left : 0 ; }
span . image img { border-style : none ; vertical-align : text - bottom ; }
a . image : visited { color : white ; }
dl {
margin-top : 0.8 em ;
margin-bottom : 0.8 em ;
}
dt {
margin-top : 0.5 em ;
margin-bottom : 0 ;
font-style : normal ;
color : navy ;
}
dd > * : first-child {
margin-top : 0.1 em ;
}
ul , ol {
list-style-position : outside ;
}
ol . arabic {
list-style-type : decimal ;
}
ol . loweralpha {
list-style-type : lower-alpha ;
}
ol . upperalpha {
list-style-type : upper-alpha ;
}
ol . lowerroman {
list-style-type : lower-roman ;
}
ol . upperroman {
list-style-type : upper-roman ;
}
div . compact ul , div . compact ol ,
div . compact p , div . compact p ,
div . compact div , div . compact div {
margin-top : 0.1 em ;
margin-bottom : 0.1 em ;
}
tfoot {
font-weight : bold ;
}
td > div . verse {
white-space : pre ;
}
div . hdlist {
margin-top : 0.8 em ;
margin-bottom : 0.8 em ;
}
div . hdlist tr {
padding-bottom : 15 px ;
}
dt . hdlist1 . strong , td . hdlist1 . strong {
font-weight : bold ;
}
td . hdlist1 {
vertical-align : top ;
font-style : normal ;
padding-right : 0.8 em ;
color : navy ;
}
td . hdlist2 {
vertical-align : top ;
}
div . hdlist . compact tr {
margin : 0 ;
padding-bottom : 0 ;
}
. comment {
background : yellow ;
}
. footnote , . footnoteref {
font-size : 0.8 em ;
}
span . footnote , span . footnoteref {
vertical-align : super ;
}
# footnotes {
margin : 20 px 0 20 px 0 ;
padding : 7 px 0 0 0 ;
}
# footnotes div . footnote {
margin : 0 0 5 px 0 ;
}
# footnotes hr {
border : none ;
border-top : 1 px solid silver ;
height : 1 px ;
text-align : left ;
margin-left : 0 ;
width : 20 % ;
min-width : 100 px ;
}
div . colist td {
padding-right : 0.5 em ;
padding-bottom : 0.3 em ;
vertical-align : top ;
}
div . colist td img {
margin-top : 0.3 em ;
}
@ media print {
# footer-badges { display : none ; }
}
# toc {
margin-bottom : 2.5 em ;
}
# toctitle {
color : #527bbd ;
font-size : 1.1 em ;
font-weight : bold ;
margin-top : 1.0 em ;
margin-bottom : 0.1 em ;
}
div . toclevel0 , div . toclevel1 , div . toclevel2 , div . toclevel3 , div . toclevel4 {
margin-top : 0 ;
margin-bottom : 0 ;
}
div . toclevel2 {
margin-left : 2 em ;
font-size : 0.9 em ;
}
div . toclevel3 {
margin-left : 4 em ;
font-size : 0.9 em ;
}
div . toclevel4 {
margin-left : 6 em ;
font-size : 0.9 em ;
}
span . aqua { color : aqua ; }
span . black { color : black ; }
span . blue { color : blue ; }
span . fuchsia { color : fuchsia ; }
span . gray { color : gray ; }
span . green { color : green ; }
span . lime { color : lime ; }
span . maroon { color : maroon ; }
span . navy { color : navy ; }
span . olive { color : olive ; }
span . purple { color : purple ; }
span . red { color : red ; }
span . silver { color : silver ; }
span . teal { color : teal ; }
span . white { color : white ; }
span . yellow { color : yellow ; }
span . aqua-background { background : aqua ; }
span . black-background { background : black ; }
span . blue-background { background : blue ; }
span . fuchsia-background { background : fuchsia ; }
span . gray-background { background : gray ; }
span . green-background { background : green ; }
span . lime-background { background : lime ; }
span . maroon-background { background : maroon ; }
span . navy-background { background : navy ; }
span . olive-background { background : olive ; }
span . purple-background { background : purple ; }
span . red-background { background : red ; }
span . silver-background { background : silver ; }
span . teal-background { background : teal ; }
span . white-background { background : white ; }
span . yellow-background { background : yellow ; }
span . big { font-size : 2 em ; }
span . small { font-size : 0.6 em ; }
span . underline { text-decoration : underline ; }
span . overline { text-decoration : overline ; }
span . line-through { text-decoration : line-through ; }
div . unbreakable { page-break-inside : avoid ; }
/*
* xhtml11 specific
*
* */
div . tableblock {
margin-top : 1.0 em ;
margin-bottom : 1.5 em ;
}
div . tableblock > table {
border : 3 px solid #527bbd ;
}
thead , p . table . header {
font-weight : bold ;
color : #527bbd ;
}
p . table {
margin-top : 0 ;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div . tableblock > table [ frame = "void" ] {
border-style : none ;
}
div . tableblock > table [ frame = "hsides" ] {
border-left-style : none ;
border-right-style : none ;
}
div . tableblock > table [ frame = "vsides" ] {
border-top-style : none ;
border-bottom-style : none ;
}
/*
* html5 specific
*
* */
table . tableblock {
margin-top : 1.0 em ;
margin-bottom : 1.5 em ;
}
thead , p . tableblock . header {
font-weight : bold ;
color : #527bbd ;
}
p . tableblock {
margin-top : 0 ;
}
table . tableblock {
border-width : 3 px ;
border-spacing : 0 px ;
border-style : solid ;
border-color : #527bbd ;
border-collapse : collapse ;
}
th . tableblock , td . tableblock {
border-width : 1 px ;
padding : 4 px ;
border-style : solid ;
border-color : #527bbd ;
}
table . tableblock . frame-topbot {
border-left-style : hidden ;
border-right-style : hidden ;
}
table . tableblock . frame-sides {
border-top-style : hidden ;
border-bottom-style : hidden ;
}
table . tableblock . frame-none {
border-style : hidden ;
}
th . tableblock . halign-left , td . tableblock . halign-left {
text-align : left ;
}
th . tableblock . halign-center , td . tableblock . halign-center {
text-align : center ;
}
th . tableblock . halign-right , td . tableblock . halign-right {
text-align : right ;
}
th . tableblock . valign-top , td . tableblock . valign-top {
vertical-align : top ;
}
th . tableblock . valign-middle , td . tableblock . valign-middle {
vertical-align : middle ;
}
th . tableblock . valign-bottom , td . tableblock . valign-bottom {
vertical-align : bottom ;
}
/*
* manpage specific
*
* */
body . manpage h1 {
padding-top : 0.5 em ;
padding-bottom : 0.5 em ;
border-top : 2 px solid silver ;
border-bottom : 2 px solid silver ;
}
body . manpage h2 {
border-style : none ;
}
body . manpage div . sectionbody {
margin-left : 3 em ;
}
@ media print {
body . manpage div # toc { display : none ; }
}
< / style >
< script type = "text/javascript" >
/*< + '])' ) ;
// Function that scans the DOM tree for header elements (the DOM2
// nodeIterator API would be a better technique but not supported by all
// browsers).
var iterate = function ( el ) {
for ( var i = el . firstChild ; i != null ; i = i . nextSibling ) {
if ( i . nodeType == 1 /* Node.ELEMENT_NODE */ ) {
var mo = re . exec ( i . tagName ) ;
if ( mo && ( i . getAttribute ( "class" ) || i . getAttribute ( "className" ) ) != "float" ) {
result [ result . length ] = new TocEntry ( i , getText ( i ) , mo [ 1 ] - 1 ) ;
}
iterate ( i ) ;
}
}
}
iterate ( el ) ;
return result ;
}
var toc = document . getElementById ( "toc" ) ;
if ( ! toc ) {
return ;
}
// Delete existing TOC entries in case we're reloading the TOC.
var tocEntriesToRemove = [ ] ;
var i ;
for ( i = 0 ; i < toc . childNodes . length ; i ++ ) {
var entry = toc . childNodes [ i ] ;
if ( entry . nodeName . toLowerCase ( ) == 'div'
&& entry . getAttribute ( "class" )
&& entry . getAttribute ( "class" ) . match ( /^toclevel/ ) )
tocEntriesToRemove . push ( entry ) ;
}
for ( i = 0 ; i < tocEntriesToRemove . length ; i ++ ) {
toc . removeChild ( tocEntriesToRemove [ i ] ) ;
}
// Rebuild TOC entries.
var entries = tocEntries ( document . getElementById ( "content" ) , toclevels ) ;
for ( var i = 0 ; i < entries . length ; ++ i ) {
var entry = entries [ i ] ;
if ( entry . element . id == "" )
entry . element . id = "_toc_" + i ;
var a = document . createElement ( "a" ) ;
a . href = "#" + entry . element . id ;
a . appendChild ( document . createTextNode ( entry . text ) ) ;
var div = document . createElement ( "div" ) ;
div . appendChild ( a ) ;
div . className = "toclevel" + entry . toclevel ;
toc . appendChild ( div ) ;
}
if ( entries . length == 0 )
toc . parentNode . removeChild ( toc ) ;
} ,
/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////
/* Based on footnote generation code from:
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
*/
footnotes : function ( ) {
// Delete existing footnote entries in case we're reloading the footnodes.
var i ;
var noteholder = document . getElementById ( "footnotes" ) ;
if ( ! noteholder ) {
return ;
}
var entriesToRemove = [ ] ;
for ( i = 0 ; i < noteholder . childNodes . length ; i ++ ) {
var entry = noteholder . childNodes [ i ] ;
if ( entry . nodeName . toLowerCase ( ) == 'div' && entry . getAttribute ( "class" ) == "footnote" )
entriesToRemove . push ( entry ) ;
}
for ( i = 0 ; i < entriesToRemove . length ; i ++ ) {
noteholder . removeChild ( entriesToRemove [ i ] ) ;
}
// Rebuild footnote entries.
var cont = document . getElementById ( "content" ) ;
var spans = cont . getElementsByTagName ( "span" ) ;
var refs = { } ;
var n = 0 ;
for ( i = 0 ; i < spans . length ; i ++ ) {
if ( spans [ i ] . className == "footnote" ) {
n ++ ;
var note = spans [ i ] . getAttribute ( "data-note" ) ;
if ( ! note ) {
// Use [\s\S] in place of . so multi-line matches work.
// Because JavaScript has no s (dotall) regex flag.
note = spans [ i ] . innerHTML . match ( /\s*\[([\s\S]*)]\s*/ ) [ 1 ] ;
spans [ i ] . innerHTML =
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]" ;
spans [ i ] . setAttribute ( "data-note" , note ) ;
}
noteholder . innerHTML +=
"<div class='footnote' id='_footnote_" + n + "'>" +
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
n + "</a>. " + note + "</div>" ;
var id = spans [ i ] . getAttribute ( "id" ) ;
if ( id != null ) refs [ "#" + id ] = n ;
}
}
if ( n == 0 )
noteholder . parentNode . removeChild ( noteholder ) ;
else {
// Process footnoterefs.
for ( i = 0 ; i < spans . length ; i ++ ) {
if ( spans [ i ] . className == "footnoteref" ) {
var href = spans [ i ] . getElementsByTagName ( "a" ) [ 0 ] . getAttribute ( "href" ) ;
href = href . match ( /#.*/ ) [ 0 ] ; // Because IE return full URL.
n = refs [ href ] ;
spans [ i ] . innerHTML =
"[<a href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]" ;
}
}
}
} ,
install : function ( toclevels ) {
var timerId ;
function reinstall ( ) {
asciidoc . footnotes ( ) ;
if ( toclevels ) {
asciidoc . toc ( toclevels ) ;
}
}
function reinstallAndRemoveTimer ( ) {
clearInterval ( timerId ) ;
reinstall ( ) ;
}
timerId = setInterval ( reinstall , 500 ) ;
if ( document . addEventListener )
document . addEventListener ( "DOMContentLoaded" , reinstallAndRemoveTimer , false ) ;
else
window . onload = reinstallAndRemoveTimer ;
}
}
asciidoc . install ( ) ;
/*]]>*/
< / script >
< / head >
< body class = "article" >
< div id = "header" >
< h1 > SQLite Backup< / h1 >
< / div >
< div id = "content" >
< div id = "preamble" >
< div class = "sectionbody" >
< div class = "paragraph" > < p > Evolution de la < a href = "http://www.bricabox.info" > bricabox< / a > oblige, certain
scripts doivent aussi évoluer. C’ est la vie du code, je ne vous apprend rien.< / p > < / div >
< div class = "paragraph" > < p > La bricabox a maintenant un site pour elle, basé sur < a href = "http://radiantcms.org/" > Radiant CMS< / a > , Jean-mi a construit un < a href = "http://www.lacomte.net" > portail de la comte< / a > également basé sur RadiantCMS (oui au passage, sont blog à changé d’ adresse: < a href = "http://blog.lacomte.net" > blog.lacomte.net< / a > ). Tout les deux n’ ayant pas pour vocation d’être gavé de données, ni d’ avoir beaucoup d’ accès en écriture, nous avons tout les deux opté pour < a href = "http://www.sqlite.org/" > SQLite< / a > , < span class = "line-through" > Une petite base de donnée< / span > un petit programme de gestion de base de donnée relationnelle écrit en C, très leger, très pratique dans ce genre de cas de figure (pas de configuration complexe, pas de serveur… ).< / p > < / div >
< div class = "paragraph" > < p > Mais voilà, la tache de backup des bases de donnée avait été écrit uniquement pour les bases de l’époque: < a href = "http://www-fr.mysql.com/" > MySQL< / a > (je vous passe l’ actu du jour sur le rachat de MySQLAB par Sun Microsystem ? :D). Donc il faut ajouter quelque ligne là dedans.< / p > < / div >
< div class = "paragraph" > < p > Un peu de recherche m’ amène sur < a href = "http://www-128.ibm.com/developerworks/opensource/library/os-sqlite/" > une bonne introduction pour SQLite chez IBM< / a > (enfin, vu la facilité d’ utilisation, est-ce nécessaire :D). Tout ça pour finalement ajouter un test et une petite ligne:< / p > < / div >
< div class = "listingblock" >
< div class = "content monospaced" >
< pre > sqlite3 -batch #{db_config[‘ database’ ]} .dump > #{backup_file}< / pre >
< / div > < / div >
< div class = "paragraph" > < p > Et voilà les taches de backup qui sont à nouveaux opérationnelles.< / p > < / div >
< div class = "paragraph" > < p > < em > Bon reste à voir où je place ces fichiers… < / em > < / p > < / div >
< div class = "paragraph" > < p > < em > J’ aime de plus en plus SQLite :) Attention à utiliser avec modération quand même< / em > < / p > < / div >
< / div >
< / div >
< / div >
< div id = "footnotes" > < hr > < / div >
< div id = "footer" >
< div id = "footer-text" >
Last updated
2019-10-18 00:39:05 CEST
< / div >
< / div >
< / body >
< / html >