En un tutorial anterior, te mostré cómo instalar WordPress en un servidor Linux. En este artículo, te mostraré cómo hacer una copia de seguridad de tu sitio de WordPress y restaurarlo sin un plugin. Asumo que tienes acceso a tu VPS (servidor virtual privado) o servidor dedicado Linux a través de SSH y conoces algunos comandos básicos de Linux. Si tienes un plan de alojamiento compartido, entonces siento que este artículo no sea para ti.
Hacer una copia de seguridad de WordPress sin un plugin
Probablemente sabes que no debes instalar demasiados plugins en tu sitio de WordPress porque eso ralentizará tu sitio. Buenas noticias para aquellos que alojan WordPress en un servidor privado virtual o en un servidor dedicado. Puedes utilizar Linux y el comando MySQL para automatizar su proceso de copia de seguridad de WordPress para que pueda eliminar su plugin de copia de seguridad de WordPress. Lo mejor de todo es que este método de copia de seguridad es gratuito y se puede automatizar.
Para hacer una copia de seguridad de un sitio de WordPress, tenemos que hacer una copia de seguridad de la base de datos y de todos los archivos bajo su directorio webroot. Primero voy a explicar cómo hacer una copia de seguridad de la base de datos.
Copia de seguridad de la base de datos de WordPress
El siguiente comando se aplica tanto a la base de datos MySQL como a la base de datos MariaDB. Para aquellos que no lo saben, MariaDB es un reemplazo de MySQL. Eso significa que el 99% de los comandos de MariaDB son los mismos que los de MySQL. Y le recomiendo encarecidamente que migre a MariaDB si está utilizando MySQL como su servidor de base de datos.
Puedes comprobar si estás usando MariaDB o MySQL ejecutando el siguiente comando en el prompt del shell:
mysql --version
Ejemplo de resultado:
mysql Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Como puedes ver, estoy usando MariaDB. Otro método para detectar si tienes MySQL o MariaDB es iniciar sesión en tu servidor de bases de datos utilizando el cliente MySQL.
sudo mysql -u root
Después de iniciar la sesión, verás un mensaje de bienvenida:
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 102 Server version: 10.3.22-MariaDB-0ubuntu0.19.10.1-log Ubuntu 19.10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Puedes ver que estoy usando la versión 10.3.22 del servidor MariaDB. Si utiliza la base de datos MySQL entonces la versión del servidor será algo así como:
8.0.7-MySQL Community Server (GPL)
Ahora que sabes qué servidor de base de datos estás utilizando, vamos a hacer la copia de seguridad.
Después de entrar en el servidor de bases de datos usando el comando sudo mysql -u root -p, ejecuta el siguiente comando para mostrar todas las bases de datos que tienes en tu servidor. No omita el punto y coma.
show databases;
Ejemplos de resultados:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | wordpress | +--------------------+
Normalmente tiene cuatro bases de datos. Cada servidor MySQL/MariaDB incluye las bases de datos infomation_schema, mysql, performance_schema. La última es la base de datos para su Sitio WordPress, que es la única base de datos que necesita respaldar. Introduzca el comando exit para salir de su servidor de bases de datos.
exit;
Ahora usamos la utilidad mysqldump para hacer una copia de seguridad de la base de datos de wordpress.
sudo mysqldump -u root wordpress > wordpress.sql
El comando anterior hará una copia de seguridad de la base de datos de wordpress en un archivo llamado wordpress.sql en el directorio de trabajo actual. Puede cambiar el nombre del archivo de copia de seguridad a su gusto, como miweb.sql. Si encuentras el siguiente error:
mysqldump: Error: Binlogging on server not active
A continuación, debes habilitar el registro binario editando tu archivo de configuración /etc/mysql/my.cnf o /etc/my.cnf dependiendo de tu distribución de Linux.
sudo nano /etc/mysql/my.cnf
o
sudo nano /etc/my.cnf
Coloca el siguiente texto en la sección [mysqld].
log-bin=mysql-bin
Así:
[mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking log-bin=mysql-bin #
Guarda y cierra el archivo. A continuación, reinicia tu servidor de bases de datos
sudo systemctl restart mysql
o
sudo systemctl restart mariadb
Ahora utiliza el comando mysqldump anterior para hacer una copia de seguridad de toda tu base de datos de WordPress en un archivo .sql.
También puedes comprimir el archivo de copia de seguridad para que no ocupe demasiado espacio.
sudo mysqldump -u root wordpress | gzip > wordpress.sql.gz
Copia de seguridad de WordPress en Webroot
Tus archivos de programa de WordPress, archivos de tema, archivos de plugins e imágenes subidas están todos en el directorio webroot (directorio web raiz). Su directorio webroot podría ser /var/www/html/ o /usr/share/nginx/html/ o algo así dependiendo de la configuración de tu servidor web.
Para hacer una copia de seguridad de estos archivos de WordPress utilizaremos una utilidad de línea de comandos llamada tar, abreviatura de tap archive. Introduce el siguiente comando en el prompt de tu shell.
sudo tar -cpvzf filename.tar.gz /var/www/html/
El comando anterior tiene 5 opciones, donde:
- -c significa crear un fichero.
- -p significa preservar los permisos de los archivos que se archivan.
- -v: mostrar información detallada.
- -z significa comprimir el archivo con gzip.
- -f significa archivo.
filename.tar.gz es el nombre del archivo y /var/www/html/ significa que todos los archivos y directorios bajo el directorio webroot serán archivados y comprimidos. Tu directorio webroot puede ser diferente, así que comprueba la configuración de tu servidor web.
Restaurar la base de datos y los archivos de WordPress en el mismo servidor
Ahora ya sabes cómo hacer una copia de seguridad de tu base de datos y archivos de WordPress, pero no sirve de nada si no sabes cómo restaurarlos.
Restaurar la base de datos de WordPress
Digamos que tu sitio de WordPress ha sido hackeado a través de una vulnerabilidad en un plugin. Si tiene una copia de seguridad de la base de datos, puede restaurar fácilmente el estado original. Introduzca el siguiente comando para importar la base de datos previamente respaldada al servidor de bases de datos MySQL/MariaDB.
sudo mysql -u root wordpress < wordpress.sql
Después de eso, puedes entrar en tu servidor de bases de datos y ver si todas tus bases de datos están importadas.
Restauración de archivos de WordPress
Primero, extrae el tarball
tar -xzvf filename.tar.gz
A continuación, copia los archivos de WordPress en el directorio webroot. Asumo que tu directorio raíz web es /var/www/html/.
sudo cp var/www/html/* /var/www/html/ -R
Envíe por correo electrónico los archivos de copia de seguridad de WordPress
Si quieres enviar por correo electrónico tu archivo de copia de seguridad de la base de datos y el archivo de copia de seguridad de WordPress a tu bandeja de entrada, sigue los siguientes pasos.
Primero, instala heirloom mailx. Heirloom mailx es un fantástico agente de correo (cliente de correo electrónico). Soporta archivos adjuntos y puede enviar correos electrónicos utilizando servidores SMTP externos como Gmail. Vamos a enviar nuestro archivo de copia de seguridad de la base de datos y los archivos de copia de seguridad de WordPress como archivos adjuntos utilizando Gmail como el servidor SMTP.
Instalación de Heirloom Mailx
En un servidor CentOS/RHEL, ejecuta el siguiente comando:
sudo yum install -y mailx
En un servidor Fedora:
sudo dnf install -y mailx
En un servidor Debian/Ubuntu:
sudo apt-get install -y heirloom-mailx
¡Eso es!
Configuración de Gmail como servidor SMTP externo para retransmitir correos electrónicos
Editar el archivo mailrc. En el servidor CentOS/RHEL/Fedora:
sudo vi /etc/mail.rc
en un servidor Debian/Ubuntu
vi ~/.mail.rc
Coloca el siguiente texto en el archivo.
set smtp-use-starttls set ssl-verify=ignore set smtp=smtp://smtp.gmail.com:587 set smtp-auth=login set smtp-auth-user=user-account@gmail.com set smtp-auth-password=user-password set from="user-account@gmail.com(Your_Name)"
Sustituye los textos verdes por las credenciales de tu cuenta de Gmail. Guarda y cierra el archivo. Ahora podemos enviar correos electrónicos utilizando el comando de correo como este:
El texto que sigue a echo es el contenido del correo que será canalizado en el comando mail.
echo "website backed up" | mail -v -a backup.sql -a filename.tar.gz -s "wordpress backed up" buzon@dominio.com
- -v significa verbose, mostrará su estado de conexión con Gmail.
- -a significa adjunto. puede utilizar varias opciones -a para añadir múltiples adjuntos a su correo electrónico.
- -s significa asunto.
- El último argumento es la dirección de correo electrónico del destinatario, como johndoe@gmail.com. Por cierto, puedes enviarte un correo electrónico a ti mismo. Esto significa que la dirección del remitente y la del destinatario pueden ser la misma. También puedes añadir varias direcciones de correo electrónico de destinatarios.
El servidor CentOS/RHEL/Fedora necesita añadir una línea extra al archivo mail.rc. En primer lugar, descarga estos tres archivos en tu servidor, ponlos en el directorio .certs de tu casa. Si estás usando firefox en Linux de escritorio, entonces también puedes encontrar estos archivos en el directorio ~/.mozilla/firefox/.default.
A continuación, añada la siguiente línea al archivo /etc/mail.rc.
set nss-config-dir=/home/<username>/.certs/
Guarda y cierra el archivo. Ahora puedes enviar correos electrónicos usando Gmail como Relay.
Cómo evitar la limitación del tamaño de los archivos adjuntos de Gmail
Gmail limita el tamaño total del archivo adjunto del remitente a 25M, aunque una cuenta de Gmail puede recibir un archivo adjunto de 34M. Sin embargo, los archivos de WordPress tienden a aumentar de tamaño muy rápidamente. Si tu archivo es mayor de 25M, es posible que quieras dividir tu archivo en varias partes y enviarlas por correo electrónico una por una.
Dividir el archivo
Para ello, vamos a utilizar el comando split. Su sintaxis es la siguiente:
split -b 5M -d tecnolitas.tar.gz <prefix>
El comando anterior significa dividir filename.tar.gz en 5 Megabytes de tamaño del archivo. Puede cambiar 5M por algo menor que sea inferior a 25M. es el nombre que se añadirá a los archivos divididos.
Por ejemplo, si se ejecutas el siguiente comando:
split -b 5M -d tecnolitas.tar.gz wordpress
Obtendrás los siguientes archivos.
-rw-rw-r-- 1 user user 15M Nov 21 01:57 tecnolitas.tar.gz
-rw-rw-r-- 1 user user 5.0M Nov 21 13:46 wordpress00
-rw-rw-r-- 1 user user 5.0M Nov 21 13:46 wordpress01
-rw-rw-r-- 1 user user 4.5M Nov 21 13:46 wordpress02
El archivo tecnolitas.tar.gz está dividido en tres archivos. Digamos que tu archivo tiene un tamaño de 40 Megabytes. Puede utilizar el siguiente comando:
split -b 25M -d filename.tar.gz wordpress
para obtener un archivo de 25M y otro de 15M. Ahora puedes enviar esos dos archivos a tu cuenta de Gmail. Pero tienes que usar el comando de correo dos veces para enviar cada uno de los archivos, no puedes enviar los dos como archivo adjunto a la vez.
Cómo unirlos
Cuando se restaura el sitio web hay que unir esos archivos divididos. Para ello podemos utilizar el comando cat.
cat wordpress00 wordpress01 > wordpress.tar.gz
Automatización del proceso
Sí, puede automatizar los procesos anteriores. ¿Quién no adora la automatización? Instalaremos cron y lo utilizaremos para programar la tarea de copia de seguridad. Instálalo con los siguientes comandos:
Para el servidor Debian/Ubuntu:
sudo apt-get install cron
Para CentOS/RHEL:
sudo yum install crontabs
Para el servidor Fedora:
sudo dnf install crontabs
Si utiliza systemd, entonces necesita iniciarlo después de la instalación.
sudo systemd start crond
Habilitar el inicio en el arranque del sistema:
sudo systemd enable crond
Programación de la tarea de copia de seguridad de WordPress
Introduzce el siguiente comando en el terminal:
crontab -e
Esto abrirá la tabla cron en la que añadiremos las tareas. Por ejemplo, si queremos hacer una copia de seguridad de la base de datos a las 4 de la mañana todos los días, entonces pon el siguiente texto en ella.
0 4 * * * mysqldump -u root -pyourpassword --all-databases --master-data | gzip > backup.sql.gz
0 4 * * * significa todos los días a las 4:00. Sustituye el texto azul por la contraseña de la base de datos.
A continuación haremos una copia de seguridad de los archivos de WordPress en webroot. Añade el siguiente texto en la siguiente línea.
5 4 * * * tar -cpzf filename.tar.gz /var/www/html/
Si la raíz de tu web no es /var/www/html/ sino otra cosa como /usr/share/nginx/html, entonces cámbiala. Así que hacemos una copia de seguridad de wordpress a las 4:05 todos los días. Luego tenemos que enviarlos como archivos adjuntos a nuestra dirección de correo electrónico.
10 4 * * * echo "website backed up" | mail -a backup.sql.gz -a filename.tar.gz -s "wordpress backed up" buzon@dominio.com
El comando anterior enviará nuestra copia de seguridad de la base de datos y de los archivos a las 4:10 cada día. Yo separo las tres tareas en intervalos de 5 minutos. Si quieres que ocurran justo después de la anterior, entonces puedes hacer lo siguiente.
0 4 * * * mysqldump -u root -pyourpassword --all-databases --master-data | gzip > backup.sql.gz && tar -cpzf filename.tar.gz /var/www/html/ && echo "website backed up" | mail -a backup.sql.gz -a filename.tar.gz -s "wordpress backed up" recipient@domain.com
El doble ampersand (&&) significa que se ejecuta el siguiente comando cuando el anterior se ha completado con éxito. Así que no tienes que esperar 5 minutos. Pero este formato hará que su archivo crontab sea un poco desordenado.
Si quieres eliminar la copia de seguridad de la base de datos y de los archivos después de haberla enviado por correo electrónico para ahorrar espacio en tu servidor, puedes añadir
15 4 * * * rm backup.sql.gz filename.tar.gz
o simplemente añadir el comando rm usando &&.
Si quieres que tu trabajo cron se ejecute cada hora, puedes hacerlo:
0 * * * *
o una vez cada dos horas
0 */2 * * *
Mueva su sitio de WordPress a un nuevo servidor
Si el proceso de restauración es en su servidor original, entonces ha terminado. Su sitio de WordPress está ahora funcionando correctamente como antes. Pero si transfieres tu sitio desde tu servidor original a otro servidor, sigue las siguientes instrucciones.
- En primer lugar, debe instalar la pila LAMP o la pila LEMP en el nuevo servidor.
- A continuación, debes copiar tu archivo de host virtual Apache o Nginx y el archivo del certificado SSL al nuevo servidor. Asegúrese de probar el archivo de host virtual y recargue su servidor web.
- A continuación, copie los archivos de WordPress al nuevo servidor en el directorio webroot.
- Después de eso, es necesario crear una base de datos vacía en MySQL/MariaDB en el nuevo servidor, que se describe a continuación.
Abra el archivo de configuración por defecto de WordPress en el directorio webroot.
sudo nano /var/www/html/wp-config.php
Esto abrirá tu archivo wp-config.php y en ese archivo, puedes encontrar el usuario de la base de datos que creaste cuando instalaste WordPress por primera vez y la contraseña del usuario como la siguiente:
/** The name of the database for WordPress */ define('DB_NAME', 'database-name'); /** MySQL database username */ define('DB_USER', 'database-username'); /** MySQL database password */ define('DB_PASSWORD', 'user-password');
Ahora inicia sesión en el servidor de la base de datos utilizando el siguiente comando:
sudo mysql -u root
Crear la base de datos.
create database database-name;
Concede todos los privilegios de la base de datos de WordPress al usuario. Cambia el texto en azul por tus propios datos.
grant all privileges on database-name.* to database-username@localhost identified by 'user-password';
Limpiar los privilegios de la base de datos.
flush privileges;
Salir del servidor de la base de datos.
exit;
Ahora copia el archivo SQL respaldado al nuevo servidor y restaura la base de datos.
sudo mysql -u root wordpress < wordpress.sql
Has transferido con éxito tu sitio de WordPress al nuevo servidor. Cambie su registro DNS y debería ver su sitio de WordPress funcionando correctamente.
Cosas que hay que tener en cuenta antes de eliminar un VPS
Normalmente hago las siguientes cosas antes de borrar un VPS que ya no necesito. Me ayudan a evitar el borrado de software o datos importantes sin migración.
- Listar los certificados TLS de Let’s Encrypt en el VPS con sudo certbot certificates.
- Listar los servicios en ejecución en el VPS con sudo netstat -lnptu.
- Comprueba el uso del disco con sudo ncdu /. Sí, necesitas instalar la utilidad ncdu: sudo apt install ncdu.
- Comprueba si hay algún trabajo Cron en el VPS con sudo crontab -l.
- Comprobar el directorio de inicio para ver si tengo algunos archivos allí.
Ya tienes todo el conocimiento para automatizar las copias de seguridad de WordPress, este mismo proceso sirve también para migrar sitios web de un servidor a otro.
¡Que tengas un Ingenioso día!
¡que tengas un ingenioso día!
Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0
Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.