JeuWeb - Crée ton jeu par navigateur
Sauvegarde InnoDB ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Sauvegarde InnoDB ? (/showthread.php?tid=4468)

Pages : 1 2 3


Sauvegarde InnoDB ? - Unkof - 30-11-2009

Bonsoir à tous,

J'utilise mysqldump pour générer une sauvegarde automatique d'une base contenant des tables InnoDB, ce qui fonctionne très bien.

mysqldump --user=user --password=pwd --databases test > /home/backup/test.sql

Je restaure les données avec

mysqldump --user=user --password=pwd --databases test < /home/backup/test.sql

Cependant, en ayant copié le fichier test.sql pour le restaurer sur une autre machine, quand je veux restaurer, mysqldump me dit que la base de donnée n'existe pas (compréhensible, elle n'existe vraiment pas), et du coup, il ne fait pas la restauration.

Quelle syntaxe de commande utiliser en sauvegarde et en restauration pour qu'il fasse tout (création de la base, et des tables, si elles n'existent pas ... avant l'insertion des données) ?

Pourtant, en ouvrant le fichier Mysql, l'entête contient ca :

-- MySQL dump 10.11
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 5.0.44-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
*/;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `test`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `test`;

--
-- Table structure for table `table1`
--

DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` ...
-----------------------------------------------------------

A première vue, y a bien les créations de bases et de tables .. c'est ma syntaxe pour la restauration qui cloche ?


RE: Sauvegarde InnoDB ? - NicoMSEvent - 01-12-2009

avec oracle, il existe CREATE OR REPLACE table|view|package|...
Tu as p-e qqch de similaire avec mysql? (je n'ai pas vraiment d'expérience avec InnoDB... ça ma énervé, alors je suis gentiment retourné a format MyISAM :p )


RE: Sauvegarde InnoDB ? - christouphe - 01-12-2009

voilà ce que je mets (après avoir fait une sauvegarde initiale avec PMA):

SET FOREIGN_KEY_CHECKS=0;

sauvegarde table (drop + create) + insert data

alter tables

SET FOREIGN_KEY_CHECKS=1;

Et là tu peux sauver mais surtout ré-implanter ta bdd InnoDB Wink

ERFFF j'avais pas vu que tu le fasais par mysqldump:

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

=>
For a faster "mysqldump" innodb tables
1. mysqldump --opt --user=username --password database > filetosaveto.sql

2. open the dump file put this statement at the beginning of the sql dump text file:

SET FOREIGN_KEY_CHECKS=0;

3. mysql --user=username --password database < dumpfile.sql

Very fast.

Dans les commentaires en bas


RE: Sauvegarde InnoDB ? - Unkof - 01-12-2009

NicoMSEvent:MyISAM ne gère pas le transactionnel .. c'est pour ca que j'utilise InnoDB sur ce coup. Je suis plutôt pour le MyIsam en règle générale, mais là, pas possible .. ^^

Christouphe:le problème c'est qu'en faisant ca:
mysqldump --opt --user=username --password database > filetosaveto.sql

Lors de la restauration, si il ne trouve pas la base de données, il ne fait pas la restauration, idem pour les frm des tables. Il met simplement un mess d'erreur disant qu'il n'y a pas la base ou les tables, et s'arrête là.

En faisant:
mysqldump --user=username --password --databases database > filetosaveto.sql

Il indique dans le fichier .sql la création de la base et des tables, mais il ne le fait pas non plus !?... c'est ca mon problème ... ^^

Moi je cherche une solution pour qu'il refasse la base et les tables si il ne les trouve pas avant d'insérer les données. En clair, tout avoir en une seule commande. Là je suis obligé de me créer la table manuellement, de copier les .frm manuellement, et après d'insérer les données avec mysqldump, c'est lourd.

Quelqu'un a une idée ?


RE: Sauvegarde InnoDB ? - NicoMSEvent - 01-12-2009

et via phpmyadmin, tu pourrais extraire toute ta db en un coup (peu importe le format)... a moins que tu ne souhaites vraiment faire ça qu'en mode console? ^^


RE: Sauvegarde InnoDB ? - christouphe - 01-12-2009

le problème avec mysqldump, comme avec PMA, c'est que la base "vide" doit exister, sinon tu ne peux rien faire...Aucune solution que je connaisse ne peux s'appliquer.


RE: Sauvegarde InnoDB ? - Unkof - 01-12-2009

NicoMSEvent:Ben en console tu programmes une tache cron, et les sauvegardes, t'as plus besoin de les faire .... ^^

Christouphe:Il doit bien y avoir une solution, d'autant plus que dans le fichier .sql, t'as ca:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;

Il n'y aurait pas la commande de création si il ne savait pas le gérer. En plus, y a le même problème avec les tables, si les tables n'existent pas, il refuse de restaurer Confused

Y a forcément une solution, j'imagine bien le gars qui sauvegarde un serveur avec X bases et X tables, lors d'une restauration refaire les bases et les tables à la main, même vide .... ^^

Bon, ben je continu de me taper la doc et de faire des tests alors .... ^^ ...


RE: Sauvegarde InnoDB ? - Ter Rowan - 01-12-2009

question con mais c'est le problème de création de table qui m'y fait penser


est ce que le user que tu utilises a les bons droits pour créer une base, une table, etc...

a+

(PS je suis une quiche sur ces points, mais après tout c'est peut être bien plus simple ^^ )


RE: Sauvegarde InnoDB ? - NicoMSEvent - 01-12-2009

ha d'accord... je n'avais pas toutes les données en main... je pensais que tu devais faire une sauvegarde ponctuelle... Wink


RE: Sauvegarde InnoDB ? - Unkof - 02-12-2009

Ter Rowan:Oui oui, il a les droits. C'est pas si con que ca, des fois on peut chercher longtemps avec des trucs aussi simple ... Wink

NicoMSEvent:Si ce n'était qu'une question de sauvegarde ponctuelle, c'est clair que j'aurai fait du manuel ... ^^