[工具] Shell 还原本地网站文件和网站数据库备份到本地 LNMP

介绍

基本信息

作者:朱明宇
名称:将本地网站文件备份和网站数据库备份还原到本地 LNMP
作用:将本地网站文件备份和网站数据库备份还原到本地 LNMP

使用方法

1. 将网站的文件备份、网站的 SSL 公钥、网站的 SSL 私钥、网站的数据库备份,4 个文件放在此脚本中变量 tmppath 对应的目录里
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

tmppath=/bcache #本地存放网站的文件备份、网站的 SSL 公钥、网站的 SSL 私钥、网站的数据库备份的地方
midname=eternalcenter #网站的文件备份和网站的数据库备份的中间名
cmidname=fullchain #网站的 SSL 公钥的中间名
kmidname=privkey #网站的 SSL 私钥的中间名
webpath=/usr/share/nginx/html #网站文件在本地的正式存放位置
sslpath=/etc/nginx/ssl #网站网站的 SSL 公钥、网站的 SSL 私钥在本地的正式存放位置dbuser=ec #网站在数据库中的用户名
dbname=ec #网站在数据库中的的库名

注意

1. 本地需要已经搭建好 LNMP 平台
2. 必须以 root 的身份执行此脚本
3. 这里的网站的 SSL 公钥和网站的 SSL 私钥都是以 pem 后缀结尾,可以修改成真实对应的后缀
4. 脚本中类似 ”mysql -uroot -p’eternalcenter’ -e “drop database $dbname;”“ 中的 “eternalcenter“ 是指本地 MariaDB 数据库 root 用户的密码,需要修改成 MariaDB 数据库的 root 用户的真实密码

脚本

#!/bin/bash

####################### Separator ########################


tmppath=/bcache
midname=eternalcenter
cmidname=fullchain
kmidname=privkey

webpath=/usr/share/nginx/html
sslpath=/etc/nginx/ssl

dbuser=ec
dbname=ec


####################### Separator ########################

nowdirectory=`pwd`

#sudo systemctl stop nginx
#sudo systemctl stop php-fpm

cd $tmppath

sqlfile=`ls | grep $midname | grep -E \.sql$ | tail -1`
tarfile=`ls | grep $midname | grep -E \.tar | tail -1`
crtfile=`ls | grep $cmidname | grep -E \.pem$ | tail -1`
keyfile=`ls | grep $kmidname | grep -E \.pem$ | tail -1`


#sleep 300

echo $sqlfile
if [ -n "$sqlfile" ];then
    mysql -uroot -p'eternalcenter' -e "drop database $dbname;"
    mysql -uroot -p'eternalcenter' -e "create database $dbname;"
    mysql -uroot -p'eternalcenter' -e "grant all privileges on $dbuser.* to \"$dbuser\"@\"localhost\";"
    mysql -uroot -p'eternalcenter' $dbname < $sqlfile
    rm -rf $sqlfile
fi

