Μετάβαση στο περιεχόμενο
Εργαλεία

SQL αναζήτησης & αντικατάστασης

Αλλάξτε το URL του ιστότοπού σας χωρίς να αλλοιώσετε τα σειριοποιημένα δεδομένα

Τρέχει στον browser σου. Τίποτα δεν ανεβαίνει.

Η αλλαγή

Διαβάστε το πριν εκτελέσετε οτιδήποτε

Το WordPress αποθηκεύει πολλές επιλογές ως PHP-serialized συμβολοσειρές, και μια σειριοποιημένη συμβολοσειρά καταγράφει το δικό της μήκος σε bytes — s:19:"http://old-site.com". Μια απλή αντικατάσταση SQL αλλάζει το κείμενο αλλά όχι το μήκος, οπότε η PHP δεν μπορεί πλέον να αποσειριοποιήσει τη γραμμή. Δεν βγάζει σφάλμα. Η τιμή απλώς σιωπηλά γίνεται κενή.

Τι χάνετε: τις ρυθμίσεις των widget, τις τροποποιήσεις του θέματος και τις περισσότερες ρυθμίσεις των πρόσθετων. Συνήθως δεν το αντιλαμβάνεστε παρά μόνο μέρες αργότερα, και ως τότε έχει χαθεί και το αντίγραφο ασφαλείας που θα επαναφέρατε.

Γι' αυτό τα παρακάτω ερωτήματα σκόπιμα δεν αγγίζουν τον πίνακα wp_options.

Τι μετακινείτε;
search-replace.sql

Κρατήστε πρώτα αντίγραφο ασφαλείας της βάσης δεδομένων. Όχι «σκεφτείτε να κρατήσετε» — κρατήστε. Δεν υπάρχει αναίρεση για ένα UPDATE.

Σχετικά με το SQL αναζήτησης & αντικατάστασης

Μια αφελής SQL αναζήτηση-και-αντικατάσταση σε μια βάση δεδομένων WordPress σπάει κάθε σειριοποιημένη επιλογή που αγγίζει, επειδή το αποθηκευμένο μήκος της συμβολοσειράς δεν ταιριάζει πια. Αυτό δημιουργεί τα ερωτήματα που είναι ασφαλή και εξηγεί ακριβώς ποια δεν είναι.

Συχνές ερωτήσεις

Ερωτήσεις

Μπορώ να αλλάξω το URL του site μου στο WordPress με ένα SQL find and replace;

Όχι με ασφάλεια, και αυτή είναι η πιο πολυδιαδεδομένη κακή συμβουλή στο WordPress. Πολλές επιλογές αποθηκεύονται ως PHP-serialized strings που καταγράφουν το δικό τους μήκος σε bytes. Ένα απλό SQL replace αλλάζει το κείμενο αλλά όχι το μήκος, οπότε η PHP αποτυγχάνει σιωπηλά να κάνει unserialize τη γραμμή και η τιμή απλώς εξαφανίζεται — παρασύροντας μαζί της ρυθμίσεις widget, theme mods και config προσθέτων.

Τι πρέπει να χρησιμοποιήσω αντ' αυτού;

WP-CLI: πρώτα 'wp search-replace old new --all-tables --dry-run', μετά χωρίς το --dry-run. Καταλαβαίνει το serialization και ξαναγράφει σωστά τα prefixes μήκους. Αν δεν έχεις πρόσβαση σε CLI, το πρόσθετο Better Search Replace κάνει το ίδιο πράγμα από τη διαχείριση.

Να ενημερώσω τη στήλη GUID;

Όχι. Το GUID είναι ένα μόνιμο μοναδικό αναγνωριστικό για ένα άρθρο, όχι σύνδεσμος, και οι feed readers βασίζονται σε αυτό. Το να το ξαναγράψεις κάνει κάθε συνδρομητή να δει κάθε παλιό άρθρο σαν ολοκαίνουργιο. Η τεκμηρίωση του WordPress λέει ρητά να μην το αλλάζεις.