BookStack icon indicating copy to clipboard operation
BookStack copied to clipboard

LXC Proxmox Restore breaks Bookstack: PHP Fatal Error - connector.php missing

Open tunloop opened this issue 3 years ago • 2 comments

Describe the Bug

When running Ubuntu 20.04 in an LXC on Proxmox 7.2-7 and attempt to restore to earlier known working backups, the restored LXC breaks and web access is unavailable due to a PHP error with an apparent lost file "/var/www/bookstack/vdenor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php" Apache and PHP are running without error.

Steps to Reproduce

  1. Have Ubuntu 20.04 bookstack LXC
  2. Backup
  3. Restore
  4. PHP Broke

Expected Behaviour

Web Access to be accessible and PHP to function after LXC restore.

Screenshots or Additional Context

All Logs:

# /var/log/apache2/error.log
[Tue Aug 09 21:03:43.142070 2022] [php7:error] [pid 153] [client 192.168.0.2:40292] PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70\nStack trace:\n#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()\n#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()\n#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()\n#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()\n#4 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()\n#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1064): call_user_f in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 712
[Tue Aug 09 21:03:43.142985 2022] [php7:error] [pid 153] [client 192.168.0.2:40292] PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70\nStack trace:\n#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()\n#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()\n#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()\n#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()\n#4 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()\n#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1064): call_user_f in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 712


# /var/log/apache2/access.log 
192.168.0.2 - - [09/Aug/2022:21:03:42 -0400] "GET / HTTP/1.1" 500 3077 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"

# /var/www/bookstack/storage/logs/laravel.log # TRUNCATED DUE TO SIZE LIMITS

[previous exception] [object] (Illuminate\\Database\\QueryException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `users` where `system_name` = public limit 1) at /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:712)
[stacktrace]
#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(672): Illuminate\\Database\\Connection->runQueryCallback()
#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(376): Illuminate\\Database\\Connection->run()
#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2414): Illuminate\\Database\\Connection->select()
#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2402): Illuminate\\Database\\Query\\Builder->runSelect()
#4 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2936): Illuminate\\Database\\Query\\Builder->Illuminate\\Database\\Query\\{closure}()
#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2403): Illuminate\\Database\\Query\\Builder->onceWithColumns()
#6 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(625): Illuminate\\Database\\Query\\Builder->get()
#7 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(609): Illuminate\\Database\\Eloquent\\Builder->getModels()
#8 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php(294): Illuminate\\Database\\Eloquent\\Builder->get()
#9 /var/www/bookstack/app/Auth/User.php(99): Illuminate\\Database\\Eloquent\\Builder->first()
#10 /var/www/bookstack/app/helpers.php(38): BookStack\\Auth\\User::getDefault()
#11 /var/www/bookstack/app/Settings/SettingService.php(82): user()
#12 /var/www/bookstack/storage/framework/views/58966642253d57ffe4f154d44ae65835f6011243.php(4): BookStack\\Settings\\SettingService->getForCurrentUser()
#13 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(107): require('/var/www/bookst...')
#14 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(108): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#15 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#16 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#17 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\\View\\Engines\\CompilerEngine->get()
#18 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#19 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#20 /var/www/bookstack/storage/framework/views/444e2e0a8c776f8bed9002e3000a037539df392e.php(16): Illuminate\\View\\View->render()
#21 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(107): require('/var/www/bookst...')
#22 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(108): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#23 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#24 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#25 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\\View\\Engines\\CompilerEngine->get()
#26 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#27 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#28 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\\View\\View->render()
#29 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\\Http\\Response->setContent()
#30 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(55): Illuminate\\Http\\Response->__construct()
#31 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(85): Illuminate\\Routing\\ResponseFactory->make()
#32 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(585): Illuminate\\Routing\\ResponseFactory->view()
#33 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(490): Illuminate\\Foundation\\Exceptions\\Handler->renderHttpException()
#34 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(356): Illuminate\\Foundation\\Exceptions\\Handler->prepareResponse()
#35 /var/www/bookstack/app/Exceptions/Handler.php(66): Illuminate\\Foundation\\Exceptions\\Handler->render()
#36 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(427): BookStack\\Exceptions\\Handler->render()
#37 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(115): Illuminate\\Foundation\\Http\\Kernel->renderException()
#38 /var/www/bookstack/public/index.php(53): Illuminate\\Foundation\\Http\\Kernel->handle()
#39 {main}

