Linux create database user

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 

Источник

Читайте также:  Включить ssh oracle linux

Создание базы данных в 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; 

Снова посмотрим список всех баз:

Читайте также:  Как установить ffmpeg linux

Видим, что наша БД появилась в списке:

+--------------------+ | 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.

Создадим еще одну базу. Для этого над списком БД нажмите кнопку «Создать БД».

Создание БД в phpMyAdmin

Укажем имя новой базы, а кодировку оставим по умолчанию. В нашем примере это:

Имя новой базы

База данных создана, и теперь она появилась в списке слева:

Наша БД в списке

Настройка и проверка доступа к базе данных

Сейчас у нас есть только 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); 

Ошибок не возникло, значит полномочия настроены правильно.

Читайте также:  Twitch error 4000 linux

Удаление базы данных

Теперь покажем, как удалить созданные БД. Учтите, что при удалении базы также удаляются все таблицы с данными в ней, поэтому будьте аккуратны и перепроверяйте названия баз, которые собираетесь удалить.

Через консоль

Через 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 a MySQL Database on Linux via Command Line

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.

Источник

Оцените статью
Adblock
detector