2009-09-17 10 views
0

Je suis en train d'écrire un programme PHP pour les sauvegardes créées automatiquement des tables MySQL sous forme de fichiers SQL sur le serveur:résultats de mysqldump dans beaucoup de lignes de commentaires, pas de contenu réel

 

$backup = "$path/$tablename.sql"; 
$table = "mydbname.mytablename"; 

exec(
    sprintf(
    '/usr/bin/mysqldump --host=%s --user=%s --password=%s %s --quick --lock-tables --add-drop-table > %s', 
    $host, 
    $user, 
    $password, 
    $table, 
    $backup 
) 
); 

Tout ce que je reçois dans le résultat fichier sql est le suivant:

 
-- MySQL dump 10.10 
-- 
-- Host: localhost Database: mydbname.mytablename 
-- ------------------------------------------------------ 
-- Server version 5.0.27 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

Il semble que la liste fishy des résultats Base de données: mydbname.mytablename.

Je ne sais pas par où commencer. Mon hôte, en aidant mon installation au début du programme, a dit que je devrais désactiver safe_mode (était déjà fait) et donner accès au binaire (je ne sais pas ce que cela signifie).

Depuis l'hôte prend deux jours pour répondre à chaque fois que je pose une question, je voudrais résoudre moi-même si possible.

Répondre

5

Vous commande mysqldump est comme ceci:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD TABLE --quick --lock-tables --add-drop-table 

En regardant the manual of mysqldump, je dirais qu'il pense que le tableau est en fait le nom de votre base de données (citant):

Il existe trois façons générales d'invoquer mysqldump:

shell> mysqldump [options] db_name [tables] 
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...] 
shell> mysqldump [options] --all-databases 

Apparemment, vous devez mettre le nom de la base de données avant le nom de la table que vous souhaitez vider.

Ainsi, par exemple, quelque chose comme cela pourrait faire l'affaire:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DBNAME TABLE --quick --lock-tables --add-drop-table 


Hope this helps!


EDIT: En fait, je fait un test rapide, en utilisant « databasename.tablename », comme vous l'avez fait:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME.TABLENAME 

Je reçois le même genre de sortie que vous avez ... Mais je aussi ont une erreur:

mysqldump: Got error: 1102: Incorrect database name 'DBNAME.TABLENAME' when selecting the database 

ce qui, je suppose, va à la sortie d'erreur, et non la sortie standard (vous ne sont réorientent que deuxième à votre dossier)

Si j'utilise:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME TABLENAME 

Tout fonctionne OK: pas d'erreur, et je la décharge.

+0

J'ai ajouté un espace entre le nom de la base de données et le nom de la table (au lieu d'un point) et cela a fonctionné correctement. Merci! –

+0

De rien :-) Amusez-vous! –