Copier une table d'un serveur vers une table d'un autre serveur ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Copier une table d'un serveur vers une table d'un autre serveur ?

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 02 janv. 2021, 03:07

Plop ! !

Avec un var_dump($results2); j'obtiens un boolean false, d'ailleurs la requête qui suit (une mise à jour de la date et heure de la synchronisation de la table on dira), n’est pas exécutée non plus apparemment (valeur inchangée dans la DB) (mais pas de message d'erreur la concernant).

Si je vire la commande pour importer le fichier de dump :

Code : Tout sélectionner

$sqlSource = file_get_contents("$tablename.sql"); mysqli_multi_query($dbwrite,$sqlSource);
Pas de problème, le nombre de ligne de la table déjà présente (puisque non remplacée par le dump) est affiché, la "date et heure" de synchro est bien enregistrée dans la DB.

Voici un des fichiers dump (désolé ça alourdi le post mais il y a peut être quelque chose qui m'échappe) :

Code : Tout sélectionner

-- mysqldump-php https://github.com/ifsnop/mysqldump-php -- -- Host: ........ddns.net Database: radiodj161 -- ------------------------------------------------------ -- Server version 5.7.25-log -- Date: Sat, 02 Jan 2021 01:56:28 +0100 /*!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 utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40101 SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT */; /*!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 */; -- -- Table structure for table `category` -- DROP TABLE IF EXISTS `category`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `category` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `category` -- LOCK TABLES `category` WRITE; /*!40000 ALTER TABLE `category` DISABLE KEYS */; SET autocommit=0; INSERT INTO `category` VALUES (1,'Music'),(2,'Sound Effects'),(3,'Sweepers'),(4,'Station IDs'),(5,'Jingles'),(6,'Promos'),(7,'Commercials'),(8,'News'),(9,'Interviews'),(10,'Radio Shows'),(11,'Radio Streams'),(13,'Dance Hold'),(14,'Club 90'),(15,'Club 90 Le Live'),(16,'Back To Mix'),(17,'100%90'),(18,'Double Zone'),(19,'Moov Party'),(20,'Moov Party Steph'),(21,'Top Dance'),(22,'Teaser'),(23,'Pub'),(24,'Club Reemus'),(25,'Eurodancefloor'),(26,'Flux'),(27,'Dance Pool'),(28,'UpDance'),(29,'Back To Mix 1h30'),(30,'Mix Sound '),(31,'Klub 90'),(32,'La Boite A Electro'),(33,'Dreamland'),(34,'Noel'),(35,'DanceFloor 2000'),(36,'Extended '),(37,'Megamix'),(38,'Maxximum'),(39,'Généramax'),(41,'Hyper Trance'),(42,'Mega Music Dance'),(43,'Groove 90'),(44,'Maximum Oldies'),(45,'Toutouyoufou'),(46,'Toutoune Mix'),(47,'Tous en boite'),(48,'Club Mix 90'),(49,'Cyber Trance'); /*!40000 ALTER TABLE `category` ENABLE KEYS */; UNLOCK TABLES; COMMIT; -- Dumped table `category` with 47 row(s) -- /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET AUTOCOMMIT=@OLD_AUTOCOMMIT */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on: Sat, 02 Jan 2021 01:56:28 +0100

Partant sur la piste de la connexion à la DB, j'ai rajouté une nouvelle connexion à la DB.
Plus de message d'erreur mais nombre de ligne = 0 .

Si je rajoute un sleep(1) après la reconnexion, le nombre de lignes sort bien.

Je ne comprends pas trop pourquoi devoir reconnecter et surtout mettre ce sleep :(

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par @rthur » 01 janv. 2021, 18:09

Euh bah le message d'erreur est un bon point de départ :
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given
Du coup, le 1er paramètre de mysqli_fetch_array() que tu as indiqué est un booléen au lieu d'un résultat, donc si tu fais un var_dump() de ce 1er paramètre tu verras que tu auras soit true, soit false.
Et c'est probablement false ce qui indique que tu as une erreur renvoyée par mysqli_query() probablement une erreur SQL (ou de connexion à ta bdd).

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 31 déc. 2020, 20:53

Pic Poc !

Bon, les 503 sont à nouveau là dès que je lance une synchro de table (depuis cette nuit), je reste convaincu que 0&0 bricolent et ont changé quelque chose, ils m'ont fait le même coup fin Mai sur un autre truc ... bien sûr, selon eux, rien n'a été changé, même quand on leur prouve par A+B que le problème vient de chez eux (et le pire c'est que le mec au téléphone avait pourtant reconnu que le script marchait ailleurs et pas chez ionos) ...

Dès qu'on écrit dans la table précédemment tronquée, paf , ca viande. même si on met un exit après la première requête d'écriture....

Je change de méthode, je fais un dump de la table puis j'importe le fichier dans la DB.

Code : Tout sélectionner

$path = './'; $tablename = 'songs'; system(sprintf("mysqldump --opt --no-tablespaces -h $dyndnsrdjtitou -u $dbuserrdj -p$dbpwrdj $dbaserdj $tablename > %s/$tablename.sql",$path)); $sqlSource = file_get_contents("$tablename.sql"); mysqli_multi_query($dbwrite,$sqlSource);
Tout ce qui est dbrdj c'est ce qui concerne la DB distante, et dbwrite, c’est la connexion à la DB du site.

Je perds l'indication de la progression (puisque plus de notion de boucle dans laquelle le script envoyait en format json, le pourcentage du nombre de lignes traitées, tous les 200 enregistrement), mais pas de 503 (enfin pour le moment...).

En revanche, je voudrais tout de même faire une vérification par comparaison du nombre de lignes de la table source et de la table cible une fois l'importation terminée.

Problème, je ne peux pas compter le nombre de lignes de la table après l'import.

Code : Tout sélectionner

$num_rows2 = "Non défini"; $query2 = "SELECT COUNT(*)AS nb_lignes FROM songs"; $results2=mysqli_query($dbwrite,$query2); while($row2=mysqli_fetch_array($results2)){ $num_rows2 = $row2['nb_lignes']; } echo "Après import : $num_rows2<br>";
Résultat (en activant le erro_reporting) :
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in /homepages/21/d8330841/htdocs/[...]/sync_songs.php on line 46
Après import : Non défini
Si je prend la requête query2 et que je l'exécute dans PhpMyAdmin, j'ai bien le nombre de lignes qui sort.

J’ai tenté en rajoutant un sleep de 5 secondes avant la requète (on sait jamais , des fois qu'il faille un peu de temps que le truc se remettre les idées en place après l’import), mais rien de mieux.

Un tite nidée ?

Merkouin et bon réveilloOn's !

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 29 déc. 2020, 23:59

Il y a entre 2 / 3 et 20 visiteurs tout au plus en temps normal sur le site (on aimerais plus lol), tout le site fonctionne, il y a que lorsque l'on déclenche cette "synchro" de tables MySQL que ça vautre.
Mais bizarrement, depuis mon appel, je n'ai pas réussi à refaire planter le site par une synchro.

Pour le fichier php.ini, j'ai effectivement cvu cette page, je l'ai rajoutée, masi comme j'ai pas encore eu de plantage, bah y a rien qui sort lol

Ceci étant, je suis aussi en train de voir pour changer de méthode :
Au lieu de lire d'un coté et écrire de l'autre "en même temps", je lis d'abord la table distante, je mets tout dans le array, et ensuite je lis le array pour l'envoyer dans la DB du site.

A suivre donc ...

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par @rthur » 29 déc. 2020, 20:53

Trop de processus PHP, c'est que ton offre est probablement sous-dimensionnée par rapport à ton nombre de visiteurs.

Pour les logs, même si le support a dit qu'il n'y en avait pas, il me semble que cette page concerne les mutualisés ionos :
https://www.ionos.fr/assistance/heberge ... rror-logs/
Comme on n'est jamais à l'abri d'une erreur du support, ça vaut peut être le coup d'essayer...

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 29 déc. 2020, 19:20

Pic Poc !

Malheureusement il n'y a pas de log php sur les mutualisés ionos :( Ils ont juste pu me dire qu'il y avait trop de processus php (comme déjà il y a pas mal de temps sur un autre script qui allait chercher un json sur un truc externe, dont l'accès ne pouvait plus se faire depuis ionos...).

En gros, pas vraiment de piste indicative et je vois pas comment optimiser mon script présent car c'est une bête lecture d'une table et écriture dans une autre).

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par @rthur » 29 déc. 2020, 17:35

Bah demande à ton hébergeur, tu le payes pour ça :)

#edit : ou fais une recherche Google... :roll: :D
https://www.google.com/search?q=log+php+ionos

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 29 déc. 2020, 14:32

Hello !

Le souci c'est que je trouve pas du tout où il pourrait y avoir des logs indiquant ca, le seul truc que je retrouve c’est un répertoire "logs" avec dedans les logs d'accès seulement . L'hébergement est sur du mutualisé ionos .

Re: Copier une table d'un serveur vers une table d'un autre serveur ?

par @rthur » 28 déc. 2020, 23:43

Erreur 503 => Tu as forcément un message d'erreur plus explicite dans les logs
Vérifie comment on accède aux logs sur ionos et regarde ce qu'il y a dedans, ça te mettra sur la voie

Copier une table d'un serveur vers une table d'un autre serveur ?

par Couin » 28 déc. 2020, 22:58

Hello,

Je souhaiterais optimiser ma façon de faire la copie d'une table d'un serveur (SQL de RadioDJ) vers la table d'un autre serveur (hébergement site).

Aujourd'hui et depuis déjà un moment, il y la méthode automatique qui se déclenche tous les jours à 17H00 et la méthode manuelle que l'on déclenche depuis le panneau d'admin du site.
La version manuelle est au format json car elle renvoie au navigateur, le pourcentage de lignes recopiés afin de voir l'évolution due une barre de progression.

La version automatique est plsu simple puisque se passe en tache de fond.

Voici une partie du code :

Code : Tout sélectionner

$queryx = "TRUNCATE TABLE category"; $resultx = mysqli_query($dbwrite,$queryx); $r = 0; $values = array(); $query = "SELECT * FROM category ORDER BY ID ASC"; $results=mysqli_query($dbrdj,$query); while($row=mysqli_fetch_array($results)){ $r++; $ID = $row['ID']; $name = addslashes($row['name']); $values[] = "('$ID', '$name')"; if ($r == 200 ) { $sql = 'INSERT INTO category (ID, name) VALUES '.implode(',', $values); $sql = mysqli_query($dbwrite, $sql); $values = array(); $r = 0; } } if ($r > 0 ) { $sql = 'INSERT INTO category (ID, name) VALUES '.implode(',', $values); $sql = mysqli_query($dbwrite, $sql); $values = array(); $r = 0; } // $now = date("Y-m-d H:i:s"); $sql = "UPDATE config SET valeur = '$now' WHERE critere = 'last_sync_cat'"; $requete = mysqli_query( $dbwrite, $sql );
En gros, je lit la table du serveur RadioDJ, je remplis un array et arrivé à 200 lignes, j'écris dans la table du site (que j'ai tronqué), et je continue avec les 200 lignes suivantes , jusqu'à la fin de la table source.
Et à la fin , j'écris ce qui reste dans le array (car c’est pas forcément un multiple de 200 lignes).

Depuis quelques jours, ca met le site en erreur 503, je ne sais pas pourquoi, d'autant plus que rien a changé.
Je souhaiterais savoir si il y a plus efficace et plus propre pour faire la même chose (et espérer que les 503 retournent en cuisine), car même pas la peine que j'appelle l'hébergeur (ionos) qui dira forcément que c'est pas eux.

Merci pour les tuyals :D
Couin