Istnieje wiele narzędzi, dzięki którym możesz wykonać automatyczne czyszczenie bazy danych z śmieci, jednak ich użycie powoduje wywołanie funkcji DELETE wpisów w tabelach bazy danych, a nie TRUNCATE, czyli wyczyszczenia wraz z indeksami. W przypadku polecenia usunięcia, indeksy są kontynuowane dalej, a w przypadku czyszczenia usuwane. A to jest bardzo ważne. Gdy przenosisz sklep, bez usuwania produktów, należy wykonać polecenie SQL w phpMyAdmin Twojej zaimportowanej bazy danych - odchudzisz ją zwyczajnie o ponad połowę. Ważna informacja, po wykonaniu poniższych poleceń, należy zalogować się do panelu admina PrestaShop i odbudować indeksy wyszukiwania w Preferencja -> Szukaj -> Indeksowanie - przebuduj cały indeks wyszukiwania.
-- Wyłączenie sprawdzania kluczy obcych na czas operacji
SET FOREIGN_KEY_CHECKS = 0;
-- Czyszczenie logów i statystyk połączeń
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_connections_page;
TRUNCATE TABLE ps_connections_source;
TRUNCATE TABLE ps_guest;
TRUNCATE TABLE ps_log;
-- Dodatkowo warto wyczyścić statystyki wyszukiwań i porzucone koszyki (opcjonalnie)
TRUNCATE TABLE ps_statssearch;
TRUNCATE TABLE ps_pagenotfound;
-- Czyszczenie tabeli z "poradami"
TRUNCATE TABLE ps_advice;
TRUNCATE TABLE ps_advice_lang;
-- Czyszczenie tabeli z "wyszukiwaniami"
TRUNCATE TABLE ps_search_index;
TRUNCATE TABLE ps_search_word;
-- Przywrócenie sprawdzania kluczy
SET FOREIGN_KEY_CHECKS = 1;
Jeśli chcesz również opróżnić bazę danych z kategorii i produktów, wystarczy użyć polecenia jak poniżej:
SET FOREIGN_KEY_CHECKS = 0;
-- Produkty i kategorie
TRUNCATE TABLE ps_product;
TRUNCATE TABLE ps_product_shop;
TRUNCATE TABLE ps_product_lang;
TRUNCATE TABLE ps_category;
TRUNCATE TABLE ps_category_lang;
TRUNCATE TABLE ps_category_product;
-- Cechy i atrybuty (jeśli ich też nie potrzebujesz)
TRUNCATE TABLE ps_attribute;
TRUNCATE TABLE ps_attribute_lang;
TRUNCATE TABLE ps_feature;
TRUNCATE TABLE ps_feature_lang;
-- WYSZUKIWARKA (to o co pytałeś)
TRUNCATE TABLE ps_search_index;
TRUNCATE TABLE ps_search_word;
-- Pozostałe dane związane z produktami (usuń jeśli czegoś nie potrzebujesz lub nie używasz)
TRUNCATE `ps_accessory`;
TRUNCATE `ps_cart`;
TRUNCATE `ps_cart_product`;
TRUNCATE `ps_customer`;
TRUNCATE `ps_customer_group`;
TRUNCATE `ps_customer_message`;
TRUNCATE `ps_customer_session`;
TRUNCATE `ps_customer_thread`;
TRUNCATE `ps_ets_rv_email_queue`;
TRUNCATE `ps_ets_seo_category`;
TRUNCATE `ps_ets_seo_product`;
TRUNCATE `ps_feature_product`;
TRUNCATE `ps_feature_value`;
TRUNCATE `ps_feature_value_lang`;
TRUNCATE `ps_ganalytics`;
TRUNCATE `ps_ganalytics_data`;
TRUNCATE `ps_gm_omniprice_history`;
TRUNCATE `ps_gm_omniprice_index`;
TRUNCATE `ps_image`;
TRUNCATE `ps_image_lang`;
TRUNCATE `ps_image_shop`;
TRUNCATE `ps_layered_filter_block`;
TRUNCATE `ps_layered_price_index`;
TRUNCATE `ps_orders`;
TRUNCATE `ps_order_carrier`;
TRUNCATE `ps_order_detail`;
TRUNCATE `ps_order_detail_tax`;
TRUNCATE `ps_order_history`;
TRUNCATE `ps_order_payment`;
TRUNCATE `ps_paypal_order`;
TRUNCATE `ps_paypal_processlogger`;
TRUNCATE `ps_product_attachment`;
TRUNCATE `ps_product_attribute`;
TRUNCATE `ps_product_attribute_combination`;
TRUNCATE `ps_product_attribute_image`;
TRUNCATE `ps_product_attribute_lang`;
TRUNCATE `ps_product_attribute_shop`;
TRUNCATE `ps_product_carrier`;
TRUNCATE `ps_product_comment`;
TRUNCATE `ps_product_lang`;
TRUNCATE `ps_product_sale`;
TRUNCATE `ps_product_shop`;
TRUNCATE `ps_product_supplier`;
TRUNCATE `ps_product_tag`;
TRUNCATE `ps_pscheckout_authorization`;
TRUNCATE `ps_pscheckout_capture`;
TRUNCATE `ps_pscheckout_cart`;
TRUNCATE `ps_pscheckout_customer`;
TRUNCATE `ps_pscheckout_funding_source`;
TRUNCATE `ps_pscheckout_order`;
TRUNCATE `ps_pscheckout_order_matrice`;
TRUNCATE `ps_pscheckout_payment_token`;
TRUNCATE `ps_pscheckout_purchase_unit`;
TRUNCATE `ps_pscheckout_refund`;
TRUNCATE `ps_psgdpr_log`;
TRUNCATE `ps_stripe_customer`;
TRUNCATE `ps_stripe_idempotency_key`;
TRUNCATE `ps_stripe_payment`;
TRUNCATE `ps_stripe_payment_intent`;
SET FOREIGN_KEY_CHECKS = 1;
Oczywiście usunięcie produktów z bazy danych, nie usunie fizycznie zdjęć znajdujących się na serwerze. W tym celu musimy wykonać komendę za pomocą naszego terminala SSH w DirectAdmin w katalogu naszej domeny:
rm -rf img/p/*
Na zakończenie, robiąc kopię sklepu PrestaShop pod inną domeną należy pamiętać o zmianie w pliku /app/parameters.php wpisu dla secret, cookie_key, cookie_iv oraz new_cookie_key, tak aby łatwo rozdzielić sesje od innych sklepów znajdujących się w tym samym koncie DirectAdmin. Jak to zrobić?
Wygeneruj przez SSH będą w katalogu domeny klucz secret używając polecenia:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 56 | head -n 1
Skopiuj otrzymany klucz i wstaw w pliku parameters.php w miejsce starego secret.
________________________________________
Następnie wygeneruj nowy cookie_key wykonując polecenie:
cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 56 | head -n 1
Tak samo skopiuj klucz i wklej zamiast starego cookie_key.
________________________________________
Teraz wykonaj polecenie generujące nowy cookie_iv:
cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1
Zrób tak jak wyżej, zastępując stary cookie_iv.
________________________________________
A teraz najważniejsze, usuń wartość z new_cookie_key, pozostawiając wyłącznie:
'new_cookie_key' => '',
________________________________________
Teraz stwórz plik key_gen.php w katalogu domeny public_html, czyli tam gdzie jest Twój sklep, wprowadzając w plik kod:
<?php
// Ładujemy tylko autoloader bibliotek, nie całą Prestę
require_once __DIR__ . '/vendor/autoload.php';
use Defuse\Crypto\Key;
try {
$key = Key::createNewRandomKey();
echo "\nTWÓJ NOWY KLUCZ (new_cookie_key):\n";
echo $key->saveToAsciiSafeString() . "\n\n";
} catch (Exception $e) {
echo "Błąd: " . $e->getMessage() . "\n";
}
________________________________________
Odpal swój skrypt php w terminalu, w tym samym miejscu co generowałeś swoje klucze, wykonując polecenie zależne od wersji php, jakiej używasz w domenie sklepu, np.
php74 key_gen.php
php81 key_gen.php
php82 key_gen.php
php83 key_gen.php
itd.
Dostaniesz od razu bardzo długi kod, który kopiujesz i wklejasz w miejsce wcześniej usuniętego 'new_cookie_key' => '',
________________________________________
Pamiętaj o wyczyszczeniu plików i folderów z /var/cache/ przed odpaleniem swojego sklepu!