LXC Proxmox Restore breaks Bookstack: PHP Fatal Error - connector.php missing
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
- Have Ubuntu 20.04 bookstack LXC
- Backup
- Restore
- 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
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.
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!
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.