博客备份的一些测试-Rsync同步及MySQL用户授权

实验目的

将云服务器的网站备份到本地,打算用rsync来同步

实验环境

云服务器centos7.9,本地环境centos7.9,本地已搭建好和云服务器一模一样的LNMP环境。

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@localhost ~]# mysql -V
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
[root@localhost ~]# php-fpm -v
PHP 5.4.16 (fpm-fcgi) (built: Apr  1 2020 04:09:12)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@localhost ~]# nginx -v
nginx version: nginx/1.20.1

安装rsync软件

博客网站的文章是储存在MySQL数据库里面的,而图片则是储存在网站的文件里面的。如果网站有最新的文章但是缩略图转圈圈,或者是文章内部图片只有个.jpg的名字不显示图片,说明网站的根目录文件不是最新的,网站文件没有同步过来或者有文件丢失。nginx安装完先把nginx.conf备份一个,完全不修改而直接在conf.d下面新建blog.conf文件是可行的,如果打开网站显示403,那就是nginx配置的网站根目录位置不对或者路径对但是里面没文件。

yum install rsync -y

云服务器器端和本地端都要安装

rsync -avz -e 'ssh -p 12345' root@ip地址:/usr/share/nginx/html/web/* /usr/share/nginx/html/web/

将云服务器的网站根目录/usr/share/nginx/html/web/* 同步到本地nginx配置文件里定义的根目录/usr/share/nginx/html/web/下,-e 'ssh -p 12345'表示用ssh协议,-p表示端口,如果ssh是默认22端口就不用-p选项,和scp很像,同步的源写前面,目的地写后面。

将源服务器的数据库备份目录同步到本地

rsync -avz -e 'ssh -p 12345' root@ip:/backup/web /backup

同步的同时删除源目录已经不存在而本地还存在的文件,--delete 加-n选项可以显示将要执行的操作,但不会实际执行同步,确认无误后去掉-n

rsync -avz --delete -e 'ssh -p 12345' root@149.129.101.112:/backup/web /backup

同步完成后导入数据库刷新下网站就好了。

MySQL授权

数据库新建用户和授权,在本地创建一个和云服务器一样的shuju用户名

mysql -u root -p
use mysql;
CREATE USER 'shuju'@'localhost' IDENTIFIED BY 'abc@12345';
GRANT all privileges ON *.* TO 'shuju'@'localhost';
update user set password=password('passwd123') where user='shuju' and host='localhost';
flush privileges;

上一步不小心给了shuju用户所有的权限,几乎和root用户一样了,这是不安全的需要撤销重新授权

mysql -u root -p

root用户登录查询授权

MariaDB [(none)]> SHOW GRANTS FOR 'shuju'@'localhost';
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for shujuku@localhost                                                                                            |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'shuju'@'localhost' IDENTIFIED BY PASSWORD '*BC968A5F41120A92FCEC2E41F16F12C273ED5C8C' |
+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

撤销所有授权

MariaDB [(none)]> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'shuju'@'localhost';
Query OK, 0 rows affected (0.00 sec)

重新授权,只对info数据库有增删查改的权限,如果还有其他数据库需要给shuju用户授权就再写一条。

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON info.* TO 'shuju'@'localhost';
Query OK, 0 rows affected (0.00 sec)

刷新权限,使新的规则生效

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

再次查看用户的授权情况

MariaDB [(none)]> SHOW GRANTS FOR 'shuju'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for shujuku@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'shuju'@'localhost' IDENTIFIED BY PASSWORD '*BC968A5F41120A92FCEC2E41F16F12C273ED5C8C' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `info`.* TO 'shuju'@'localhost'                               |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

简化同步步骤

把命令写到shell脚本,免得下次忘记

vim rsync.sh
#!/bin/bash
rsync -avz -e 'ssh -p 12345' root@149.123.123.123:/usr/share/nginx/html/web/*  /usr/share/nginx/html/web/


chmod + x rsync.sh
./rsync.sh

脚本运行之后只用输入下密码就好了

免密码输入同步

生成秘钥,因为脚本用的sudo,所以必须用sudo生成密钥,否则运行sudo的脚本还是需要手动输入密码

sudo ssh-keygen

复制秘钥到需要同步的服务器

sudo ssh-copy-id -p 12345 root@149.129.123.123

验证是否不需要密码了

sudo ssh -p 12345 root@149.129.123.123

此时再运行rsync脚本就不需要输入密码了

最后编辑于:2023/07/11作者: admin

发表评论