Jak přesunout WordPress na novou adresu/nový hosting

V rubrice: Tutoriály | Obtížnost:

Poměrně častý dotaz mezi začínajícími uživateli WordPressu je, jak ho přesunout na novou adresu či na nový hosting a přitom si zachovat všechna nastavení, články i obrázky, které byly doposud vytvořeny. Nejde o jednoduchou věc, ale se správním návodem to zvládnete.

Existují na to pluginy, např. Backup and Move Plugin, ale v tomto tutoriálu si ukážeme ruční cestu, díky které budeme mít kontrolu nad všemi daty. Tutoriál jsem rozdělil do pěti jednoduchých kroků.

1. Zkopírování souborů

Začneme tím nejjednodušším – zkopírováním souborů. Stáhněte si nějakého ftp klienta (např. FileZillu, ale je to na víc), vyplňte údaje pro přístup, které jste dostali od původního poskytovatele svého hostingu a připojte se na server.

Najděte složku se svým WordPressem, označte všechny soubory a složky wp-admin, wp-content, wp-includes a stáhněte si je na lokální disk. Pokud se zde nachází i jiné složky (domains, subdom), stáhněte je pouze v případě, že víte, co obsahují. Pravděpodobně k vašemu WordPressu nepatří.

Nyní se připojte na váš nový hosting (mohu doporučit WEDOS, kde hostuji i tento web) a postup zopakujte, jen v opačném pořadí – nahrajte soubory na web. Nezapomeňte smazat soubory index.html nebo index.htm pokud se tam nějaké nachází.

2. Nastavení přístupu do databáze

Soubory jste sice nahráli, ale ještě je třeba upravit přístup k databázi. Otevřete si wp-config.php v kořenové složce.

A najděte si následující údaje:

(pokud by se snažili vyluštil heslo, tak vám ušetřím práci – je smyšlené)

define('DB_NAME', '*****');
define('DB_USER', '*****');
define('DB_PASSWORD', '*****');
define('DB_HOST', '*****');

Přihlašovací údaje upravte podle svého nového hostingu. V tuto chvíli se WordPress do databáze sice připojí, ale ještě nemůže najít žádná data. Ty mu musíme teprve dodat.

3. Export staré databáze

Přihlašte se do phpmyadminu a vyberte požadovanou databázi. Klikněte na tlačítko export.

Musím zdůraznit, že vzhled phpmyadmina se může na různých hostincích lišit, protože používají jiné verze. Obecně se dá říct, že musíte zvolit vlastní export, vybrat všechny tabulky databáze a výstup do souboru. Pokud máte hodně dat doporučuji ještě zvolit kompresi.

Na výběr máte několik formátů, jejich podpora liší se hosting od hostingu. Moje zkušenosti jsou takové, že gzip ještě nikde nezklamal. K dispozici máte ještě další spousty nastavení, ale ty můžete nechat ve výchozím stavu.

4. Import databáze

Opět do phpmyadmina, ale tentokrát na nový hosting. Samotný import je jednoduchý. Je v menu hned vedle exportu a pak stačí vybrat příslušný soubor. Tím, ale přesun databáze nekončí.

5. Úprava databáze

Pokud se měnila adresa webu, je třeba ještě nahradit všechny výskyty staré url v databázi za nové. Musíte tedy jít ke vkládání SQL kódu, jak vidíte na obrázku.

Do okna pak vložíte následující kód:

UPDATE wp_posts SET guid = REPLACE(guid, 'http://stararaurl.cz', 'http://novaurl.cz');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://stararaurl.cz', 'http://novaurl.cz');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://stararaurl.cz', 'http://novaurl.cz');
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://stararaurl.cz', 'http://novaurl.cz');

Upravte stararaurl.cz a novaurl.cz na vaše url. Ještě zkontrolujte, že tabulky mají prefix wp_. V opačném případně změňte v SQL příkazu i ten. Poté klikněte na proveď a databáze se aktualizuje. Web nyní máte komplet převeden.

Update 8.1.2016

Několikrát jsem si při přenosu databáze všiml, že nastavení některých pluginů chybí. Dlouhou dobu mi to vrtalo hlavou, až jsem na to nakonec přišel. WordPress uchovává některé data serializovaná v podobném formátu: {s:13, m:{‚stararaurl.cz‘}}. V čem je problém? Číslo 13 říká, kolik má řetězec „stararaurl.cz“ znaků. Pokud by ale někdo změnil řetezec na „novaurl.cz“ vznikne problém, protože má znaků méně a celé databázové pole se znevalidní. Co s tím?

