以下の変数にそれぞれ値を入れてから、
全文MySQL上で実行することで、
DBと、ユーザーアカウントを作成可能です。
-- Required to change each project
SET @db_name = "__my_db_name_here__";
SET @db_username = @db_name;
SET @db_password = "__my_db_password_here__";
-- Optional to change if need
SET @db_charset = "utf8mb4";
SET @db_collate = "utf8mb4_general_ci";
-- CREATE DATABASE
SET @sql = CONCAT('CREATE DATABASE IF NOT EXISTS `', @db_name, '` DEFAULT CHARACTER SET `', @db_charset, '` COLLATE `', @db_collate , '`;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- CREATE USER (localhost)
SET @sql = CONCAT('CREATE USER IF NOT EXISTS ', @db_username, '@`localhost` IDENTIFIED BY \'', @db_password, '\';');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- CREATE USER (%)
SET @sql = CONCAT('CREATE USER IF NOT EXISTS ', @db_username, '@`%` IDENTIFIED BY \'', @db_password, '\';');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- GRANT (localhost)
SET @sql = CONCAT('GRANT ALL PRIVILEGES ON `', @db_name, '`.* TO ', @db_username, '@`localhost` WITH GRANT OPTION;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- GRANT (%)
SET @sql = CONCAT('GRANT ALL PRIVILEGES ON `', @db_name, '`.* TO ', @db_username, '@`%` WITH GRANT OPTION;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
上記の文を実行すると、以下のようなSQL句が実行されます。
いつも以下の句でDBを作成していたのですが、
毎回同じ箇所を修正しているので、変数でまとめられそうだと思い作った次第
CREATE DATABASE IF NOT EXISTS `__my_db_name_here__` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
CREATE USER __my_db_name_here__@`localhost` IDENTIFIED BY '__my_db_password_here__';
CREATE USER __my_db_name_here__@`%` IDENTIFIED BY '__my_db_password_here__';
GRANT ALL PRIVILEGES ON `__my_db_name_here__`.* TO __my_db_name_here__@`localhost` WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `__my_db_name_here__`.* TO __my_db_name_here__@`%` WITH GRANT OPTION;