如何从shell命令创建数据库?


175

我正在寻找PostgreSQL中的createdb之类的东西,或任何其他允许我借助shell命令创建数据库的解决方案。有什么提示吗?

Answers:


173
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

如果您真的只想创建一个数据库。


2
我在第27行收到此错误ERROR 1046(3D000):运行echo“ create database databasename”时未选择数据库| mysql -u -u username -p命令
keerthi 2013年

@keerthi:也许您的用户没有任何现有模式的特权?
克里斯(Kris)2013年

2
这是因为有两个-u标志
Stephen

@Kris是否可以从终端读取数据库名称并将变量值用作创建数据库中的数据库名称。
CLIFFORD PY

@Clifford:您可以使用简单的(ba)sh脚本,使用普通的shell参数。(stackoverflow.com/questions/23563043/shell-script-arguments)可能有其自身的问题。
克里斯(Kris)2013年

213

您的意思是在mysql环境下?

create database testdb;

或直接从命令行:

mysql -u root -e "create database testdb"; 

11
mysql -u root -e“创建数据库testdb”; 那就是我一直在寻找的东西:)谢谢
koszikot 2010年

3
如果您有密码,只需添加-p。按Enter键后,将要求您输入密码。以下是使用我的root用户的示例(如果您有其他用户名,请更改它),并且还为数据库使用名称“ oc_local”(如果您希望以其他方式调用数据库,请更改它) ----> mysql -u root -p -e“创建数据库oc_local”;
pablofiumara

1
嗨@koszikot-如果这是您想要的,您应该接受它作为正确的答案:-)
thejohnbackes

1
我想知道命令行选项的作用,其他选项-e是--execute = statement的缩写。在此处找到命令行选项dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony

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的密码


庞大。刚刚在dashdocs片段中添加了这一出色的功能。如果任何人都有一个带有空格的root密码:-p"root password here"可以正常工作
hmedia1

37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

替换上面的变量,您可以选择使用此Oneliner。$ USER是用户名,$ PASSWORD是密码,$ DB_NAME是数据库的名称。


1
多年后又回到这个问题,并注意到我对此表示反对:D
艾萨克

20

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

系统将提示您输入密码。还要确保您使用的mysql用户具有创建数据库的权限。


12

ist和2nd答案都不错,但是如果有人正在寻找一个脚本,或者如果您想要动态脚本(即db / username / password in variable),则可以在这里:

#!/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'";


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.