实验目的
将云服务器的网站备份到本地,打算用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脚本就不需要输入密码了
发表评论