eric molinero
Tengo un servidor WordPress (php-fpm/nginx), totalmente nuevo. Ejecutándose en CentOS. También tengo un contenedor docker, creado a partir de la imagen del servidor mysql de vainilla.
Configuración MySQL
se está ejecutando en el puerto 3306
y todos los usuarios de MySQL están registrados en MySQL con host 172.17.0.1
(p.ej root@172.17.0.1
), que es la IP de la puerta de enlace de Docker. El contenedor acoplable se instala mediante un libro de jugadas ansible. Todos los ajustes de configuración están parametrizados, y esos parámetros se usan en todos los lugares apropiados, incluido el archivo de configuración de WordPress y las variables de entorno que completan cosas como la contraseña de root durante la instalación de la ventana acoplable de MySQL. Aquí es donde configuro la base de datos relevante:
Configuración de WordPress:
Esto está en dos partes, de las cuales incluiré las relevantes. En mi libro de jugadas ansible, este código configura la tabla y el usuario de WordPress (con éxito):
- name: Create WordPress database
mysql_db:
name: '{{ wp_db_name }}'
state: present
login_user: root
login_password: '{{ mysql_root_password }}'
login_host: '{{ docker_mysql_ip }}'
- name: Create WordPress database user
mysql_user:
name: '{{ wp_db_user }}'
password: '{{ wp_db_password }}'
priv: '{{ wp_db_name }}.*:ALL'
state: present
login_user: root
host: '{{ docker_gateway_ip }}'
login_password: '{{ mysql_root_password }}'
login_host: '{{ docker_mysql_ip }}'
Y el importante wp-config.php:
define('DB_NAME', 'wordpress');
define('DB_USER', '{{ wp_db_user }}');
define('DB_PASSWORD', '{{ wp_db_password }}');
define('DB_HOST', '{{ docker_mysql_ip }}');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
Cuando navego a wp-admin, el problema especifico declarado es “Warning: mysql_connect(): Permission denied in /srv/wordpress/wp-includes/wp-db.php on line 1473
“, titulado “Error al establecer una conexión con la base de datos”, código de estado 500.
La parte confusa
Cuando reviso el archivo wp-config.php, el nombre de usuario, la contraseña y el nombre de la base de datos son exactamente como deberían ser. Cuando copio/pego el host, el usuario y la contraseña de wp-config.php
en sus ubicaciones respectivas en la línea de comando (por ejemplo, mysql -u wordpress -p -h 172.17.0.2
), puedo conectarme y ver la base de datos de WordPress.
Para resumir
MySQL puede conectarse correctamente cuando se usa la línea de comando, pero WordPress no puede hacerlo. Tampoco estoy muy familiarizado con WordPress o PHP, por lo que agradecería cualquier idea sobre dónde podrían ubicarse los registros relevantes para el problema.
Acabo de tener este problema en Debian 9.1 usando MariaDB, pero debería ser igual en Oracle MySQL. Podía iniciar sesión fácilmente desde la línea de comandos, pero PHP no podía acceder a la base de datos.
Me tomó unos minutos darme cuenta, pero recordé cuando solía usar Arch Linux en un servidor antiguo (una idea tonta por cierto) que el comando mysql_secure_installation
era necesario para que aceptara conexiones.
Pruébalo, esto funcionó para mí.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] n
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Esto no debería apuntar a localhost:
define('DB_HOST', '127.0.0.1:{{ mysql_port }}');
– Roberto
21 de junio de 2017 a las 21:46
Lo siento. Escribí esto en 3 sesiones y olvidé actualizar mis cambios a wp-config.php. Editado.
–Eric Miller
22 de junio de 2017 a las 1:20
¿El host de CentOS ejecuta SELinux? De forma predeterminada, es posible que no se permita establecer una conexión TCP con MySQL. Controlar
getenforce
.–Michael Berkowski
22 de junio de 2017 a las 1:23
Consulte también stackoverflow.com/questions/8139451/…
–Michael Berkowski
22 de junio de 2017 a las 1:23