Objevil jsem nástroj Search and Replace, který si stáhnete a nahrajete na svůj hosting. Vyplníte si starou, novou url a údaje pro připojení k databázi. Tlačítkem dry run vyzkoušíte, které tabulky se budou měnit a pak kliknete na live run a máte hotovo. Všechny staré url se nahradí a serializovaná pole zůstanou zachována.

search and replace

Teď které problémy by mohly nastat?

Vložil jsem SQL příkaz, změnil url a zkontroloval prefix, ale po odeslání mi to vrátilo chybu #1046 – No database selected
Zkontrolujte, že v phpmyadminu máte vybranou databázi.

Hlavní stránka webu mi jede dobře, přihlásím se i do administrace, ale když kliknu na nějaký článek, vrací mi to chybu.
Problém bude nejspíše v trvalých odkazech. Ve wordpress adminu, v nastavení->trvalé odkazy aktualizujte vaši volbu a čímž by se měl váš soubor .htaccess upravit do správného tvaru.

Narazili jste při převádění webu na nějaký jiný problém? Neváhejte se ozvat do komentářů.

V rubrice: Tutoriály | Obtížnost:

Komentáře

  1. Mě osobně to vůbec nejde, na novém hostingu v phpMyAdmin mi to hlásí – SQL-dotaz:

    SQL-dotaz:

    — — Vypisuji data pro tabulku `wp_comments` — INSERT INTO `wp_comments` (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) VALUES (10, 499, ‚mirabudos affs‘, ‚[email protected]‘, ‚http://shakira-online.net‘, ‚77.48.195.104‘, ‚2012-07-30 07:55:21‘, ‚2012-07-30 05:55:21‘, ‚páni máš to tu fakt super.‘, 0, ‚1‘, ‚Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11‘, “, 0, 0), (5, 485, ‚mirco‘, ‚[email protected]‘, ‚http://love-ladygaga.blog.cz‘, ‚85.135.159.51‘, ‚2012-07-29 18:18:38‘, ‚2012-07-29 16:18:38‘, ‚je to tu užastné :)‘, 0, ‚1‘, ‚Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11‘, “, 0, 0), (7, 481, ‚tayswiftcz‘, ‚[email protected]‘, ‚http://tayswift.[…]

    MySQL hlásí:

    #1062 – Duplicate entry ’10‘ for key ‚PRIMARY‘

    Čím to je? (ve výpisu chyb jsem zaměnila

    1. Jak se zdá, tak v databázi už nějaké údaje máš. Nejdříve je třeba všechny je vymazat.

      1. Děkuji moc za rychlou odpověď. Taky mě to mohlo napadnout, děkuji.

  2. Znovu se ozývám. Změna proběhla úspěšně, jenže když zadám novou www adresu, zobrazí se mi prázdná stránka… Budu muset na nové doméně něco změnit nebo phpmyadminu?

    1. A funguje admin WordPressu? Takhle to vypadá na nějakou php chybu, zkusil bych třeba znovu nahrát všechny soubory…

  3. Dobry den,
    Dlouho mi trvalo, nez jsem nasla to, co potrebuji, na teto vasi strance. Mohu podle uvedenych instrukci presunout subdomenu ‚www.neco.hlavni.aa‘ ze slozky domains jako ‚www.hlavni.aa‘ do slozky www u stejneho hostingu (wedos) ?

    1. Dobrý den,

      pakliže chcete z oné subdomény udělat hlavní stránku svého hostingu, tak ano. Tento návod přesně na to můžete použít.

  4. Dobrý den,
    udělal jsem vše nutné as potřebné při přesunu webu na novou subdoménu.
    WEB je plně funkční ale nefunguje /wp-admin,teda přesněji login nabehne ale jak se zaloguju naběhne hláška: Web nemůže zobrazit tuto stránku. Pokud se ale vrátím z5 na home – webu tak jsem přihlášen ale nefunguje administrace s opět stejnou hláškou.
    Děkuji D.V.

    PS: původní web: http://www.porobetonostrava.eu new: http://pl.porobetonostrava.cz

  5. Pořešeno, musel jsem smazat nekteré pluginy 🙁 ale problém je v tom, že již nejdou aktivoat pluginy které dělají potíže.

    1. Dobrý den,

      je dost možné, že u nich bylo v databázi uloženo nějaké nastavení, které dělá problémy. Tady je bohužel nutné jít přímo do tabulky wp_options a data nefunkčních pluginů smazat. Bohužel, která data to jsou je dost obtížné, protože každý plugin si je ukládá podle sebe.

  6. Dobrý den,
    potřebovala bych poradit. Při importu databáze mi to hlásí tuto chybu:
    Chyba
    SQL-dotaz:


    — Databáze: `db2-eyeloly`

    CREATE DATABASE IF NOT EXISTS `db2-eyeloly` DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;

    MySQL hlásí:

    #1044 – Access denied for user ‚de-eyeloly’@’%‘ to database ‚db2-eyeloly‘

    Původní databáze je db2-eyeloly. Nová databáze se jmenuje de-eyeloly.
    Nevíte, kde může být problém?

    Děkuji.

    1. Dobrý den,

      výše uvedený script se pokouší vytvořit databázi db2-eyeloly, ta však již existuje a navíc uživatel nemá práva vytvářet nové databázi. Doporučuji zmíněný řádek smazat, přepnout na databázi de-eyeloly a tam importovat zbytek souboru.

      1. Dobrý den,
        děkuji, ale nějak to nepomohlo. Ale netvrdím, že jsem to nemohla udělat špatně. Může tam být ještě nějaký problém.

        Děkuju.

          1. Hlásí to pořád tu samou. Zkusila jsem si vyzkoušet migrovat ještě jeden web s wordpressem a efekt je stejný.

          2. Děkuju za radu. Nakonec se povedlo. Jen nevim, jak to dělám, ale po spuštění scriptu mi to hlásí toto:

            Pravděpodobně máte v SQL dotazu chybu. Níže uvedený výstup MySQL serveru (pokud je nějaký) vám také může pomoci při zkoumání problému

            ERROR: Neznámé interpunkční znaménko @ 47
            STR: ://
            SQL: UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);

            SQL-dotaz:

            UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);

            MySQL hlásí: Dokumentace

            #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‚://eyeloly.com’, ‚http://eyeloly.com/de’)‘ at line 1

          3. Pokud to správně chápu, tak se snažíte použít můj script pro změnu url. Za guid jsou dvě čárky, měla by být jen jedna.

  7. Dobrý den,
    chápete to správně. Ale ani odstranění čárek navíc nepomohlo. Zkusila jsem toto:
    UPDATE wp_posts SET guid = REPLACE(guid, http://eyeloly.com, http://eyeloly.com/de);
    UPDATE wp_posts SET post_content = REPLACE(post_content, http://eyeloly.com, http://eyeloly.com/de);
    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, http://eyeloly.com, http://eyeloly.com/de);
    UPDATE wp_options SET option_value = REPLACE(option_value, http://eyeloly.com, http://eyeloly.com/de)

    A toto:
    UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);
    UPDATE wp_posts SET post_content = REPLACE(post_content, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);
    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’);
    UPDATE wp_options SET option_value = REPLACE(option_value, ‚http://eyeloly.com’, ‚http://eyeloly.com/de’)

    Obojí hlásí stejnou chybu.

    1. Zkuste toto:

      UPDATE wp_posts SET guid = REPLACE(guid, ‚http://eyeloly.com‘, ‚http://eyeloly.com/de‘);
      UPDATE wp_posts SET post_content = REPLACE(post_content, ‚http://eyeloly.com‘, ‚http://eyeloly.com/de‘);
      UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, ‚http://eyeloly.com‘, ‚http://eyeloly.com/de‘);
      UPDATE wp_options SET option_value = REPLACE(option_value, ‚http://eyeloly.com‘, ‚http://eyeloly.com/de‘);

    2. Uvozovky ‚ jenom horní, to akorát WordPress je naformátoval. Případně jistota dvojité „

    3. A ještě jednou, všiml jsem si že tam není čárka navíc, ale akorát přefomátované uvozovky. Tj. nahradit je za dvojité.

  8. Děkuju. Už se to někam posunulo. Akorát, bohužel, ne k cíli. Po spuštění scriptu to hlásí toto:
    UPDATE wp_posts SET guid = REPLACE(guid, „http://eyeloly.com“, „http://eyeloly.com/de“);# MySQL vrátil prázdný výsledek (tj. nulový počet řádků).

    UPDATE wp_posts SET post_content = REPLACE(post_content, „http://eyeloly.com“, „http://eyeloly.com/de“);# MySQL vrátil prázdný výsledek (tj. nulový počet řádků).

    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, „http://eyeloly.com“, „http://eyeloly.com/de“);# MySQL vrátil prázdný výsledek (tj. nulový počet řádků).

    UPDATE wp_options SET option_value = REPLACE(option_value, „http://eyeloly.com“, „http://eyeloly.com/de“);# MySQL vrátil prázdný výsledek (tj. nulový počet řádků).

    a adresa eyeloly.com/de pořád padá do 404 🙁

    1. Zkusil bych si vypertovaný .sql upravit ručně a v nějakém textovém editoru nahradit url pomocí „najdi a nahraď“.

    1. Právě to je v článku popsáno – přepis v databázi.

  9. Převod funguje skvěle, je nutné upravit jen uvozovky, když se kopíruje Váš odkaz, aby nevyskakovala již v komentářích uvedená chyba. Přesto stejně mám problém a právě se zobrazováním obrázků. URL adresy obrázků jsou v pořádku přepsány, v nabídce Média jsou také správně nahrány, ale na webu se mi prostě ukazuje jen prázdný obrázek s křížkem. Proč? Díky.

    1. Určitě je možné podobným způsobem nahradit všechny výskyty nazevdomeny.cz/nazevdomeny.cz za nazevdomeny.cz/

  10. Dobrý den,
    přesun jsem dělal přesně podle uvedených kroků. Jediný problém jsem měl s těmi přeformátovanými uvozovkami, ale to už jsem vyřešil a nahradilo se to v pořádku. Ale když už mám vše hotové a zadám si adresu nového webu, načte se mi index od wedosu a tváří se to, že na ftp nemám žádný index (ten původní jsem smazal a poté nakopíroval všechny soubory ze starého webu) . Nevíte prosím, kde by mohla být chyba?

    1. Dobrý den,

      Pokud si dobře vzpomínám, tak na wedosu má index.html přednost před index.php Zkusil bych tedy smazat index.html a mělo by to být v pořádku.

  11. ahoj, díky za návod, tenhle opravdu pomohl.

    Ale doporučil bych přímo do textu k úpravě databáze dopsat, že je NUTNÉ zaměnit v kódu čárky zleva i zprava okolo URL za apostrof (jedna horní čárka, takže: ‚), nebo uvozovky (taktéž pouze horní: „).
    Z diskuze se to luští špatně a ušetří to méně znalým trápení s nefunkčním příkazem v SQL.

    1. Vložil jsem bloky kodů do tagu pre a už by se měly zobrazovat správné uvozovky ve stránce.


  12. UPDATE wp_posts SET guid = REPLACE(guid, "http://eyeloly.com", "http://eyeloly.com/de");
    UPDATE wp_posts SET post_content = REPLACE(post_content, "http://eyeloly.com", "http://eyeloly.com/de");
    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, "http://eyeloly.com", "http://eyeloly.com/de");
    UPDATE wp_options SET option_value = REPLACE(option_value, "http://eyeloly.com", "http://eyeloly.com/de")

  13. Dobrý den, chci se zeptat, rád bych přesunul obsah webu, který mám na hlavní stránce, na subdoménu v rámci stejného hostingu (forpsi). Na subdoméně chci zachovat stejný vizuál jako na hlavní stránce, ale chtěl bych s tím pracovat odděleně (měnit menu, posty, atp., aniž bych cokoliv měnil na hlavní stránce). Jaká je nejoptimálnější cesta? Stačí zkopírovat obsah webu z www do subdomény? Dočetl jsem se taky o pluginu WP multisite. Děkuji moc

    1. Dobrý den,

      multisite na WP sice funguje, ale ne všechny pluginy ho plně podporují. Myslím, že nejlepší cesta je zduplikovat obsah a pak ho udržovat odděleně. Případné změny šablony, které by měly být viditelné obou stránkách, nebudou předpokládám příliš časné a bude to tak jednodušší.

      Michal

  14. Mám na starém hostingu ne zrovna ideální instalaci WP. Nahrál jsem tedy na nový hosting databázi MySQL ze starého hostingu, potom přes ftp nakopíroval novou instalaci WP 4.0 CZ a teď v administraci WP nastavuji jméno databáze apod. Dělám to správně nebo jsem měl vytvořit prázdnou databázi, udělat základní nastavení WP a ak nahrát zálohu databáze ze starého WP?

    Díky za odpovědď.

    Luboš

    1. Pokud chceš pročistit svoji instalaci, tak je asi nejlepší použít export článků přímo ve WordPressu. Má to tu nevýhodu, že to nepřenese nastavení pluginů apod., ale zase to smaže veškerý balast, který se nahromadil.

      Pokud bych chtěl kopírovat databázi jako celej, tak bych tam jednoduše hodil všechno a nesnažil bych se nějak přepisovat čistou instalaci.

  15. Dobrý den, jel jsem podlle návodu a když to dole přepisuji na novou adresu hodí mi to tam potom toto:
    MySQL returned an empty result set (i.e. zero rows).
    # MySQL returned an empty result set

    Děkuji za odpověď

    1. To znamená, že SQL dotaz neovlivnil žádná data v databázi. Zkusil bych se podívat, jestli stará odresa odpovídá údajům v databázi. Může tam být lomítko navíc nebo jiný protokol (http/https)

  16. Zdravím , postupoval som podľa návodu , všetko funguje tak ako má až na posledný bod, všade mám starú url. Do administrácie sa v novej v pohode dostanem, no stále ešte ukazuje všetko staré . V článkoch odkazy je všetko pôvodné, teda staré url adresy.
    Vložil som tam ten kód Mysql a napísalo mi : # MySQL vrátil prázdný výsledek (tj. nulový počet řádků).

    1. To znamená, že SQL dotaz neovlivnil žádná data v databázi. Zkusil bych se podívat, jestli stará odresa odpovídá údajům v databázi. Může tam být lomítko navíc nebo jiný protokol (http/https)

  17. Dobrý den,

    hlásí mi to chybu 1064. Poradíte mi prosím, co dělám špatně?
    Děkuju

    SELECT * FROM `wp_posts` WHERE 1
    UPDATE wp_posts SET guid = REPLACE(guid, „http://prazskysvazjudo.tode.cz“, „http://prazskysvazjudo.cz“);
    UPDATE wp_posts SET post_content = REPLACE(post_content, „http://prazskysvazjudo.tode.cz“, „http://prazskysvazjudo.cz“);
    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, „http://prazskysvazjudo.tode.cz“, „http://prazskysvazjudo.cz“);
    UPDATE wp_options SET option_value = REPLACE(option_value, „http://prazskysvazjudo.tode.cz“, „http://prazskysvazjudo.cz“)

    1. Doplňuji, že uvozovky mám všechny nahoře. Sem se to jen špatně zkopírovalo.

  18. Zdravím,
    dostal jsem na starost správu webu a tak si chci přesunout web na localhost, abych měl u sebe pracovní verzi. Ale bohužel se mi to nedaří. Postupoval jsem přesně podle pokynů, které jsou napsané výše. Všechno vypadá, že funguje, ale když chci jít do administrace (WP na localhostu), tak mi to přepne na původní adresu

    Nevíte, kde by mohl být problém??

    Postup bude stejný, jako když se přesouvá WP ze staré domény na novou doménu??

    1. Dobrý den,
      vypadá to, že se vám nepřepsala adresa umístění webu v databázi – nějaká chyba při kroku 5. Zkuste využít plugin – https://wordpress.org/plugins/wp-migrate-db/ – pomocí kterého si můžete stáhnout databázi se změněnými url.

      A ano, jde o stejný postup jako při přesunu ze staré domény na novou.

  19. Dobrý den,

    chci se zeptat po přenosu webu se přihlašuji na nové doméně zadám heslo a login, který byl na staré doméně a přesměruje mě to do adminu starého webu, prosím o radu děkuji

  20. Mám problém s přesunem. S WP nemám zkušenosti, ale: překopíruji komplet data na jiný hosting, změním přihl. údaje k databázi, před importem SQL nahradím url adresu novou, po importu ještě spustím sktipt, který vycuce z tabulky options hodnotu option_value a nahradí cesty novou cestou a provede serializaci a uloží.
    Když si kliknu na novou adresu webu, zobrazí se mi soubor index.html (proč ta mvůbec je?). Když zadám do adresy /index.php, opět se zobrazí index.html? WTF. Když index.html smažu, zobrazí se 404 a hled, už se zobrazí dle šablony jak má. Ostatní sekce taktéž, úvodní stránka nikoliv. Co to je prosím za „magii“? Opravdu mě z toho už vstávají vlasy hrůzou. Čekal jsme od WP úplně něco pohodlnějšího a žádný nějaký skrytý kouzla. Velice díky za odpověď.

    1. Vypadá to na špatné nastavení hostingu. Podporuje vůbec php? Zkusil bych vymazat soubor .htaccess z kořenové složky webu. Poté jít do administrace, do sekce trvalé odkazy a tam přeuložit nastavení a zkusit znovu.

      Nicméně bych zkusil napsat na podporu hostingu, něco tam smrdí.

      1. Díky za odpověď. Dobrá rada, jestli tam je PHP hehe. Samozřejmě! Webhosting je zcela v pořádku a podporuje veškeré běžně používané systémy. Htaccess jsem zkusil samozřejmě také vymazat, beze změny. Pořád se tam cpal index.html. Zkusil jsem vymazat index.html a na localhostu se mi zobrazila 404, proč sakra? Když tam je stránka index.php, proč 404? Ale na ostrém serveru to kupodivu pomohlo, stačilo smazat jen index.html. Nechápu proč. WP má u mě bod dolů.

Comments are closed.