- Create mysql database and user in bash script
- 4 Answers 4
- Создание базы данных в MySQL
- Введение
- Подготовка
- Подключение к серверу и создание новой базы
- Через консоль
- Через phpMyAdmin
- Настройка и проверка доступа к базе данных
- Через консоль
- Через phpMyAdmin
- Удаление базы данных
- Через консоль
- Через phpMyAdmin
- Заключение
- Create a MySQL Database on Linux via Command Line
- Prerequisites
- Create MySQL Database on Linux using Command Line
- Step 1:
- Step 2:
- View All MySQL Databases
- Wrapping Up
Create mysql database and user in bash script
This seems like it should be simple and I swear this code has worked for months but it’s not working now. I’m sure I’m just overly tired but I would appreciate a knowing nudge.
# create random password PASSWDDB="$(openssl rand -base64 12)" # replace "-" with "_" for database username MAINDB=$ # create database and user mysql -e "CREATE DATABASE $MAINDB" mysql -e "GRANT ALL PRIVILEGES ON $MAINDB.* TO $MAINDB@localhost IDENTIFIED BY '$PASSWDDB!'"
MAINDB is supplied previously in the script. What I end up with is a database, a user, and proper permissions and the user has a password — it’s just not the password defined in $PASSWORDDB. MariaDB 10.0.22 Ubuntu 14.04
4 Answers 4
In your case you can use this:
# create random password PASSWDDB="$(openssl rand -base64 12)" # replace "-" with "_" for database username MAINDB=$ # If /root/.my.cnf exists then it won't ask for root password if [ -f /root/.my.cnf ]; then mysql -e "CREATE DATABASE $ /*\!40100 DEFAULT CHARACTER SET utf8 */;" mysql -e "CREATE USER $@localhost IDENTIFIED BY '$';" mysql -e "GRANT ALL PRIVILEGES ON $.* TO '$'@'localhost';" mysql -e "FLUSH PRIVILEGES;" # If /root/.my.cnf doesn't exist then it'll ask for root password else echo "Please enter root user MySQL password!" echo "Note: password will be hidden when typing" read -sp rootpasswd mysql -uroot -p$ -e "CREATE DATABASE $ /*\!40100 DEFAULT CHARACTER SET utf8 */;" mysql -uroot -p$ -e "CREATE USER $@localhost IDENTIFIED BY '$';" mysql -uroot -p$ -e "GRANT ALL PRIVILEGES ON $.* TO '$'@'localhost';" mysql -uroot -p$ -e "FLUSH PRIVILEGES;" fi
@Pmpr from the OP question, it seems like they want to use MAINDB as both DB name and Username. The script link in the answer uses USERNAME as you mentioned.
openssl rand -base64 12 may give special characters like ‘/’, which breaks MySQL connection strings. I used head /dev/urandom | tr -dc A-Za-z0-9 | head -c12 instead
I have created a one which you may find useful:
#!/bin/bash # # Script to create MySQL db + user # # @author Raj KB # @website http://www.magepsycho.com # @version 0.1.0 ################################################################################ # CORE FUNCTIONS - Do not edit ################################################################################ # # VARIABLES # _bold=$(tput bold) _underline=$(tput sgr 0 1) _reset=$(tput sgr0) _purple=$(tput setaf 171) _red=$(tput setaf 1) _green=$(tput setaf 76) _tan=$(tput setaf 3) _blue=$(tput setaf 38) # # HEADERS & LOGGING # function _debug() < [ "$DEBUG" -eq 1 ] && $@ >function _header() < printf "\n$$========== %s ==========$\n" "$@" > function _arrow() < printf "➜ $@\n" >function _success() < printf "$✔ %s$\n" "$@" > function _error() < printf "$✖ %s$\n" "$@" > function _warning() < printf "$➜ %s$\n" "$@" > function _underline() < printf "$$%s$\n" "$@" > function _bold() < printf "$%s$\n" "$@" > function _note() < printf "$$$Note:$ $%s$\n" "$@" > function _die() < _error "$@" exit 1 >function _safeExit() < exit 0 ># # UTILITY HELPER # function _seekConfirmation() < printf "\n$$@$" read -p " (y/n) " -n 1 printf "\n" > # Test whether the result of an 'ask' is a confirmation function _isConfirmed() < if [[ "$REPLY" =~ ^[Yy]$ ]]; then return 0 fi return 1 >function _typeExists() < if [ $(type -P $1) ]; then return 0 fi return 1 >function _isOs() < if [[ "$" == $1* ]]; then return 0 fi return 1 > function _checkRootUser() < #if [ "$(id -u)" != "0" ]; then if [ "$(whoami)" != 'root' ]; then echo "You have no permission to run $0 as non-root user. Use sudo" exit 1; fi >function _printPoweredBy() < cat > Store: http://www.magepsycho.com >> Blog: http://www.blog.magepsycho.com ################################################################ EOF > ################################################################################ # SCRIPT FUNCTIONS ################################################################################ function generatePassword() < echo "$(openssl rand -base64 12)" >function _printUsage() < echo -n "$(basename $0) [OPTION]. Create MySQL db & user. Version $VERSION Options: -h, --host MySQL Host -d, --database MySQL Database -u, --user MySQL User -p, --pass MySQL Password (If empty, auto-generated) -h, --help Display this help and exit -v, --version Output version information and exit Examples: $(basename $0) --help " _printPoweredBy exit 1 >function processArgs() < # Parse Arguments for arg in "$@" do case $arg in -h=*|--host=*) DB_HOST="$" ;; -d=*|--database=*) DB_NAME="$" ;; -u=*|--user=*) DB_USER="$" ;; -p=*|--pass=*) DB_PASS="$" ;; --debug) DEBUG=1 ;; -h|--help) _printUsage ;; *) _printUsage ;; esac done [[ -z $DB_NAME ]] && _error "Database name cannot be empty." && exit 1 [[ $DB_USER ]] || DB_USER=$DB_NAME > function createMysqlDbUser() < SQL1="CREATE DATABASE IF NOT EXISTS $;" SQL2="CREATE USER '$'@'%' IDENTIFIED BY '$';" SQL3="GRANT ALL PRIVILEGES ON $.* TO '$'@'%';" SQL4="FLUSH PRIVILEGES;" if [ -f /root/.my.cnf ]; then $BIN_MYSQL -e "$$$$" else # If /root/.my.cnf doesn't exist then it'll ask for root password _arrow "Please enter root user MySQL password!" read rootPassword $BIN_MYSQL -h $DB_HOST -u root -p$ -e "$$$$" fi > function printSuccessMessage() < _success "MySQL DB / User creation completed!" echo "################################################################" echo "" echo " >> Host : $" echo " >> Database : $" echo " >> User : $" echo " >> Pass : $" echo "" echo "################################################################" _printPoweredBy > ################################################################################ # Main ################################################################################ export LC_CTYPE=C export LANG=C DEBUG=0 # 1|0 _debug set -x VERSION="0.1.0" BIN_MYSQL=$(which mysql) DB_HOST='localhost' DB_NAME= DB_USER= DB_PASS=$(generatePassword) function main() < [[ $# -lt 1 ]] && _printUsage _success "Processing arguments. " processArgs "$@" _success "Done!" _success "Creating MySQL db and user. " createMysqlDbUser _success "Done!" printSuccessMessage exit 0 >main "$@" _debug set +x
./mysql-create-db-user.sh --host=localhost --database=test-db --user=test-user
Создание базы данных в MySQL
Инструкция о том, как создать новую базу данных в MySQL несколькими способами, добавить пользователей и выдать им полномочия на доступ к базе.
Эта инструкция — часть курса «MySQL для новичков».
Введение
В этой небольшой инструкции мы покажем, как создать новую базу данных в MySQL несколькими способами, как добавить пользователей и выдать им полномочия на доступ к базе.
Подготовка
Перед началом работы у вас должен быть установлен и настроен MySQL-сервер. В этой статье мы не будем показывать, как это сделать. Если у вас еще нет готового сервера, почитайте нашу статью, там мы пошагово описали процесс установки и первоначальной настройки MySQL.
Мы будем работать с сервером, развернутым на виртуальной машине Selectel.
Так как это удаленный сервер, нам понадобится его внешний IP-адрес. В этих примерах мы будем использовать адрес 82.202.199.34.
Подключение к серверу и создание новой базы
Все операции будем показывать на двух примерах: консольный клиент и phpMyAdmin. Если у вас другой инструмент для подключения к серверу, почитайте его документацию или используйте SQL-команды, которые мы будем выполнять при работе через консольный клиент. Они универсальны и подойдут для любого инструмента.
Через консоль
Подключимся к удаленному серверу MySQL:
mysql -u root -h 82.202.199.34 -p
После ввода этой команды нужно ввести пароль от пользователя root, который вы указывали на этапе установки и первоначальной настройки СУБД.
Для начала посмотрим, какие уже есть созданные базы данных:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+
Это все служебные базы. Мы не будем их трогать, а создадим свою БД. Для этого выполним команду для создания новой базы данных MySQL:
CREATE DATABASE my_db_cli;
Снова посмотрим список всех баз:
Видим, что наша БД появилась в списке:
+--------------------+ | Database | +--------------------+ | information_schema | | my_db_cli | | mysql | | performance_schema | | sys | | test | +--------------------+
Через phpMyAdmin
Чтобы указать сервер для подключения, нужно отредактировать файл config.inc.php. В зависимости от вашей ОС или дистрибутива Linux, этот файл может находиться в разных директориях, поэтому мы не будем указывать конкретный путь. Откройте файл и добавьте в него строчку:
$cfg['Servers'][$i]['host'] = '82.202.199.34';
Теперь откройте интерфейс phpMyAdmin и залогиньтесь на сервер. В левой части экрана находится список созданных баз данных. Мы видим уже созданную нами ранее базу my_db_cli.
Создадим еще одну базу. Для этого над списком БД нажмите кнопку «Создать БД».
Укажем имя новой базы, а кодировку оставим по умолчанию. В нашем примере это:
База данных создана, и теперь она появилась в списке слева:
Настройка и проверка доступа к базе данных
Сейчас у нас есть только root-пользователь, который имеет полный доступ к серверу и может работать с любой БД. Нам нужно создать новых пользователей и выдать им полномочия, чтобы каждый мог работать только с одной базой.
Через консоль
Создадим нового пользователя:
CREATE USER 'user_cli'@'%' IDENTIFIED BY 'password';
Знак процента означает, что пользователь может подключаться к серверу с любого хоста. Теперь выдадим этому пользователю полный доступ на базу my_db_cli:
GRANT ALL PRIVILEGES ON my_db_cli.* TO 'user_cli'@'%' WITH GRANT OPTION;
Через phpMyAdmin
Теперь сделаем то же самое через phpMyAdmin. Переходим на вкладку «Учетные записи пользователей» и в нижней части экрана нажимаем «Добавить учетную запись пользователя».
В следующем окне указываем имя пользователя, хост и пароль.
После создания пользователя сразу откроется экран настройки полномочий. Мы хотим выдать права только на определенную БД, поэтому перейдем на вкладку «База данных» и выберем нужную базу.
На следующем экране нужно указать привилегии. Мы хотим дать полный доступ к базе, поэтому выберем пункт «Отметить все».
Теперь проверим полномочия на примере одного пользователя. Для этого залогинимся под пользователем user_cli и попробуем получить доступ к обеим базам данных.
mysql -u user_cli -h 82.202.199.34 -p
Попробуем выбрать БД, к которой нет доступа:
ERROR 1044 (42000): Access denied for user 'user_cli'@'%' to database 'my_db_gui'
Теперь выберем базу, к которой есть доступ и попробуем создать в ней таблицу:
use my_db_cli; create table t(id int);
Ошибок не возникло, значит полномочия настроены правильно.
Удаление базы данных
Теперь покажем, как удалить созданные БД. Учтите, что при удалении базы также удаляются все таблицы с данными в ней, поэтому будьте аккуратны и перепроверяйте названия баз, которые собираетесь удалить.
Через консоль
Через phpMyAdmin
Выбираем нужную БД, переходим на вкладку «Операции» и нажимаем «Удалить базу данных».
Заключение
Вы узнали, как с помощью командной строки или phpMyAdmin можно выполнить создание новой БД в MySQL, как создавать пользователей и добавлять им права доступа.
Как установить и настроить MySQL в Ubuntu 20.04
Create a MySQL Database on Linux via Command Line
While the are many ways to create databases, system administrators benefit from knowing how to create a MySQL database in Linux via the command line. Knowing more than one way to accomplish a task provides flexibility in case the usual way you perform it is not an option. Use this tutorial to create a MySQL database via the command line.
Prerequisites
Create MySQL Database on Linux using Command Line
Step 1:
Log into the MySQL server from the command line with the following command, specifying the user root with the -u flag, and prompt for a password using the -p flag. Enter your current password once prompted to complete the login.
You can change the MySQL password for the root user or any other user in the database via the command line.
A prompt displays like the one below once you log in.
Step 2:
To create a database with the name tutorial_database, type the following command.
CREATE DATABASE tutorial_database;
If a database of the same name already exists, the system will not create a new database, and you will receive this error.
ERROR 1007 (HY000): Can't create database 'tutorial_database'; database exists
You can avoid this error by using the following command. It only creates the database tutorial_database if a database of that name does not already exist.
CREATE DATABASE IF NOT EXISTS tutorial_database;
View All MySQL Databases
Use the following command to view the database you’ve created.
Here is the resulting output.
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | tutorial_database | +--------------------+ 4 rows in set (0.00 sec)
Wrapping Up
Creating a MySQL database from the Linux command line is an easy process. System administrators would do well to have this process in their toolkit to add flexibility to their workflow.
Are you looking for a server solution that includes MySQL out of the box? Liquid Web offers VPS Hosting, Cloud Dedicated Servers, and Dedicated Servers with the LAMP stack built in. Contact our sales team today to start or migrate your project.