これが私がしたことです。
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 ;