[previous exception] [object] (PDOException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory at /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)
[stacktrace]
#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()
#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()
#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()
#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()
#4 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1064): call_user_func()
#6 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1100): Illuminate\\Database\\Connection->getPdo()
#7 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(442): Illuminate\\Database\\Connection->getReadPdo()
#8 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(368): Illuminate\\Database\\Connection->getPdoForSelect()
#9 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(705): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}()
#10 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(672): Illuminate\\Database\\Connection->runQueryCallback()
#11 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(376): Illuminate\\Database\\Connection->run()
#12 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2414): Illuminate\\Database\\Connection->select()
#13 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2402): Illuminate\\Database\\Query\\Builder->runSelect()
#14 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2936): Illuminate\\Database\\Query\\Builder->Illuminate\\Database\\Query\\{closure}()
#15 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2403): Illuminate\\Database\\Query\\Builder->onceWithColumns()
#16 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(625): Illuminate\\Database\\Query\\Builder->get()
#17 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(609): Illuminate\\Database\\Eloquent\\Builder->getModels()
#18 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php(294): Illuminate\\Database\\Eloquent\\Builder->get()
#19 /var/www/bookstack/app/Auth/User.php(99): Illuminate\\Database\\Eloquent\\Builder->first()
#20 /var/www/bookstack/app/helpers.php(38): BookStack\\Auth\\User::getDefault()
#21 /var/www/bookstack/app/Settings/SettingService.php(82): user()
#22 /var/www/bookstack/storage/framework/views/58966642253d57ffe4f154d44ae65835f6011243.php(4): BookStack\\Settings\\SettingService->getForCurrentUser()
#23 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(107): require('/var/www/bookst...')
#24 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(108): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#25 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#26 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#27 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\\View\\Engines\\CompilerEngine->get()
#28 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#29 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#30 /var/www/bookstack/storage/framework/views/444e2e0a8c776f8bed9002e3000a037539df392e.php(16): Illuminate\\View\\View->render()
#31 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(107): require('/var/www/bookst...')
#32 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(108): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#33 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#34 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#35 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\\View\\Engines\\CompilerEngine->get()
#36 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#37 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#38 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\\View\\View->render()
#39 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\\Http\\Response->setContent()
#40 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(55): Illuminate\\Http\\Response->__construct()
#41 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(85): Illuminate\\Routing\\ResponseFactory->make()
#42 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(585): Illuminate\\Routing\\ResponseFactory->view()
#43 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(490): Illuminate\\Foundation\\Exceptions\\Handler->renderHttpException()
#44 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(356): Illuminate\\Foundation\\Exceptions\\Handler->prepareResponse()
#45 /var/www/bookstack/app/Exceptions/Handler.php(66): Illuminate\\Foundation\\Exceptions\\Handler->render()
#46 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(427): BookStack\\Exceptions\\Handler->render()
#47 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(115): Illuminate\\Foundation\\Http\\Kernel->renderException()
#48 /var/www/bookstack/public/index.php(53): Illuminate\\Foundation\\Http\\Kernel->handle()
#49 {main}
"} 
[2022-08-10 01:03:43] production.ERROR: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Stack trace:
#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()
#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\Database\Connectors\Connector->createPdoConnection()
#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\Database\Connectors\Connector->createConnection()
#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\Database\Connectors\MySqlConnector->connect()
#4 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}()
#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1064): call_user_f {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0): Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Stack trace:
#0 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()
#1 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()
#2 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()
#3 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()
#4 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#5 /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1064): call_user_f at /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:712)
[stacktrace]
#0 {main}
"} 

Browser Details

Chrome 104

Exact BookStack Version

v21.08

PHP Version

7.4

Hosting Environment

Ubuntu 20.04 LXC on Proxmox 7.2

tunloop avatar Aug 10 '22 01:08 tunloop

Hi @erasedhammer99,

The error shown is not stating that the Connector.php file itself is missing, that's just where the error is being generated from. The real error is that BookStack does not have valid access to the database, or the expected database and tables are missing. What exactly is going wrong will really depend on your backup/restore process, I'd need more insight on your process to provide any more assistance. Your .env file database details will need to be valid for the current database.

ssddanbrown avatar Aug 10 '22 07:08 ssddanbrown

It seems that mysql crashes after a few seconds after being started. I hadn't noticed. The error was that the /var/log/mysql/error.log had the wrong permissions, it was owned by root:root so mysql couldn't write to it.

Whats strange is that this was a FULL restore from Proxmox. I have no clue why a working backup would be in a different state than when the backup snapshot was taken. But I suppose this may be an issue more suited for a proxmox help forum. But thank you anyways!

tunloop avatar Aug 10 '22 13:08 tunloop

Strange, have recently seen a lot of odd behaviour with LXC containers when it comes to running them on ZFS storage.

Happy to help though, will therefore close this off.

ssddanbrown avatar Aug 10 '22 16:08 ssddanbrown