Ответ 1
Если вы все равно удаляете пользователя MySQL, тогда нет необходимости проверять, существует ли он в первую очередь. MySQL не будет бросать никаких ошибок, если ничего не удалять:
DELETE FROM mysql.user WHERE User = 'username';
Как проверить, существует ли пользователь?
Я делаю установщик для базы данных mysql, и мне нужно проверить, выходит ли пользователь, если не создать пользователя, если да удалите пользователя и создайте его снова.
поэтому я могу выполнить script без проблем.
спасибо.
Если вы все равно удаляете пользователя MySQL, тогда нет необходимости проверять, существует ли он в первую очередь. MySQL не будет бросать никаких ошибок, если ничего не удалять:
DELETE FROM mysql.user WHERE User = 'username';
MySQL хранит пользовательские данные в таблице с именем user
в базе данных с именем mysql
(по умолчанию). Следующий запрос вернет 1
, если пользователь с указанным именем пользователя существует, 0
в противном случае.
SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username')
MySQL не имеет конструкции DROP USER IF EXISTS.
Хорошим обходным решением является предоставление пользователю безобидной привилегии перед ее отбрасыванием. Эта создаст пользователя, если он не существует, чтобы его можно было безопасно удалить, например:
GRANT USAGE ON *.* TO 'username'@'localhost';
DROP USER 'username'@'localhost';
FLUSH PRIVILEGES;
ИСПОЛЬЗОВАНИЕ фактически означает отсутствие привилегий.
Источник: http://bugs.mysql.com/bug.php?id=19166
Вот как я смог это сделать:
#!/usr/bin/env bash
set -o errexit
set -o nounset
# Create credentials file
echo -e "[client]\nuser=root\npassword=${MYSQL_ROOT_PASSWORD}" > ~/.my.cnf
# Create standard user and grant permissions
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = 'myuser';" | mysql | grep 1 &> /dev/null; then
echo "Creating database user ..."
echo "CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;" | mysql
else
echo "Database user already created. Continue ..."
fi
Измените myuser
, mydatabase
и mypassword
соответственно.
В зависимости от того, находится ли исходный script в PHP или нет, вы можете использовать PHP для определения и принятия действий на основе всей предоставленной информации.