La forma más rápida de aislar un error de ownCloud 10 de "Error al conectar con la base de datos" es probar la misma cuenta de MySQL, nombre de base de datos y host desde el propio servidor de ownCloud. Si el inicio de sesión falla, primero solucione la disponibilidad de MySQL, el acceso a la red, las credenciales o los permisos. Si tiene éxito, compruebe ownCloud config/config.php, la extensión de PHP pdo_mysqly si PHP está utilizando la conexión de socket o TCP prevista.
Esta guía cubre una instalación existente de ownCloud Server 10 con MySQL o MariaDB en Linux. Los nombres de los servicios y los comandos de los paquetes varían según el sistema operativo y el tipo de instalación. Realice una copia de seguridad de la configuración y la base de datos antes de modificar los ajustes de producción. Nunca comparta la contraseña de la base de datos en un problema ni la pegue en una transcripción pública de la consola.
¿Qué te indica el error?
El mensaje es un síntoma, no un diagnóstico. Lea el registro de ownCloud y el registro del servidor web o PHP en el momento del fallo. La excepción subyacente podría indicar la falta de un controlador, una conexión rechazada, un inicio de sesión denegado o una base de datos desconocida. La guía de la base de datos Linux de ownCloud requiere pdo_mysqlla extensión de PHP e indica que la configuración del socket es importante cuando MySQL es local. Recomienda probar el acceso con el cliente de línea de comandos de MySQL.
| Mensaje o pista | Zona probable para revisar |
could not find drivero un error del controlador PDO | El entorno de ejecución web PHP no está pdo_mysqlhabilitado. |
SQLSTATE[HY000] [2002]o “No se puede conectar” | MySQL está detenido, el host o el puerto son incorrectos, un cortafuegos bloquea TCP o la ruta del socket es incorrecta. |
Access denied for user | La contraseña, el host de la cuenta o la configuración de autenticación de MySQL no coinciden. |
Unknown database | El nombre de la base de datos configurada está mal escrito, falta o no es visible para la cuenta. |
Los códigos de error exactos pueden variar según las versiones de PHP, MySQL, MariaDB y el sistema operativo. Tómelos como pistas y confirme la causa con las comprobaciones que se indican a continuación. La documentación de MySQL sobre el acceso denegado señala que la coincidencia de cuenta y host son causas comunes.
¿Puede el servidor ownCloud acceder a MySQL?
Averigua si MySQL se ejecuta en el servidor ownCloud, en otra máquina o en un contenedor. En Linux, comprueba el servicio. Los nombres de unidad comunes son mysqly mariadb; usa el que esté instalado en tu servidor:
sudo systemctl status mysql
sudo systemctl status mariadb
Si está inactivo, revise el registro de errores de la base de datos o del diario antes de reiniciarlo. Un error de configuración, disco lleno, fallo en la recuperación de la base de datos o conflicto de puertos pueden impedir el inicio.
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
Sustituya el nombre del servicio según corresponda. El hecho de que un servicio esté en funcionamiento no demuestra que ownCloud pueda autenticarse; continúe con la prueba de la cuenta.
Para una base de datos remota, pruebe el DNS y el puerto TCP configurado desde el host de ownCloud. MySQL suele escuchar en el puerto 3306, aunque las implementaciones pueden usar otro puerto:
getent hosts db.example.net
nc -vz db.example.net 3306
Un error en la comprobación apunta a problemas con el DNS, el enrutamiento, el cortafuegos o la configuración del oyente de la base de datos. Permita las conexiones únicamente desde el servidor ownCloud a través de una red privada, siempre que sea posible. No exponga MySQL a internet pública como acceso directo.
¿La cuenta de base de datos funciona desde el servidor de ownCloud?
Ejecute el cliente MySQL en el servidor de aplicaciones con el mismo nombre de base de datos, usuario y host de destino que debería usar ownCloud. Esta -popción solicita la contraseña de forma privada, evitando así tener que introducirla en el propio comando.
mysql -u oc_app -p -h localhost owncloud
Para una base de datos remota, reemplácela localhostcon su nombre de host. Si el inicio de sesión funciona, ejecute una verificación inofensiva:
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
Esto confirma la autenticación básica y el acceso a la base de datos seleccionada. Si falla, lea el error exacto y el nombre de usuario/host que MySQL reporta. MySQL trata el nombre de usuario y el host conjuntamente al asociar una cuenta. Tenga en cuenta también que localhosten Linux se suele usar un socket Unix, mientras que 127.0.0.1se fuerza TCP. Pruebe el mismo método de conexión que utiliza su configuración de ownCloud:
mysql -u oc_app -p -h 127.0.0.1 owncloud
¿Son correctas las configuraciones de la base de datos de ownCloud?
Inspeccione los archivos activos config/config.phpen el directorio de instalación de ownCloud. La referencia de configuración de ownCloud enumera el tipo de base de datos, el nombre, el usuario y la configuración de contraseña; su guía de base de datos también muestra el host y el prefijo de la tabla. Una configuración típica de MySQL se asemeja a:
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
Verifique si hay errores ortográficos, espacios en blanco accidentales, contraseñas obsoletas, nombres de bases de datos con mayúsculas incorrectas o un host que apunte al servidor equivocado. Conserve el resto del archivo, incluyendo el secreto de instancia y el directorio de datos. No reemplace toda la configuración con este ejemplo.
Tras editar el archivo, confirme que es un archivo PHP válido utilizando el binario de PHP de su instalación:
php -l /var/www/owncloud/config/config.php
La ruta de instalación puede variar. Restrinja el acceso a config.php; contiene credenciales de base de datos y otros valores confidenciales.
¿Está habilitado el controlador MySQL de PHP para la aplicación web?
La guía de la base de datos de ownCloud 10 requiere pdo_mysql. Compruebe la versión de PHP y los módulos cargados:
php -v
php -m | grep -i pdo_mysql
Si falta el módulo, instale el paquete MySQL PDO correspondiente a su versión de PHP y, a continuación, reinicie o recargue el servidor web o el grupo de PHP-FPM. Los nombres de los paquetes varían según Ubuntu, Debian, SUSE, Red Hat y las imágenes de contenedores. Un módulo habilitado para PHP de línea de comandos puede no estar habilitado para Apache o PHP-FPM, por lo que también debe verificar la configuración de PHP del entorno de ejecución web. Evite dejar una página de diagnóstico pública que revele información de configuración de PHP.
¿Podría ser que la configuración del socket o del host sea incorrecta?
En Linux, un cliente MySQL puede usar un socket Unix para localhost, mientras que 127.0.0.1usa TCP. Si MySQL está en la misma máquina, compruebe si PHP mysql.default_socketapunta al archivo de socket que crea el servidor de base de datos. Compare la configuración de socket y puerto del servidor de base de datos con la configuración de PHP y el valor de host de ownCloud.
Si MySQL es remoto, localhostse refiere a la máquina ownCloud, no al servidor de la base de datos. Configure el nombre de host de la base de datos accesible y asegúrese de que MySQL escuche en la interfaz prevista. Un cortafuegos o una configuración de acceso solo local bind-addresspueden impedir el acceso remoto incluso cuando los comandos locales de la base de datos funcionan. Restrinja el acceso a la dirección privada del servidor de la aplicación.
¿Coinciden la cuenta MySQL y los permisos con los del host del cliente?
Las cuentas MySQL incluyen un nombre de usuario y un componente de host. Por lo tanto, 'oc_app'@'localhost'y 'oc_app'@'10.0.0.25'son entradas de cuenta diferentes. Utilice una conexión administrativa para inspeccionar las cuentas disponibles y los permisos de la cuenta que deberían coincidir:
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
Si la cuenta no existe y la base de datos ya está creada, cree una cuenta dedicada y otórguele privilegios únicamente en la base de datos de ownCloud. Reemplace la base de datos, el host y la contraseña de ejemplo con sus valores reales:
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
Para una base de datos remota, utilice el host real del servidor de aplicaciones en la definición de la cuenta. Evite usar un host comodín o privilegios globales como solución rápida y no ejecute ownCloud como root de MySQL. Si la cuenta ya existe, revise sus permisos y restablezca la contraseña de forma deliberada en lugar de crear cuentas duplicadas. Vuelva a probar el inicio de sesión desde el servidor ownCloud.
¿Cómo se confirma la reparación?
Tras modificar un elemento a la vez, confirme que el mismo inicio de sesión de línea de comandos de MySQL funciona desde el host de ownCloud, que el entorno de ejecución web PHP está configurado correctamente pdo_mysqly que el registro de ownCloud ya no registra ninguna excepción de conexión. Recargue el sitio y realice una operación básica de lectura y escritura solo después de que la instancia vuelva a estar disponible.
Si el inicio de sesión por línea de comandos se realiza correctamente, pero ownCloud sigue fallando, compare el formulario de host, la cuenta, el nombre de la base de datos y el entorno de ejecución de PHP utilizados por el proceso web con los de la prueba que funciona. Revise los registros del servidor web o de PHP-FPM en el momento de la solicitud. Si el servidor ya está instalado, repare su configuración con cuidado; no elimine la base de datos ni vuelva a instalarla como solución rápida.
Para más información, consulte la guía de configuración y solución de problemas de la base de datos de ownCloud Server 10.16 , la referencia de configuración de ownCloud 10.15 y las guías oficiales de MySQL sobre solución de problemas de conexión y errores de acceso denegado . Los nombres de los servicios, los comandos de los paquetes y la configuración exacta dependen de su sistema operativo y de la implementación.