V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
programV2
V2EX  ›  程序员

Rsync 搭建小成本灾备系统,遇到个诡异问题求助(docker 搭建多站点

  •  
  •   programV2 · 2020-11-09 19:15:27 +08:00 · 1458 次点击
    这是一个创建于 1467 天前的主题,其中的信息可能已经有所发展或是发生改变。

    排查了两天了,也 google 了一大圈实在没有头绪, 来求助大家帮忙指点

    背景: 在 bwg 上买了两台 vps, 在 vps A 上利用 docker 搭建了 drupal 多站点, 网站 1 abc.com 和网站 2 efg.com 都运转正常, 然后我利用 bwg 的 snapchat 将 vps A 上的镜像导入到 vps B, 然后再利用 rsync 建立增量同步, 将 vps A 的内容用定时任务同步到 VPS B, 我也确认了 vpsA 上宿主机和容器内的文件创建者的 uid gid 都和 vps B 上的一致, 然后问题来了:我将网站 1 和 2 的 dns 都指向 VPS B,发现只有网站 1 能顺利打开并访问, 网站 2 却出现"An error occurred.Sorry, the page you are looking for is currently unavailable.Please try again later." 错误, 我进去网站查看日志报错信息如下:

    2020/11/09 10:57:29 [error] 6#6: *72 FastCGI sent in stderr: "PHP message: PDOException: SQLSTATE[HY000] [1044] Access denied for user 'drupal'@'%' to database 'abc' in /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php on line 79 #0 /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(149): PDO->__construct('mysql:host=drup...', 'drupal', '123456789', Array) #1 /var/www/html/core/lib/Drupal/Core/Database/Database.php(376): Drupal\Core\Database\Driver\mysql\Connection::open(Array) #2 /var/www/html/core/lib/Drupal/Core/Database/Database.php(166): Drupal\Core\Database\Database::openConnection('default', 'default') #3 [internal function]: Drupal\Core\Database\Database::getConnection('default') #4 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\Core\Dat...', Array) #5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\Component\DependencyInjection\PhpArrayContainer->createService(Array, 'database') #6 /var/ww" while reading response header from upstream, client: 104.160.45.251, server: www.abc.com, request: "GET /user/login HTTP/1.1", upstream: "fastcgi://172.18.0.2:9000", host: "www.abc.com"

    从日志上看像是数据库访问被拒绝了, 我到 settting.php 确认数据库登录信息都正确的, 并且我还登录 mysql 删除了原来的数据库,新建一个数据库,重启更新 setting 后, 日志里还是一样的出错信息, 请教 V 友们这个有可能是哪个环节出问题了呢? 确认了目录和文件的所有者及权限都与 VPS A 一样, 为什么网站 2 在 vpsA 可运转, 在 vpsB 就不行了, 而且网站 1 却是在不论是 vps A 或 B 都正常, 我这种 rsync 的方法没问题, 所以问题就出在网站 2 了, 但是网站 2 的相关配置文件我也检查过了, 我用的 drupal8, Drupal 比 Wordpress 和 Magento 好的一点在于,绝对的域名和路径设置信息没有保存在数据库中,我们迁移到新的网站后,不需要修改保存在数据库里的配置信息。所以问题也不会是数据库了, 但是为什么数据库的用户名 密码 主机名都正确还是登录不了呢? 显示 access denied

    求助大家指点一下, 谢谢!

    5 条回复    2020-11-10 18:04:36 +08:00
    programV2
        1
    programV2  
    OP
       2020-11-09 19:31:43 +08:00
    另外 我两个网站的配置都是写在同一个 nginx.conf 文件里, 但是都是分开写, 像
    server { ...... access_log /var/log/nginx/abc.com.access.log;
    }
    server { ...... access_log /var/log/nginx/efg.com.access.log;
    }

    但是只有网站 abc.com 的生成日志文件了并且写入, 网站 efg 的没有生成相应名称的日志文件, 反而所有日志都写入到网站 abc 的 abc.com.access.log 里, 请问为什么网站 B 的 access_log 配置没有生效呢?
    再次感谢 大家的回复
    programV2
        2
    programV2  
    OP
       2020-11-09 19:51:41 +08:00 via iPhone
    补充:网站 abc 和网站 efg 有各自的独立数据库。 因为 docker compose 参数只能创建一个数据库,所以第二个网站的数据库,是我之后登录数据库容器手动创建的。
    laminux29
        3
    laminux29  
       2020-11-09 20:53:47 +08:00   ❤️ 1
    你的问题,对系统做一次全量对比,就能找出问题所在。

    不过你这种镜像方法很迷,一个动态系统,其状态与各种数据是随时变化,而 rsync 这种备份方法属于静态的,备份出来的数据,对于动态系统来说,很容易会出现数据丢失、数据错误等各种奇奇怪怪的问题。

    动态系统备份只有两种办法,第一种是把整个系统包括数据库,全部停止后,再进行备份或镜像。第二种需要系统内部支持运行时备份。如果系统内部不支持运行时备份,你就没办法不出错地对动态系统进行运行时备份,包括虚拟机级的快照这种方法也不行。
    programV2
        4
    programV2  
    OP
       2020-11-09 21:28:55 +08:00 via iPhone
    @laminux29 感谢🙏您的回复!你能看一下我一楼的回复吗?. 为什么网站 2 在 vpsA 可运转, 在 vpsB 就不行了, 而且网站 1 却不论是 vps A 或 B 都正常, 我这种 rsync 的方法应该没问题,不然网站 1 就不可能正常运转. 所以问题就出在网站 2 了, 但是网站 2 的相关配置文件我也检查过了, 我用的 drupal8, Drupal 比 Wordpress 和 Magento 好的一点在于,绝对的域名和路径设置信息没有保存在数据库中,我们迁移到新的网站后,不需要修改保存在数据库里的配置信息。所以问题也不会是数据库了, 但是为什么数据库的用户名 密码 主机名都正确还是登录不了呢? 显示 access denied
    @laminux29
    programV2
        5
    programV2  
    OP
       2020-11-10 18:04:36 +08:00
    @laminux29 V 友好 请问我在同一个 mysql 容器创建了两个数据库(第一个数据库是用 docker-compose.yml, 第二个是后面登录容器手动创建的, 为什么第一个网站成功运行, 第二个却数据库连接出错, 但是我确认用户名 密码信息都是正确的, 数据库 host 也跟第一个数据库一样, 这是报错日志 , 谢谢大家帮忙指点一下,

    2020/11/09 10:57:29 [error] 6#6: *72 FastCGI sent in stderr: "PHP message: PDOException: SQLSTATE[HY000] [1044] Access denied for user 'drupal'@'%' to database 'abc' in /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php on line 79 #0 /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(149): PDO->__construct('mysql:host=drup...', 'drupal', '123456789', Array) #1 /var/www/html/core/lib/Drupal/Core/Database/Database.php(376): Drupal\Core\Database\Driver\mysql\Connection::open(Array) #2 /var/www/html/core/lib/Drupal/Core/Database/Database.php(166): Drupal\Core\Database\Database::openConnection('default', 'default') #3 [internal function]: Drupal\Core\Database\Database::getConnection('default') #4 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\Core\Dat...', Array) #5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\Component\DependencyInjection\PhpArrayContainer->createService(Array, 'database') #6 /var/ww" while reading response header from upstream, client: 104.160.45.251, server: www.abc.com, request: "GET /user/login HTTP/1.1", upstream: "fastcgi://172.18.0.2:9000", host: "www.abc.com"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 485ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.