web-dev-qa-db-fra.com

Comment remplacer le nom de domaine dans une base de données Wordpress?

J'ai une base de données Wordpress qui a été installée dans un environnement de développement ... ainsi, toutes les références au site lui-même ont une adresse IP fixe (disons 192.168.16.2). Maintenant, je dois migrer cette base de données vers une nouvelle installation Wordpress sur un hébergement. Le problème est que le vidage SQL contient beaucoup de références à l'adresse IP et je dois le remplacer par: my_domain.com.

Je pourrais utiliser sed ou une autre commande pour modifier le à partir de la ligne de commande, le problème est qu’il existe de nombreuses données de configuration qui utilisent JSON. Et alors? Comme vous le savez, les tableaux JSON utilisent des éléments tels que: s:4: pour savoir le nombre de caractères d’un élément et donc, si je ne remplace que l’IP, le nom de domaine, les fichiers de configuration seront corrompus.

Il y a quelques années, j'ai utilisé une application pour Windows qui permet de modifier les valeurs d'une base de données et de gérer les tableaux JSON. Malheureusement, j'ai oublié le nom de l'application ... La question est donc: connaissez-vous une application qui me permette de faire ce que je veux?

11
Cristian

Les données que vous consultez ne sont pas au format JSON. JSON ne stocke pas (normalement) les types de valeur et les longueurs comme ça. Ce que vous regardez, ce sont des données sérialisées. Une recherche Google pour "mysql replace serialized" donne cette page, ce qui pourrait aider: http://davidcoveney.com/mysql-database-search-reearch-re-serialized-php/

7
MathSmath

Codex a guide décent - Changer l'URL du site .

En gros, il y a plusieurs endroits où l'URL a son importance ou pas (il en manque peut-être):

  • Les options home et siteurl qui contrôlent où WP pense que le site est;
  • après l’affichage des GUID, ils ressemblent à des liens mais ne sont en réalité pas que des identificateurs. Je ne suis pas absolument sûr qu'elles ne soient pas pertinentes, mais j'avais souvent modifié les URL sur la pile de tests et je n'avais jamais pris la peine de les mettre à jour.
  • liens dans les corps de poste;
  • éventuellement des liens dans les paramètres du plugin.
8
Rarst

Comme Rarst l'a dit plus haut, il n'y a que deux paramètres dans la base de données qui doivent être modifiés. Après avoir importé la base de données, je me connecte à PHPMyAdmin et édite directement la base de données.

J'utilise tout le temps un serveur de développement sur mon PC pour importer des flux de données. L'URL associée aux messages est similaire à http: // localhost/testsite/post-name/ et cela n'a jamais posé de problème.

J'avais l'habitude d'utiliser une recherche SQL et de remplacer jusqu'à ce que je réalise que cela n'avait pas d'importance. J'ai migré quelques sites d'un domaine à un autre et pour lequel le contenu contient des URL absolues, j'utilise l'option de recherche et de remplacement SQL.

update wp_posts set post_content = replace(post_content,'http://www.olddomain/','http://www.newdomain/');

David

6
David Law

C’est une ressource incroyable que je signet que je reviens encore et encore http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you -knew-previous/

Ils déclarent

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';
5
Tom

Vous pouvez définir ces valeurs avec des constantes dans le wp-config.php. Ensuite, vous pouvez, quand vous le souhaitez, modifier les entrées de la base de données via le plugin Adminer. Écrivez ceci dans le wp-config.php et les valeurs de la base de données ne sont pas pertinentes:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
3
bueltge

Assurez-vous que la nouvelle base de données est sélectionnée, puis exécutez des mises à jour SQL et des commandes de remplacement sur les tables, notamment wp_options, wp_posts, wp_postmeta.

Utilisez le code ci-dessous et remplacez vos anciennes et nouvelles URL par des barres obliques. Également, si nécessaire, modifiez les valeurs de préfixe de la table le cas échéant (c.-à-d. Wp_)

UPDATE wp_options SET option_value = replace(option_value, 'http_www.oldurl', 'http_www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';    
UPDATE wp_posts SET guid = replace(guid, 'http_www.oldurl','http_www.newurl');    
UPDATE wp_posts SET post_content = replace(post_content, 'http_www.oldurl', 'http_www.newurl');    
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http_www.oldurl','http_www.newurl');
2
user129645

Regardez ma réponse à cette question:

Il résout vos problèmes de nettoyage des données et peut également être personnalisé pour des besoins de migration de données spécifiques à l'aide de points d'ancrage.

J'espère que ça aide.

2
MikeSchinkel

Requêtes SQL simples - pas de trucs REPLACE compliqués nécessaires:

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'siteurl';

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'home';

Utilisez ceux avec PHPMyAdmin ou de toute autre manière que vous préférez pour accéder à la base de données.

2
Mark

C'est une très vieille question, mais puisque je l'ai trouvée en cherchant autre chose, j'ai pensé l'ajouter pour référence future.

Je pense que le moyen le plus simple et le plus complet d'y parvenir est d'utiliser searchreplacedb2.php. Vous pouvez le trouver ici: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ avec une explication de son utilisation.

Cela m'a certainement fait gagner beaucoup de temps avec la migration d'environnements vivants sur mes sites WordPress.

Assurez-vous simplement de le supprimer d'un serveur public une fois que vous avez terminé!

1
MatthewLee