Bagaimana cara mengganti nama domain dalam database Wordpress?

12

Saya memiliki database Wordpress yang diinstal di lingkungan pengembangan ... dengan demikian, semua referensi ke situs itu sendiri memiliki alamat IP tetap (katakanlah 192.168.16.2). Sekarang, saya harus memigrasi database itu ke instalasi Wordpress baru di hosting. Masalahnya adalah bahwa dump SQL berisi banyak referensi ke alamat IP, dan saya harus menggantinya dengan: my_domain.com.

Saya bisa menggunakan sedatau perintah lain untuk mengubah itu dari baris perintah, masalahnya adalah bahwa ada banyak data konfigurasi yang menggunakan JSON. Terus? Seperti yang Anda ketahui, array JSON menggunakan hal-hal seperti: s:4:untuk mengetahui berapa banyak karakter yang dimiliki elemen, dan dengan demikian, jika saya mengganti IP dengan nama domain, file konfigurasi akan rusak.

Saya menggunakan aplikasi untuk Windows beberapa tahun yang lalu yang memungkinkan untuk mengubah nilai dalam database dan menangani array JSON. Sayangnya, saya lupa nama aplikasi ... jadi pertanyaannya adalah: apakah Anda tahu aplikasi apa pun yang memungkinkan saya melakukan apa yang saya inginkan?

Cristian
sumber
1
Ini bukan jawaban yang lengkap, tetapi mungkin membantu Anda dalam mencari satu: data yang Anda lihat tidak diformat JSON. JSON tidak (biasanya) menyimpan tipe nilai dan panjang seperti itu. Apa yang Anda lihat adalah data SERIALISASI. Pencarian google untuk "mysql replace serialized" menghasilkan halaman ini, yang mungkin membantu: davidcoveney.com/…
MathSmath
Hai, komentar Anda adalah satu-satunya jawaban yang berguna bagi saya ... pindahkan ke jawaban untuk menandainya sebagai benar. Terima kasih!
Cristian
Senang itu membantu! Saya telah mempostingnya sebagai jawaban.
MathSmath

Jawaban:

7

Data yang Anda lihat tidak diformat JSON. JSON tidak (biasanya) menyimpan tipe nilai dan panjang seperti itu. Apa yang Anda lihat adalah data SERIALISASI. Pencarian google untuk "mysql replace serialized" menghasilkan halaman ini, yang mungkin membantu: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath
sumber
Terima kasih ... Saya bekerja sebagai pengembang PHP selama 2 tahun. Saya tidak percaya saya lupa perbedaan antara sesuatu yang serial dan string JSON.
Cristian
8

Codex memiliki panduan yang layak - Mengubah URL Situs .

Pada dasarnya ada beberapa tempat URL ada masalah atau tidak begitu banyak (saya mungkin kehilangan beberapa):

  • homedan siteurlopsi yang mengontrol di mana WP menganggap situs itu;
  • memposting GUID, ini terlihat seperti tautan tetapi sebenarnya bukan - hanya pengidentifikasi. Saya tidak benar-benar yakin itu tidak relevan, tapi saya punya banyak perubahan URL pada test stack dan tidak pernah repot untuk memperbaruinya.
  • tautan di badan pos;
  • mungkin tautan dalam pengaturan plugin.
Jarang
sumber
Ada beberapa langkah. Setelah Anda mv olddir.com newdir.commengkonfigurasi ulang server web Anda, restart server web tersebut. Ikuti instruksi kodeks di sini dan kemudian Anda dapat masuk sebagai admin. Itu seharusnya membantu Anda :-)
PJ Brunet
6

Seperti yang dikatakan Rarst di atas, hanya ada dua pengaturan dalam database yang PERLU berubah. Setelah mengimpor database saya masuk ke PHPMyAdmin dan mengedit database langsung.

