Witam, moj opiekun (domena, server, obsluga itp.) wyemigrowal na zachod i przegapilem oplate domeny, ktora przepadla. Teraz zakupilem nowa i musze zmienic dane w bazie danych z DOMENA1.pl na DOMENA2.pl we wszystkich miejscach gdzie taki zapis wytepuje.
Stad pytanie jak powinna wygladac komenda, ktora to zmienia (jest to najprostsza baza msql ~200MB)?
Wyeksportuj zrzut, zmień edytorem, zaimportuj zrzut.
Jak masz dostęp do PHPMYADMIN to jest tam opcja SZUKAJ PO WSZYSTKICH TABELACH.
Prawdopodobnie stara nazwa domeny jest tylko w konkretnych tabelach i kolumnach więc wtedy można wykorzystać zapytanie SQL:
UPDATE `tabelaZkolumnaDOzamiany` SET `kolumnaZblednaDomena` = REPLACE(`kolumnaZblednaDomena` , 'domena1.pl', 'domena2.pl');
Dziekuje za zainteresowanie - mam dostep do phpmyadmin! Chcialbym przeleciec przez wszystkie tabele w bazie (cala baza - dla pewnosci). Jest na to jakas komenda? Rozumiem, ze ze wzgledu ze bedzie to dlugo trwac musze zmienic ustawienia mysqla aby pozwalal dluzej mielic baze itp. tak?
Tyle możliwości a to tylko 1-szy wynik z googla https://stackoverflow.com/questions/11839060/find-and-replace-text-in-the-entire-table-using-a-mysql-query
Chce z autoamtu przejechac po wszystkich tabelach/kolumnach a nie recznie to wpisywac.
Wyciagnalem baze jako txt jak radzono (@trueblue - klik na EXPORT i wybralem select 'Texy! text' jako format) i przejechalem automatem, ale jak to teraz wgrac? Nie moge jej wrzucic (wgrac) z powrotem.
EDIT:
Przy eksporcie jako sql i podmianie nazwy XXX na YYY za pomoca tekstowego edytora wystepuja bledy...
Nie za bardzo wiem czemu - wydaje mi sie ze relacja pomiedzy tabelami/kolumnami jest zachowana - w koncu zmieniam tylko nazwe i ta nazwe zmieniam wszedzie, wiec korelacja powinna byc zachowana...
Ktos ma jakies pomysly? Sa jakies komendy mysql co mi przeleca automatycznie po wszystkich tabelach i zamienia nazwe? Moze zamiana przez mysql zamiast przez edytor tekstowy w czyms pomoze (chodz wydaje sie to nielogiczne ale nie znam sie na bazach danych).
Najpierw eksportuje stara baze, nastepnie zmaieniam nazwy przez edytor tekstowy (replace XXX to YYY) i nastepnie wgrywam baze. Ale to nie dziala - najprawdopodobniej wystepuje gdzies jakas korelacja - w sensie AAA jest kojarzone z XXX i po zmaianie XXX na YYY wystepuje problem - chodz na chlopski rozumn nie powinien.
Zadnych bledow przy eksporcie i imporcie. Bledy pojawiaja sie jak odpalam strone (wyczyscielem wszystkie tabele, ktore mozna bylo wyczyscic - np cache).
Przykladowy blad - "Notice: unserialize(): Error at offset 2080 of 3676 bytes in views_db_object->load_row() (line 2307 of..."
Pomyslalem, ze jak zrobie to przez komendy sql - to moze one sa dokladniejsze albo wprowadzaja jakies dodatkowe modyfikacje i baza zadziala. A w tym linku co podal @Pyton_000 - "If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back." no wiec tak zrobilem. Jest jakas komenda co zmienia WSZYSTKIE tabele w bazie mysql poprzez phpmyadmin?
Nie chcialbym wklepywac komend dla wszystkich tabel (wklepywac ich nazw, wyszukiwac po kilka rekordow w kazdej tabeli). Znacie na to jakis sposob?
EDIT:
Z ciekawosci przeszukalem baze przez phpmyadmin na fraze XXX i znalazl tego duzo. Jednak gdy chce edytowac zawartosc pol, to nie ma tam w polach mozliwosci edycji nazwy XXX (XXX tam nie wystepuje) - moze fraza XXX jest w jakis sposob zakodowana w innej nazwie/postaci i dlatego edytor tego nie zamienil na YYY.
Czyli jezeli XXX w bazie w czesci pol jest zakodowany jako a1a1a1 to edycja poprzez edytor nic nie poradzi, bo trzeba za pomoca tego klucza przekonwertowac YYY na odpowiednik b2b2b2 i wtedy zamienic a1a1a1 na b2b2b2. Ale moze zamiana przez phpmyadmin od razu zrobi to automatycznie - tylko jak zamienic zadana fraze od razu w wszystkich tabelach i kolumnach w danej bazie?
Inne rozwiazanie mi nie dzialaja (php 7.3.4).
s:dlugosc stringa:\"nazwa stringa" (oryginal) w bazie nie wystepuje. Wiec nie moge tego zamienic na odpowiednia dlugosc nowego stringa - juz probowalem.
blad
"Notice: unserialize(): Error at offset 2080 of 3676 bytes in views_db_object->load_row() (line 2307 of..."
z tego co widze w bazie kieruje do
('views_db_object', 'class', 'sites/all/modules/views/includes/view.inc', 'views', 10),
czyli
INSERT INTO `registry` (`name`, `type`, `filename`, `module`, `weight`) VALUES
jak podgladam tabele 'registry' to jak mam tam ten offset wyciagnac? - offset 2080 of 3676 bytes
EDIT: dokopalem sie tylko do kodu modulu:
/** * Load the object with a row from the database. * * This method is separate from the constructor in order to give us more * flexibility in terms of how the view object is built in different contexts. * * @param object $data * An object from db_fetch_object. It should contain all of the fields * that are in the schema. */ public function load_row($data) { $schema = drupal_get_schema($this->db_table); // Go through our schema and build correlations. foreach ($schema['fields'] as $field => $info) { $this->$field = http://www.php.net/empty($info['serialize']) ? $data->$field : http://www.php.net/unserialize($data->$field); } }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)