Как создать базу данных из команды оболочки?

175

Я ищу что-то вроде createb в PostgreSQL или любое другое решение, которое позволило бы мне создать базу данных с помощью команды оболочки. Есть намеки?

koszikot
источник

Ответы:

172
cat filename.sql | mysql -u username -p # type mysql password when asked for it

Где filename.sql содержит все sql для создания вашей базы данных. Или...

echo "create database `database-name`" | mysql -u username -p

Если вы действительно хотите создать базу данных.

Kris
источник
2
Я получаю эту ошибку ОШИБКА 1046 (3D000) в строке 27: база данных не выбрана, когда я запускаю echo "create database database name" | mysql -u -u username -p команда
keerthi
@keerthi: возможно, у вашего пользователя нет прав на какую-либо существующую схему?
Крис
2
Это потому, что есть два -uфлага
Стивен
@Kris Могу ли я прочитать имя базы данных из терминала и использовать значение переменной в качестве имени базы данных при создании базы данных.
Клиффорд Пи
@Clifford: вы можете использовать простой (ba) sh скрипт, используя обычные аргументы оболочки. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Вероятно, заслуживает своего собственного вопроса.
Крис
214

Вы имеете в виду в то время как среда MySQL?

create database testdb;

Или прямо из командной строки:

mysql -u root -e "create database testdb"; 
Феликс Клинг
источник
11
mysql -u root -e "создать базу данных testdb"; Вот что я искал :) спасибо
koszikot
3
Если у вас есть пароль, просто добавьте -p. После нажатия кнопки ввода вам будет предложено ввести пароль. Ниже приведен пример использования моего пользователя root (измените его, если у вас есть имя пользователя anoter), а также использует имя «oc_local» для базы данных (измените его, если хотите, чтобы ваша база данных вызывалась по-другому) - ----> mysql -u root -p -e "создать базу данных oc_local";
паблофиумара
1
привет @koszikot - если это то, что вы искали, вы должны принять это как правильный ответ :-)
thejohnbackes
1
Мне нравится знать, что делают параметры командной строки, для других -e это краткая форма для выражения --execute =. Найдите параметры командной строки здесь dev.mysql.com/doc/refman/8.0/ru/mysql-command-options.html
Энтони
70

Если вы создаете новую базу данных, хорошо бы создать пользователя с разрешениями только для этой базы данных (если что-то пойдет не так, вы не поставите под угрозу логин и пароль пользователя root). Так что все вместе будет выглядеть так:

mysql -u base_user -pbase_user_pass -e "create database new_db; GRANT ALL PRIVILEGES ON new_db.* TO new_db_user@localhost IDENTIFIED BY 'new_db_user_pass'"

Где:
base_user - это имя пользователя со всеми привилегиями (возможно, root).
Base_user_pass - это пароль для base_user (важно
указать пробел между -p и base_user_pass). New_db - это имя для вновь созданной базы данных.
New_db_user - это имя для нового пользователя с доступом. только для new_db
new_db_user_pass это пароль для new_db_user

jmarceli
источник
Массивная. Только что добавил этот замечательный вкладыш в фрагменты dashdocs. Если у кого-то есть пароль root с пробелами: -p"root password here"работает нормально
hmedia1
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Замените вышеперечисленные переменные, и вы можете использовать этот способ. $ USER - это имя пользователя, $ PASSWORD - это пароль, а $ DB_NAME - это имя базы данных.

karlingen
источник
1
вернулся к этому вопросу много лет спустя и заметил, что я проголосовал за него: D
Исаак
20

использование

$ mysqladmin -u <db_user_name> -p create <db_name>

Вам будет предложено ввести пароль. Также убедитесь, что у пользователя mysql, который вы используете, есть права на создание базы данных.

Willa
источник
12

ИСТ и 2-й ответ хороши, но если кто-то ищет сценарий или если вам нужен динамический т. Е. (Db / username / password в переменной), то здесь:

#!/bin/bash



DB="mydb"
USER="user1"
PASS="pass_bla"

mysql -uroot -prootpassword -e "CREATE DATABASE $DB CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql -uroot -prootpassword -e "CREATE USER $USER@'127.0.0.1' IDENTIFIED BY '$PASS'";
mysql -uroot -prootpassword -e "GRANT SELECT, INSERT, UPDATE ON $DB.* TO '$USER'@'127.0.0.1'";
Салах-1
источник
10

Вы можете использовать SQL в командной строке:

echo 'CREATE DATABASE dbname;' | mysql <...>

Или вы можете использовать mysqladmin:

mysqladmin create dbname
Лукаш Лалинский
источник
2

Подключитесь к БД, используя базового пользователя: mysql -u base_user -pbase_user_pass и выполните операторы CREATE DATABASE, CREATE USER и GRANT PRIVILEGES.

Вот удобный веб-мастер, который поможет вам с заявлениями www.bugaco.com/helpers/create_database.html

CaptZ-
источник