Zwykle używam ręcznego wyszukiwania do zamiany tekstu w bazie danych MySQL przy użyciu phpmyadmin. Mam tego dość, jak mogę uruchomić zapytanie w celu znalezienia i zastąpienia tekstu nowym tekstem w całej tabeli w phpmyadmin?
Przykład: znajdź słowo kluczowe domain.com
, zamień na www.domain.com
.
mysql
phpmyadmin
alyasabrina
źródło
źródło
Odpowiedzi:
Do
single table
aktualizacjiOd
multiple tables
-Jeśli chcesz edytować ze wszystkich tabel, najlepszym sposobem jest pobranie,
dump
a następniefind/replace
przesłanie go z powrotem.źródło
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Użyj sed na zrzucie, aby znaleźć / zamienić:sed "s:unwanted_text:wanted_text:g" dump.sql
Najprostszym sposobem, jaki znalazłem, jest zrzucenie bazy danych do pliku tekstowego, uruchomienie komendy sed w celu wykonania zamiany i ponowne załadowanie bazy danych z powrotem do MySQL.
Wszystkie poniższe polecenia są bash na Linuksie.
Zrzuć bazę danych do pliku tekstowego
Uruchom komendę sed, aby znaleźć / zamienić ciąg docelowy
Załaduj ponownie bazę danych do MySQL
Bułka z masłem.
źródło
\/\/domain.com
sed -i
polecenie może wyrzucićunterminated substitute pattern
błąd. Zamiast tego możesz użyćsed -i '' -e 's/oldString/newString/g' ./db.sql
.Umieść to w pliku php i uruchom go, a powinien zrobić to, co chcesz.
źródło
Uruchomienie zapytania SQL w PHPmyadmin w celu znalezienia i zastąpienia tekstu we wszystkich postach na blogach wordpress, takich jak znalezienie mysite.com/wordpress i zastąpienie go mysite.com/news Tabela w tym przykładzie to tj_posts
źródło
wp_posts
tak, jak wygląda zapytanieUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Inną opcją jest wygenerowanie instrukcji dla każdej kolumny w bazie danych:
Powinno to wygenerować listę instrukcji aktualizacji, które można następnie wykonać.
źródło
Na przykład, jeśli chcę zastąpić wszystkie wystąpienia Johna znakiem Marka, użyję poniżej,
źródło
phpMyAdmin zawiera zgrabne narzędzie do znajdowania i zastępowania.
Wybierz tabelę, a następnie kliknij Szukaj > Znajdź i zamień
To zapytanie trwało około minuty i z powodzeniem zastąpić kilka tysięcy przypadków
oldurl.ext
znewurl.ext
wewnątrz kolumnypost_content
Najlepsza rzecz w tej metodzie: przed zatwierdzeniem musisz sprawdzić każdy mecz.
NB Używam phpMyAdmin 4.9.0.1
źródło
Uważam, że odpowiedź „swapnesh” jest najlepsza! Niestety nie mogłem go wykonać w phpMyAdmin (4.5.0.2), który chociaż nielogiczny (i próbował kilku rzeczy) ciągle powtarzał, że znaleziono nową instrukcję i że nie znaleziono separatora…
Tak więc znalazłem następujące rozwiązanie, które może być przydatne, jeśli doświadczasz tego samego problemu i nie masz innego dostępu do bazy danych niż PMA…
Aby przetestować oczekiwany wynik, możesz użyć:
źródło
Jeśli masz pewność, że żadne z pól, które mają zostać zaktualizowane, nie są serializowane, powyższe rozwiązania będą działać dobrze.
Jeśli jednak którekolwiek z pól wymagających aktualizacji zawiera dane zserializowane, zapytanie SQL lub proste wyszukiwanie / zamiana w pliku zrzutu spowoduje przerwanie serializacji (chyba że zastąpiony ciąg ma dokładnie taką samą liczbę znaków jak szukany ciąg).
Dla pewności pole „zserializowane” wygląda następująco:
Liczba znaków w odpowiednich danych jest kodowana jako część danych.
Serializacja to sposób na konwersję „obiektów” na format łatwo przechowywany w bazie danych lub na łatwy transport danych obiektów między różnymi językami.
Oto wyjaśnienie różnych metod serializacji danych obiektowych i dlaczego warto to zrobić, a oto post skoncentrowany na WordPress: Dane szeregowe, co to znaczy i dlaczego jest tak ważny? prostym językiem.
Byłoby niesamowite, gdyby MySQL miał wbudowane narzędzie do automatycznej obsługi danych serializowanych, ale tak nie jest, a ponieważ istnieją różne formaty serializacji, nie miałoby to nawet sensu.
wp-cli
Niektóre z powyższych odpowiedzi wydawały się specyficzne dla baz danych WordPress, które serializują większość jego danych. WordPress oferuje narzędzie linii poleceń, WP szukać zamień , że ma uchwyt serializacji.
Podstawowym poleceniem byłoby:
WordPress podkreśla jednak, że
guid
nigdy nie należy go zmieniać , dlatego zaleca pominięcie tej kolumny.Sugeruje również, że często będziesz chciał pominąć
wp_users
stół.Oto jak by to wyglądało:
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
Uwaga: dodałem
--dry-run
flagę, aby kopiowanie-wklejanie nie zniszczyło automatycznie bazy danych nikogo. Po upewnieniu się, że skrypt robi to, co chcesz, uruchom go ponownie bez tej flagi.Wtyczki
Jeśli korzystasz z WordPress, istnieje również wiele bezpłatnych i komercyjnych wtyczek, które oferują interfejs GUI, aby zrobić to samo, wyposażone w wiele dodatkowych funkcji.
Interconnect / it skrypt php
Interconnect / oferuje skrypt php do obsługi danych zserializowanych: narzędzie Bezpieczne wyszukiwanie i zamiana . Został stworzony do użytku na stronach WordPress, ale wygląda na to, że można go użyć w dowolnej bazie danych zserializowanej przez PHP.
Wiele firm, w tym sam WordPress, poleca to narzędzie. Instrukcje tutaj, około 3/4 w dół strony.
źródło
najlepiej wyeksportuj go jako plik sql i otwórz go za pomocą edytora, takiego jak kod Visual Studio, i znajdź i odmień swoje słowa. Zamieniam w 1 gig pliku sql w 1 minutę na 16 słów, które łącznie to 14600 słów. to najlepszy sposób. a po wymianie zapisz i zaimportuj ponownie. nie zapomnij skompresować go za pomocą zip do importu.
źródło
Generuj zmiany zapytań SQL (FAST)
mysql -e "SELECT CONCAT ('aktualizacja', nazwa_tabeli, 'set', nazwa_kolumny, '= replace (', nazwa_kolumny, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') Instrukcja AS z schematu_informacyjnego.kolumny GDZIE nazwa_tabeli PODOBNE' wp_% '"-u root -p nazwa_bazy_db_there> upgrade_script.sql
Usuń wszelkie śmieci na początku pliku. Miałem trochę.
nano upgrade_script.sql
Uruchom wygenerowany skrypt z opcjami --force, aby pominąć błędy. (WOLNO - weź kawę, jeśli duży DB)
mysql -u root -p twoja_nazwa_db_tutaj --force <upgrade_script.sql
źródło
W przypadku zdań z dużymi i małymi literami, możemy użyć PRZESUNIĘCIA BINARNEGO
źródło