Nextcloud version (eg, 12.0.2): 17.0.2.1
Operating system and version (eg, Ubuntu 17.04): probably Ubuntu 18.04
Apache or nginx version (eg, Apache 2.4.25): unknown (running on a shared hosting)
PHP version (eg, 7.1): 7.3.1
The issue I am facing:
I created a NextCloud instance for an association I am in charge. I installed it and we started using it. I thought it was using MySQL but I recently noticed it was not. This is why I wanted to convert the database to MySQL from sqlite. We are already more than 10 users on this instance !
I created a MySQL database on the shared server provider interface and could connect to it with the mysql
command (or equivalent) with the defined credentials, from several addresses. I tried to convert the database with php occ db:convert-type mysql nextcloud-u mydomain.tld:3306 nextcloud-db
but I got an error with the following stacktrace:
An unhandled exception has been thrown:
Doctrine\DBAL\DBALException: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [14] unable to open database file in /path/lib/private/DB/Connection.php:64
Stack trace:
#0 /path/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(1040): OC\DB\Connection->connect()
#1 /path/lib/private/DB/Connection.php(216): Doctrine\DBAL\Connection->executeUpdate('PRAGMA read_unc...', Array, Array)
#2 /path/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(683): OC\DB\Connection->executeUpdate('PRAGMA read_unc...')
#3 /path/lib/private/DB/Connection.php(151): Doctrine\DBAL\Connection->setTransactionIsolation(2)
#4 /path/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php(195): OC\DB\Connection->__construct(Array, Object(Doctrine\DBAL\Driver\PDOSqlite\Driver), Object(Doctrine\DBAL\Configuration), Object(Doctrine\Common\EventManager))
#5 /path/lib/private/DB/ConnectionFactory.php(156): Doctrine\DBAL\DriverManager::getConnection(Array, Object(Doctrine\DBAL\Configuration), Object(Doctrine\Common\EventManager))
#6 /path/lib/private/Server.php(635): OC\DB\ConnectionFactory->getConnection('sqlite3', Array)
#7 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#8 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OCP\\IDBConnecti...')
#9 /path/lib/private/AppFramework/Utility/SimpleContainer.php(161): OC\ServerContainer->query('OCP\\IDBConnecti...')
#10 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(114): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#11 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('DatabaseConnect...')
#12 /path/lib/private/Server.php(1554): OC\ServerContainer->query('DatabaseConnect...')
#13 /path/lib/private/Server.php(362): OC\Server->getDatabaseConnection()
#14 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#15 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OC\\Authenticati...')
#16 /path/lib/private/AppFramework/Utility/SimpleContainer.php(69): OC\ServerContainer->query('OC\\Authenticati...', true)
#17 /path/lib/private/AppFramework/Utility/SimpleContainer.php(99): OC\AppFramework\Utility\SimpleContainer->buildClass(Object(ReflectionClass))
#18 /path/lib/private/AppFramework/Utility/SimpleContainer.php(114): OC\AppFramework\Utility\SimpleContainer->resolve('OC\\Authenticati...')
#19 /path/lib/private/ServerContainer.php(145): OC\AppFramework\Utility\SimpleContainer->query('OC\\Authenticati...', true)
#20 /path/lib/private/AppFramework/Utility/SimpleContainer.php(69): OC\ServerContainer->query('OC\\Authenticati...', true)
#21 /path/lib/private/AppFramework/Utility/SimpleContainer.php(99): OC\AppFramework\Utility\SimpleContainer->buildClass(Object(ReflectionClass))
#22 /path/lib/private/AppFramework/Utility/SimpleContainer.php(114): OC\AppFramework\Utility\SimpleContainer->resolve('OC\\Authenticati...')
#23 /path/lib/private/ServerContainer.php(145): OC\AppFramework\Utility\SimpleContainer->query('OC\\Authenticati...', true)
#24 /path/lib/private/AppFramework/Utility/SimpleContainer.php(161): OC\ServerContainer->query('OC\\Authenticati...')
#25 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(114): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#26 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OC\\Authenticati...')
#27 /path/lib/private/Server.php(374): OC\ServerContainer->query('OC\\Authenticati...')
#28 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#29 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OC\\User\\Session')
#30 /path/lib/private/AppFramework/Utility/SimpleContainer.php(161): OC\ServerContainer->query('OC\\User\\Session')
#31 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(114): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#32 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('UserSession')
#33 /path/lib/private/Server.php(1437): OC\ServerContainer->query('UserSession')
#34 /path/lib/private/Server.php(1028): OC\Server->getSession()
#35 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#36 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OC\\Security\\CSR...')
#37 /path/lib/private/Server.php(1023): OC\ServerContainer->query('OC\\Security\\CSR...')
#38 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#39 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OC\\Security\\CSR...')
#40 /path/lib/private/Server.php(1900): OC\ServerContainer->query('OC\\Security\\CSR...')
#41 /path/lib/private/Server.php(823): OC\Server->getCsrfTokenManager()
#42 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#43 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OCP\\IRequest')
#44 /path/lib/private/AppFramework/Utility/SimpleContainer.php(161): OC\ServerContainer->query('OCP\\IRequest')
#45 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(114): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#46 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('Request')
#47 /path/lib/private/Server.php(1304): OC\ServerContainer->query('Request')
#48 /path/lib/private/Server.php(466): OC\Server->getRequest()
#49 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\Server->OC\{closure}(Object(OC\Server))
#50 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('OCP\\L10N\\IFacto...')
#51 /path/lib/private/AppFramework/Utility/SimpleContainer.php(161): OC\ServerContainer->query('OCP\\L10N\\IFacto...')
#52 /path/3rdparty/pimple/pimple/src/Pimple/Container.php(114): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#53 /path/lib/private/ServerContainer.php(120): Pimple\Container->offsetGet('L10NFactory')
#54 /path/lib/private/Server.php(1490): OC\ServerContainer->query('L10NFactory')
#55 /path/lib/private/Server.php(1501): OC\Server->getL10NFactory()
#56 /path/lib/base.php(234): OC\Server->getL10N('lib')
#57 /path/lib/base.php(645): OC::checkConfig()
#58 /path/lib/base.php(1078): OC::init()
#59 /path/console.php(46): require_once('/path...')
#60 /path/occ(11): require_once('/path...')
#61 {main}
I represented the address of the database in multiple ways: with 127.0.0.1, localhost and by adding the port with “:3306:” in the end. None if this worked.
I checked the database was correctly set up and reachable by starting a docker nextcloud instance. I could install NextCloud using this MySQL database and use it normally.
However, when trying to migrate from sqlite to MySQL, I cannot make it work for some reason.
Is this the first time I’ve seen this error? (Y/N): Y
Steps to replicate it:
- Create a new nextcloud instance
- Add files and a bunch of users
- Use the command
php occ db:convert-type mysql nextcloud-u 127.0.0.1:3306 nextcloud-db
to migrate from sqlite to mysql.
The output of my Nextcloud log in Admin > Logging:
Not relevant, nothing came up.
The output of my config.php file in /path/to/nextcloud
:
<?php
$CONFIG = array (
'instanceid' => '...',
'passwordsalt' => '...',
'secret' => '...',
'trusted_domains' =>
array (
0 => '...',
),
'datadirectory' => '/path/httpdocs/data',
'overwrite.cli.url' => 'http://mydomain.tld',
'dbtype' => 'sqlite3',
'version' => '17.0.2.1',
'logtimezone' => 'UTC',
'installed' => true,
'mail_from_address' => 'nextcloud',
'mail_smtpmode' => 'sendmail',
'mail_domain' => 'mydomain.tld',
'maintenance' => false,
'theme' => '',
'loglevel' => 2,
'mail_sendmailmode' => 'smtp',
'mail_smtpsecure' => 'ssl',
'updater.secret' => '...',
);
The output of my Apache/nginx/system log in /var/log/____
:
Not relevant, nothing came up.
Thank you in advance for your assistance!