mysql - 在 bash 脚本中运行 mysql 命令,无需登录或在每个命令中添加 -u root

标签 mysql linux bash shell

我正在编写一个 bash 脚本来执行一些数据库操作。 MySQL 新手。我在 Mac 上,通过自制软件安装了 MySQL。

我现在使用用户名“root”并且没有设置密码。我在下面包含了 pw 语法,只是为了帮助其他可能有 pw 的人。

我的目标是让 mysql 命令在我的 bash 脚本中尽可能“干净”

不是什么大不了的事,但如果可能的话我想这样做。

例子

# If I can do it without logging in (*ideal)
mysql CREATE DATABASE dbname;

# Or by logging in with - mysql -u root -pPassword
CREATE DATABASE dbname;

# Instead of
mysql -u root -pPassword -e"CREATE DATABASE dbname";

试图简化它。我有一些事情要做,所以如果可能的话,我宁愿让我的代码更干净。我尝试使用 bash 脚本登录,但一旦登录到 MySQL,该脚本就停止了,并且没有运行任何命令。

我正在考虑(但不太喜欢)的另一个选择是将用户名和密码字符串保存在一个 var 中,并像这样为每个命令调用它

# Set the login string variable
login_details="-u root -p password -e"

# example command
mysql $login_details"CREATE DATABASE dbname";

有什么想法吗?

最佳答案

编写一个新的 bash 脚本文件,并在将所有命令放入其中后运行该文件。不要忘记在您的 bash 脚本中提供正确的用户名和密码。

对于 bash 脚本:

#!/bin/bash
mysql -u root -pSeCrEt << EOF
use mysql;
show tables;
EOF

如果你想运行单个 mysql 命令。

mysql -u [user] -p[pass] -e "[mysql commands]"

示例:

mysql -h 192.168.1.10 -u root -pSeCrEt -e "show databases"

执行多个mysql命令:

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"

注意:-B表示批量,打印结果使用tab作为列分隔符,每行另起一行。使用这个选项,mysql 不使用历史文件。批处理模式导致非表格输出格式和特殊字符转义。 -s 是静默模式。产生更少的输出。 -e 是执行语句并退出

关于mysql - 在 bash 脚本中运行 mysql 命令,无需登录或在每个命令中添加 -u root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39951808/

相关文章:

linux - 寻找时间戳中的间隙

git - 仅在代码存储库已更新时构建 Docker 镜像 (Jenkins)

php - 自定义帖子类型不显示从前端插入的帖子

mysql - 如何使用sql从经纬度数据集中得到有代表性的均匀分布子集?

c++ - Linux 中 QToolButton 的事件处理问题

linux - 运行 git 命令时,将 stderr 重定向到 stdout,将 stdout 重定向到/dev/null

mysql - 使用 Laravel Schema Builder 创建带分区的表

mysql搜索,按优先级排序

linux - 从哪里获得 gedit 主题

Linux bash工具,用于显示两侧的文件夹结构