echo $tarfile
if [ -n "$tarfile" ];then
    rm -rf $webpath/*
    tar -zxvf $tarfile -C $webpath/ &> /dev/null
    rm -rf $tarfile
    chcon -t httpd_sys_content_t -R $webpath/*
    chown -R php-fpm:php-fpm $webpath/
fi

echo $crtfile
if [ -n "$crtfile" ];then
    rm -rf $sslpath/$crtfile
    mkdir -p $sslpath &> /dev/null
    mv $crtfile $sslpath/
    chcon -t httpd_config_t $sslpath/*
fi

echo $keyfile
if [ -n "$keyfile" ];then
    rm -rf $sslpath/$keyfile
    mkdir -p $sslpath &> /dev/null
    mv $keyfile $sslpath/
    chcon -t httpd_config_t $sslpath/*
fi

chcon -t httpd_config_t $sslpath

sudo systemctl restart nginx
sudo systemctl restart php-fpm

cd $nowdirectory

[步骤] WordPress 静态网站的生成 (离线使用版的静态网站)

步骤一:在本地电脑上安装必要的软件

1.1 在本地电脑上下载并安装 LocalWP 软件

登录此网站以后点击下载并安装

Home

(步骤略)

1.2 在本地电脑上下载并安装 Traktor 软件

登录此网站以后点击下载并安装

https://traktor.wp-migration.com

(步骤略)

步骤二:在 WordPress 网站上安装必要的插件

2.1 在正式的 WordPress 网站上安装 All-in-One WP Migration and Backup 插件

登录 WordPress 后台 –> Plugins –> Add plugin –> 在 Search PLugin 的文字栏里输入 “All-in-One WP Migration and Backup” –> 按下回车键 –> Install Now

2.2 在正式的 WordPress 网站上安装 Simply Static 插件

登录 WordPress 后台 –> Plugins –> Add plugin –> 在 Search PLugin 的文字栏里输入 “Simply Static” –> 按下回车键 –> Install Now

步骤三:在正式的 WordPress 网站上设置 Simply Static 插件

3.1 在正式的 WordPress 网站上激活 Simply Static 插件

登录 WordPress 后台 –> Plugins –> Installed Plugins –> Simply Static –> Activate

3.2 在正式的 WordPress 网站上将 Simply Static 插件的 Replacing URLs 修改为 Offline Usage

登录 WordPress 后台 –> Simply Static –> Settings –> General –> Replacing URLs –> Offline Usage –> 将网页下拉到底 –> Save Settings

(注意:一定要点击 Save Settings 否则此步骤将白做)

3.3 在正式的 WordPress 网站上禁用 Simply Static 插件

登录 WordPress 后台 –> Plugins –> Installed Plugins –> Simply Static –> Deactivate

步骤四:在正式的 WordPress 网站上将网站全量备份并下载到本地

4.1 在正式的 WordPress 网站上激活 All-in-One WP Migration and Backup 插件

登录 WordPress 后台 –> Plugins –> Installed Plugins –> All-in-One WP Migration and Backup –> Activate

4.2 在正式的 WordPress 网站上生成并下载网站的全量备份文件包

登录 WordPress 后台 –> All-in-One WP Migration –> Export –> EXPORT SITE TO –> FILE –> 等待进程完成后点击下载 –> CLOSE

(注意:成功备份后生成的网站的全量备份文件包会以 xpress 后缀结尾)

4.3 在正式的 WordPress 网站上删除存留的文件(必须要做)

登录 WordPress 后台 –> All-in-One WP Migration –> Export –> Backups –> … –> Delete — OK

4.4 在正式的 WordPress 网站上禁用 All-in-One WP Migration and Backup 插件 (必须要做)

登录 WordPress 后台 –> Plugins –> Installed Plugins –> All-in-One WP Migration and Backup –> Deactivate

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误地恢复到正式的 WordPress 网站上)

步骤五:退出正式的 WordPress 网站后台 (必须要做)

位于右上角的头像 –> Log Out

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

步骤六:彻底关闭正式的 WordPress 网站的网页 (必须要做)

(步骤略)

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

步骤七:在本地电脑使用 Traktor 软件检验网站的全量备份文件包是否完整

7.1 在本地电脑使用 Traktor 软件检验网站的全量备份文件包是否完整

打开 Tracktor 软件 –> 将网站的全量备份文件包拖入窗口中

(补充:当窗口右下角的 “Extract to…” 按键从灰色变成白色则代表此文件包通过校验)

(
注意:
1) 这里的全量备份文件包是指步骤 4.2 中下载的文件
2) 校验成功后不要点击 “Extract to…” 按键
3) 全量备份文件包以 xpress 后缀结尾
)

7.2 在本地电脑关闭 Traktor 软件

(步骤略)

步骤八:在本地电脑通过 LocalWP 软件使用网站的全量备份文件包将正式的 WordPress 网站的全部数据恢复到本地的 WordPress 测试网站

8.1 在本地电脑通过 LocalWP 软件创建本地的 WordPress 测试网站

打开 LocalWP 软件 –> Create a new site –> Create a new site –> Continue –> 在 What’s your site’s name 的文字栏里输入:“local” –> Continue –> Preferred –> Continue –> 在 WordPress username 的文字栏里输入:“local” –>
在 WordPress password 的文字栏里输入:“local” –> Add Site

(注意:这里每次输入的 “local” 绝对不能换成和正式的 WordPress 网站相同的对应值,这样做是为了在登录时明白这是新创建的网站,避免将备份文件错误恢复到正式的网站上)

8.2 登录本地的 WordPress 测试网站的后台

点击在 LocalWP 软件的窗口上的 Open site –> 确认网站首页有类似 “Hello world!” 之类的提示是新网站 –> 在浏览器上输入 “http://local.local/wp-login.php” –> Username or Email Address 的文字栏里输入:“local” –> 在 Password 的文字栏里输入:“local” –> Log in

(注意:这里每次输入的 “local” 绝对不能换成和正式的 WordPress 网站相同的对应值,否则你有可能会进入正式的网站上然后进行误操作然后造成不可挽回的后果)

8.3 在本地的 WordPress 测试网站的后台安装 All-in-One WP Migration and Backup 插件

登录 WordPress 后台 –> Plugins –> Add plugin –> 在 Search PLugin 的文字栏里输入 “All-in-One WP Migration and Backup” –> 按下回车键 –> Install Now

(注意:如果这里的 All-in-One WP Migration and Backup 插件在你安装前就已经安装好了,则代表你有可能进入正式的 WordPress 网站操作,请立即停止此操作并关闭所有网页和浏览器,然后重新开始步骤 8.2)

8.4 在本地电脑通过 LocalWP 软件使用网站的全量备份文件包将正式的 WordPress 网站的全部数据恢复到本地的 WordPress 测试网站

8.4.1 在本地 WordPress 测试网站上激活 All-in-One WP Migration and Backup 插件

登录 WordPress 后台 –> Plugins –> Installed Plugins –> All-in-One WP Migration and Backup –> Activate

8.4.2 在本地电脑通过 LocalWP 软件使用网站的全量备份文件包将正式的 WordPress 网站的全部数据恢复到本地的 WordPress 测试网站

登录 WordPress 后台 –> All-in-One WP Migration –> Import –> IMPORT FROM –> FILE –> 选择 将网站的全量备份文件包 –> Upload –> PROCEED –> FINISH

(注意:这里的全量备份文件包是指步骤 4.2 中下载的文件)

步骤九:在本地电脑立刻删除用完后的网站的全量备份文件包 (必须要做)

(步骤略)

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

步骤十:在本地电脑立刻在回收站中彻底消灭完后的网站的全量备份文件包 (必须要做)

(步骤略)

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

步骤十一:在本地 WordPress 测试网站上生成静态网站

11.1 登录使用网站的全量备份文件包还原后的本地 WordPress 测试网站

在浏览器上输入 “http://local.local/login” –> 用你正式的 WordPress 网站的登录信息登录本地 WordPress 测试网站

(补充:这里以正式的 WordPress 网站的后台登录入口后缀是 login 为例,如果登录入口后缀是 wp-login.php 则这里应该输入的网址是 http://local.local/login)

(注意:这里每次输入的 “local” 绝对不能换成和正式的 WordPress 网站相同的对应值,否则你有可能会进入正式的网站上然后进行误操作然后造成不可挽回的后果)

11.2 禁用任何安全插件 (必须要做)

登录 WordPress 后台 –> Plugins –> Installed Plugins –> All-In-One Security (AIOS) –> Deactivate

(补充:这里以禁用 All-In-One Security (AIOS) 安全插件为例)

11.3 激活 Simply Static 插件

登录 WordPress 后台 –> Plugins –> Installed Plugins –> Simply Static –> Activate

11.4 在本地 WordPress 测试网站上生成静态网站

Simply Static –> Generate –> Push –> 等待 Activity Log 窗口里显示 Dong! Finished –> Click here to download

(注意:此步骤会消耗大量时间,最终会下载 1 个以 simply-static 开头的压缩包,此压缩包就是静态网站的压缩包)

11.5 检查本地电脑的垃圾箱确保静态网站的压缩包没有被删除

如果以 simply-static 开头的压缩包在垃圾箱里,则需要把移动到正式的目录里

步骤十二:在本地电脑立刻删除用完后的本地 WordPress 测试网站 (必须要做)

右键点击在 LocalWP 软件的窗口上的 local –> Delete –> 确保 Move site files to trash 前面的勾有勾上 –> Delete site

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

步骤十三:在本地电脑立刻在回收站中彻底消灭完后的本地 WordPress 测试网站 (必须要做)

(步骤略)

(补充:此步骤必须要做,目的是为了避免等会将备份文件错误的恢复到正式的 WordPress 网站上)

[内容] WordPress 网站数据去隐私化

内容一:修改登录 MariaDB 数据库的用户的密码

1.1 目的

目的是不让拿到这份 WordPress 网站数据的人知道登录数据库的用户的密码

1.2 案例

1.2.1 设置变量
1.2.1.1 要设置的变量

1) WordPress 登录 MariaDB 数据库的用户
2) 登录 MariaDB 数据库的用户的新密码

1.2.1.2 设置变量的命令
# dbuser=ec
# dbuserpw=eternalcenter
1.2.2 执行修改登录 MariaDB 数据库的用户的密码的命令
# mysql -uroot -p'eternalcenter' -e "alter user \"$dbuser\"@\"localhost\" identified by \"$dbuserpw\";"
# sudo sed -i "s/define('DB_PASSWORD', .*);/define('DB_PASSWORD', \'$dbuserpw\');/" wp-config.php

(注意:这里的 ”mysql -uroot -p’eternalcenter’ ……”“ 中 “eternalcenter“ 是指 MariaDB 数据库 root 用户的密码,需要修改成 MariaDB 数据库的 root 用户密码)

内容二:修改 MariaDB 数据库中用于登录 WordPress 网站后台的用户的密码

2.1 目的

目的是不让拿到这份 WordPress 网站数据的人知道登录网站的用户的密码,同时杜绝别人利用存储在 MariaDB 数据库中密码的 HASH 值伪造网站 Cookie 直接绕过用户和密码登录 WordPress 后台

2.2 案例

2.2.1 设置变量
1.2.1.1 要设置的变量

1) 要修改用户密码所在的库
2) 要修改用户密码所在的表
3) 要修改密码的用户
4) 此用户的新密码

1.2.1.2 设置变量的命令
# db=ec
# tb=ec_users
# user='Mingyu Zhu'
# newpw=eternalcenter
1.2.2 执行修改 MySQL 数据库中用于登录 WordPress 网站后台的用户的密码的命令
# mysql -uroot -p'eternalcenter' -e "update $db.$tb set user_pass = md5(\'$newpw\') where user_login = \'$user\';"

(注意:这里的 ”mysql -uroot -p’eternalcenter’ ……”“ 中 “eternalcenter“ 是指 MariaDB 数据库 root 用户的密码,需要修改成 MariaDB 数据库的 root 用户密码)

(补充:当他人想要伪造网站 Cookie 时至少需要 WordPress 网站文件中 AUTH_KEY 等参数的值、MariaDB 数据库中存储的密码的部分 HASH 值、以及 WordPress 网站临时生成的一个 Token,我们这里通过隐藏原网站的密码 HASH 值杜绝他人伪造网站 Cookie)

内容三:修改 WordPress 网站文件中的 AUTH_KEY 等参数的值

杜绝别人利用存储在 WordPress 网站文件的 AUTH_KEY 等参数的值伪造网站 Cookie 直接绕过用户和密码登录 WordPress 后台

3.1 在 WordPress 项目的官方网站上获得一份新的 AUTH_KEY 等参数的值

通过浏览器打开下面的网址

https://api.wordpress.org/secret-key/1.1/salt

(补充:如果网路正常,新的 AUTH_KEY 等参数的值会在浏览器中显示)

3.2 更新 WordPress 网站文件中的 AUTH_KEY 等参数的值

# vi wp-config.php

(用在步骤 3.1 中获取的新值覆盖对应的旧值,步骤略)

(补充:当他人想要伪造网站 Cookie 时至少需要 WordPress 网站文件中 AUTH_KEY 等参数的值、MariaDB 数据库中存储的密码的部分 HASH 值、以及 WordPress 网站临时生成的一个 Token,我们这里通过隐藏原网站的 AUTH_KEY 等参数的值杜绝他人伪造网站 Cookie)

[DEBUG] SUSE Repository Mirroring Tool (RMT) resolve client use SUSEConnect command output ‘Error: Registration server returned ‘Internal Server Error’ (500)’ or ‘SUSEConnect error: trying to send a keepalive from a system not yet registered. Register this system first’

Error Reporting Command

# SUSEConnect --url

or:

# SUSEConnect --de-register

Error Code

Error: Registration server returned 'Internal Server Error' (500)

or:

SUSEConnect error: trying to send a keepalive from a system not yet registered. Register this system first

Solution 1: Make sure the /tmp directory has enough space

Step One: Make sure the /tmp directory has enough space

# df -h

At this point, ensure that the directory occupancy is not 100% based on the output content.

Step Two: Restart rmt-server

# systemctl restart rmt-server

Solution 2: Change the cache directory

Step One: Make new cache directory

# mkdir /var/rmttmp

(Note: here is an example with making the new cache directory named /var/rmttmp)

Step Two: Change the owner of the new cache directory

# chown -R _rmt:nginx /var/rmttmp

(Note: here is an example with changing the owner of directory named /var/rmttmp)

Step Three: Change the

# systemctl edit rmt-server-mirror.service

Change partial content as follow:

[Service]
Environment=
Environment="LOG_TO_JOURNALD=1" "LANG=en" "TMPDIR=/var/rmttmp/"

(Note: here is an example with setting the new cache directory to /var/rmttmp/)

Step Four: Restart rmt-server-mirror.service

# systemctl daemon-reload
# systemctl restart rmt-server-mirror.service

Reference

https://support.scc.suse.com/s/kb/RMT-mirroring-fails-when-tmp-runs-out-of-disk-space?language=en_US

[DEBUG] Linux resolve at command error ‘PAM failure: Authentication service cannot retrieve authentication info’

Error Reporting Command

> at

Error Code

PAM failure: Authentication service cannot retrieve authentication info

Reason

This user which inputted at command did not have password so there is no record relate to it in /etc/shadow file.
And at command need check the record in the file /etc/shadow.
If at command can not find the user's record in /etc/shadow, it output this error code.

Solution

And password to the suer:

> passwd