Saya menggunakan server pengembangan pada PC saya sepanjang waktu untuk mengimpor datafeed dan mereka memiliki URL yang dilampirkan pada Tulisan di sepanjang baris http: // localhost / testsite / post-name / dan itu tidak pernah menyebabkan masalah.

Saya biasa menggunakan pencarian SQL dan ganti sampai saya menyadari itu tidak masalah. Saya telah memigrasi beberapa situs dari satu domain ke domain lain dan tempat saya memiliki URL absolut dalam konten, saya akan menggunakan opsi pencarian dan ganti SQL.

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

David

David Law
sumber
Ada beberapa plugin, seperti ContactForm7, yang juga menyimpan nama domain di dalam string serial, di antara variabel-variabel konfigurasi lainnya. Saat Anda memodifikasi string berseri, ia bisa rusak jika panjangnya berubah, jadi pada kenyataannya, kadang-kadang, ada lebih banyak hal untuk diubah daripada hanya dua pengaturan.
Cristian
3

Anda dapat mengatur nilai-nilai ini dengan konstanta di wp-config.php. Setelah ini, Anda bisa, ketika mau, mengubah entri dalam database melalui plugin Adminer. Tulis ini di wp-config.phpdan nilai-nilai dalam DB tidak relevan:

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

Pertanyaan SQL sederhana - tidak perlu REPLACE yang rumit:

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';

Gunakan yang dengan PHPMyAdmin atau cara lain yang Anda inginkan untuk mengakses database.

Menandai
sumber
2

Pastikan Anda memiliki database baru yang dipilih, kemudian jalankan beberapa pembaruan sql dan perintah penggantian pada tabel terutama, wp_options, wp_posts, wp_postmeta.

Gunakan kode seperti di bawah ini dan tukar di URL lama dan baru Anda, tanpa garis miring. Juga jika perlu ubah nilai awalan tabel yang berlaku (mis. 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');
pengguna129645
sumber
1

Ini adalah pertanyaan yang sangat lama, tetapi karena saya menemukan itu sambil mencari sesuatu yang lain, saya pikir saya akan menambahkan ini untuk referensi di masa mendatang.

Saya pikir cara paling sederhana dan paling lengkap untuk melakukan ini adalah menggunakan searchreplacedb2.php. Itu dapat ditemukan di sini: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ bersama dengan penjelasan penggunaannya.

Ini jelas telah menyelamatkan saya banyak waktu dengan bermigrasi dari dev ke lingkungan langsung di situs wordpress saya.

Pastikan Anda menghapusnya dari server publik setelah Anda selesai!

MatthewLee
sumber
0

Saya melihat Anda ingin memindahkan situs WordPress Anda dari lingkungan pengembangan ke server baru atau server produksi.

Baru-baru ini, saya telah memindahkan situs saya ke server produksi dan saya menghadapi situasi yang sama. Saya perlu memperbarui URL situs karena WordPress menyimpan URL situs dalam Database.

Saya menemukan permintaan MySQL yang baik menggunakan itu saya dapat dengan mudah mengubah URL langsung dari Database seperti.

SET @search := "http://olddomain.com";
SET @replace := "http://newdomain.com";

UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "siteurl";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "home";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "product_list_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "shopping_cart_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "checkout_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "widget_text";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerImageLogo";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "cunjo_plugin_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "wpsr_socialbt_data";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "issuem";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "_transient_dgxdonate_t70pbg1htu_1396322372";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "dgx_donate_log";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerBackgroundImage";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "transact_url";
UPDATE `wp_postmeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_usermeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_posts` SET `guid`=REPLACE(guid, @search, @replace);
UPDATE `wp_posts` SET `post_content`=REPLACE(post_content, @search, @replace);

Anda hanya perlu mengganti URL situs Anda dari nama domain lama ke domain baru kemudian jalankan query pada MySQL menggunakan PHPMYADMIN.

Untuk referensi lebih lanjut, Anda dapat membaca Tutorial ini .

https://tryvary.com/wordpress-change-url-in-database-using-mysql-query/

Renish Khunt
sumber