Saturday, September 7, 2013

Acceso y replicación MySQL bloqueado por secure_auth

Original post: http://anothermysqldba.blogspot.com/2013/09/mysql-access-and-replication-blocked-by.html

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

Si ha intentado conectarse a una base de datos MySQL y nos vemos este error, entonces usted necesita para tener hash de contraseña 41byte válida. Si no está seguro de que usted tiene ejecutar el SQL a continuación. Si usted tiene 16 contraseñas de caracteres que son contraseñas antiguas.

select Password from mysql.user;

Lo que sigue es cómo resolví esto como parte de una migración de MySQL 5.0 a MySQL 5.6.

El servidor MySQL 5.0 tiene una mezcla de los mayores pre 4.1 passwords y contraseñas 41byte válidos. Dado que el servidor MySQL 5.0 tenía algunas cuentas con las contraseñas de más edad, decidí no volcar la tabla MySQL como parte de la configuración de replicación. Hice volcar todas las bases de datos, excepto la base de datos mysql. Esto permite aseguré que iba a mantener las mejoras de la tabla de MySQL 5.6 válidos.

El servidor MySQL 5.6 instala fácilmente y se había levantado y he cargado los datos de volcado. Parte de la migración era utilizar la replicación mientras evaluaban la nueva base de datos. Mientras que en el servidor de MySQL 5.6 probé la cuenta de usuario de replicación. La respuesta que obtuve fue el error en la parte superior de esta página. Replicación no funciona, por supuesto, sin una cuenta de usuario válida. Por ello, los registros de error me estaba dando este error:
[ERROR] Slave I/O: error connecting to master '<user>@<hostname>:3306' - retry-time: 10 retries: 68, Error_code: 2049

Una rápida revisión de la cuenta en el servidor de MySQL 5.0 muestra que la nueva cuenta se estableció con el 4.1 pre contraseña. Así que tenía que actualizar la cuenta a un 41 byte contraseña válida.

La siguiente consulta demostró que, efectivamente, tienen contraseñas antiguas habilitados. Así que tengo que desactivar eso y actualizar la cuenta de usuario de nuevo para establecer la contraseña como válidos 41 bytes hash.

>SELECT @@session.old_passwords, @@global.old_passwords;
+-------------------------+------------------------+
| @@session.old_passwords | @@global.old_passwords |
+-------------------------+------------------------+
| 1 | 1 |
+-------------------------+------------------------+
1 row in set (0.00 sec)


>SET @@session.old_passwords = 0;
Query OK, 0 rows affected (0.00 sec)

>GRANT REPLICATION SLAVE ON *.* TO '<user>'@'<ip_address>' IDENTIFIED BY '<Password>';
Query OK, 0 rows affected (0.00 sec)

Una verificación de la contraseña mostró la contraseña como la contraseña 41byte ahora. Esto me podía conectar al servidor principal desde el servidor secundario y evitar el error secure_auth. replicación muy sencillo conectar problema estaba resuelto.

De cara al futuro que necesitaba para conseguir las cuentas de usuario de MySQL 5.0 en el servidor de MySQL 5.6. (Ya que ellos salté como parte de la construcción del servidor secundario.)

El cliente necesitaba para establecer las subvenciones de nuevo para cada usuario independientemente de una contraseña válidos o no.
Así que le di instrucciones a ejecutar el siguiente sql. Yo podría haber hecho esto, pero yo tendría que saber todas sus contraseñas y que no era necesario.

Para cada usuario en su sistema. Usted no tiene que hacer el usuario root, porque ya tiene una cuenta de administrador válida en el sistema 5.6.

>SET @@session.old_passwords = 0;
>show grants for '<User>'@'<Host>';
Para recopilar la sql necesaria para cada usuario ejecute el siguiente:
SELECT CONCAT("SHOW GRANTS FOR '",User,"'@'",Host,"';") as sql_command from mysql.user;

Para cada resultado dado ejecutar la sentencia "mostrar subvenciones" y luego ejecutar la instrucción dada.
Los estados deben ser similar a la siguiente:

GRANT USAGE ON *.* TO 'bob'@'%.example.org' IDENTIFIED BY 'cleartext password';

Replicación y luego crea y se rellena la tabla de MySQL en el servidor de MySQL 5.6.

Más se puede encontrar aquí:
http://dev.mysql.com/doc/refman/5.6/en/password-hashing.html