2010-09-10 3 views
2

Это то, что я сделал.Почему dosn't MySQL как пользователь 'a' @ 'b', когда я просто удалял их из mysql.user?

mysql> CREATE USER 'matrix'@'%.something.com' IDENTIFIED BY 'weak'; 
ERROR 1396 (HY000): Operation CREATE USER failed for 'matrix'@'%.something.com' 
mysql> CREATE USER 'foo'@'%.something.com' IDENTIFIED BY 'weak'; 
Query OK, 0 rows affected (0.00 sec) 

И это то, что я в конечном итоге с:

mysql> select user,host from mysql.user; 
+------------------+--------------------+ 
| user    | host    | 
+------------------+--------------------+ 
| auth    | %.something.com | 
| foo    | %.something.com | 
| submit   | %.something.com | 
| testcase   | %.something.com | 
| version   | %.something.com | 
| root    | 127.0.0.1   | 
| root    | this.something.com | 
| debian-sys-maint | localhost   | 
| master   | localhost   | 
| root    | localhost   | 
+------------------+--------------------+ 
10 rows in set (0.00 sec) 

кажется, что проблема в том, что я удалил пользователей через DELETE FROM mysql.user WHERE User IN (%s);, чтобы обойти эту проблему, что я не знаю если учетные записи существуют.

(некрасиво) решение

Мои, заменить DELETE FROM mysql.user WHERE... с:

DELIMITER // 
CREATE PROCEDURE dropuserif(u VARCHAR(32), h VARCHAR(64)) 
BEGIN 
    DECLARE s INT; 
    SELECT COUNT(*) INTO s FROM mysql.user WHERE user = u AND host = h; 
    IF s > 0 THEN 
    BEGIN 
     SET @d = CONCAT("DROP USER '", u, "'@'", h, "';"); 
     PREPARE stmt_name FROM @d; 
     EXECUTE stmt_name; 
     DEALLOCATE PREPARE stmt_name; 
    END; 
    END IF; 
END// 
DELIMITER ; 

ответ

2

Веб-поиск "ошибка 1396" поворачивает вверх this bug report.

Причина, по-видимому, в ранее удаленных пользовательских записях, которые по-прежнему скрыты в базе данных и блокируют создание новых учетных записей с тем же именем.

Попробуйте FLUSH PRIVILEGES; перед первым утверждением и запустите их снова.

+0

У меня уже есть ПРИВИЛЕГИИ FLUSH; в скрипте. :( – BCS

0

взгляд here для хорошего начала к этому вопросу

[снарк] Есть ли причина, что вы не просто искать «mysql ERROR 1396»? [/ snark] '

+0

Я только что запустил поиск. Не зная о том, что сказал Пекка. Я бы отклонил первую половину первой страницы результатов, включая ссылку, которую он опубликовал. – BCS

 Смежные вопросы

  • Нет связанных вопросов^_^