Shell脚本中执行sql语句操作mysql的5种方法

对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本。本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考。对于脚本输出的结果美化,需要进一步完善和调整。以下为具体的示例及其方法。

1、将SQL语句直接嵌入到shell脚本文件中

复制代码 代码如下:

--演示环境 
[root@SZDB ~]# more /etc/issue 
CentOS release 5.9 (Final) 
Kernel \r on an \m 
 
root@localhost[(none)]> show variables like 'version'; 
+---------------+------------+ 
| Variable_name | Value      | 
+---------------+------------+ 
| version       | 5.6.12-log | 
+---------------+------------+ 
 
[root@SZDB ~]# more shell_call_sql1.sh  
#!/bin/bash 
# Define log 
TIMESTAMP=`date +%Y%m%d%H%M%S` 
LOG=call_sql_${TIMESTAMP}.log 
echo "Start execute sql statement at `date`." >>${LOG} 
 
# execute sql stat 
mysql -uroot -p123456 -e " 
tee /tmp/temp.log 
drop database if exists tempdb; 
create database tempdb; 
use tempdb 
create table if not exists tb_tmp(id smallint,val varchar(20)); 
insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark'); 
select * from tb_tmp; 
notee 
quit" 
 
echo -e "\n">>${LOG} 
echo "below is output result.">>${LOG} 
cat /tmp/temp.log>>${LOG} 
echo "script executed successful.">>${LOG} 
exit; 
 
[root@SZDB ~]# ./shell_call_sql1.sh  
Logging to file '/tmp/temp.log' 
+------+-------+ 
| id   | val   | 
+------+-------+ 
|    1 | jack  | 
|    2 | robin | 
|    3 | mark  | 
+------+-------+ 
Outfile disabled.

2、命令行调用单独的SQL文件

复制代码 代码如下:

[root@SZDB ~]# more temp.sql  
tee /tmp/temp.log 
drop database if exists tempdb; 
create database tempdb; 
use tempdb 
create table if not exists tb_tmp(id smallint,val varchar(20)); 
insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark'); 
select * from tb_tmp; 
notee 
 
[root@SZDB ~]# mysql -uroot -p123456 -e "source /root/temp.sql" 
Logging to file '/tmp/temp.log' 
+------+-------+ 
| id   | val   | 
+------+-------+ 
|    1 | jack  | 
|    2 | robin | 
|    3 | mark  | 
+------+-------+ 
Outfile disabled.

3、使用管道符调用SQL文件

复制代码 代码如下:

[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql 
Logging to file '/tmp/temp.log' 
id      val 
1       jack 
2       robin 
3       mark 
Outfile disabled. 
 
#使用管道符调用SQL文件以及输出日志 
[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql >/tmp/temp.log 
[root@SZDB ~]# more /tmp/temp.log 
Logging to file '/tmp/temp.log' 
id      val 
1       jack 
2       robin 
3       mark 
Outfile disabled.

4、shell脚本中MySQL提示符下调用SQL

复制代码 代码如下:

[root@SZDB ~]# more shell_call_sql2.sh 
#!/bin/bash 
mysql -uroot -p123456 <<EOF 
source /root/temp.sql; 
select current_date(); 
delete from tempdb.tb_tmp where id=3; 
select * from tempdb.tb_tmp where id=2; 
EOF 
exit; 
[root@SZDB ~]# ./shell_call_sql2.sh 
Logging to file '/tmp/temp.log' 
id      val 
1       jack 
2       robin 
3       mark 
Outfile disabled. 
current_date() 
2014-10-14 
id      val 
2       robin

5、shell脚本中变量输入与输出

复制代码 代码如下:

[root@SZDB ~]# more shell_call_sql3.sh 
#!/bin/bash 
cmd="select count(*) from tempdb.tb_tmp" 
cnt=$(mysql -uroot -p123456 -s -e "${cmd}") 
echo "Current count is : ${cnt}" 
exit  
[root@SZDB ~]# ./shell_call_sql3.sh  
Warning: Using a password on the command line interface can be insecure. 
Current count is : 3 
 
[root@SZDB ~]# echo "select count(*) from tempdb.tb_tmp"|mysql -uroot -p123456 -s 

 
[root@SZDB ~]# more shell_call_sql4.sh 
#!/bin/bash 
id=1 
cmd="select count(*) from tempdb.tb_tmp where id=${id}" 
cnt=$(mysql -uroot -p123456 -s -e "${cmd}") 
echo "Current count is : ${cnt}" 
exit  
 
[root@SZDB ~]# ./shell_call_sql4.sh  
Current count is : 1 
 
#以上脚本演示中,作抛砖引玉只用,对于输出的结果不是很规整友好,需要进一步改善和提高。

时间: 2014-10-28

把mysql查询结果保存到文件的shell脚本

该脚本是先删除已经存在的文件,然后后台执行SQL语句将其执行结果以一定的格式写入文件 复制代码 代码如下: #!/bin/bashif [ -f "/var/lib/mysql/hell.txt" ]; thenrm -f /var/lib/mysql/hell.txtecho "delete /var/lib/mysql/hell.txt" >> hell.txtfimysql -uroot -plab <<EOFuse home;sele

shell脚本连接、读写、操作mysql数据库实例

本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为xml或html文件, 并分析了核心语句.本文介绍的方法适用于PostgreSQL ,相对mysql而言,shell 中读写PostgreSQL会更简单些. 1. 连接mysql 数据库 shell中连接数据库的方法很简单,只需要指定用户名,密码,连接的数据库名称,然后通过重定向,输入mysql的语

Mysql 5.7 忘记root密码或重置密码的详细方法

在Centos中安装完MySQL数据库以后,不知道密码,这可怎么办,下面给大家说一下怎么重置密码 1.修改配置文件my.cnf 按i编辑 [root@iZ2ze14tbj23jllo85kuh1Z ~]# vim /etc/my.cnf 在[mysqld]中添加 skip-grant-tables 例如: [mysqld] **skip-grant-tables** datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock 键盘 Esc 保存

在Linux环境下mysql的root密码忘记解决方法(三种)

MySQL密码的恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息.可以采用将MySQL对外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全状态.最安全的状态是到服务器的Console上面操作,并且拔掉网线. 2.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysq

Shell脚本实现监控MySQL主从同步

代码如下: 复制代码 代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'` MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "

Mysql5.7忘记root密码及mysql5.7修改root密码的方法

关闭正在运行的 MySQL : [root@www.woai.it ~]# service mysql stop 运行 [root@www.woai.it ~]# mysqld_safe --skip-grant-tables & 为了安全可以这样禁止远程连接: [root@www.woai.it ~]# mysqld_safe --skip-grant-tables --skip-networking & 使用mysql连接server: [root@www.woai.it ~]# my

MySQL5.7安装过程并重置root密码的方法(shell 脚本)

由于 MySQL 5.7 版本的 root 密码是首次启动时随机生成的,并且还要求必须修改后才能使用,所以有了本文:使用 shell 脚本完成安装和设置新的 root 密码. 以官方的 rpm 包安装为例,先下载,使用 yum 命令安装,如果有需要的依赖包会自动安装 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar tar xf mysql-5.7.17-1.el6

CentOS下mysql定时备份Shell脚本分享

1.备份语句 复制代码 代码如下: # /usr/local/mysql/bin/mysqldump -utest -ptest test --socket=/tmp/mysql.3306.sock > /usr/local/mysql_backup/3306/test-`date +%Y%m%d`.sql.gz 语句说明:   /usr/local/mysql/bin/mysqldump:MySql安装目录下 -utest:分为两块,一块为-u一块为test:其中-u表示其为用户名,test表

Mysql 忘记root密码和修改root密码的解决方法(小结)

一 修改root密码的三种办法 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123'); 方法2:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysqladmin -uroot -p12

MySQL密码忘了怎么办?MySQL重置root密码方法

MySQL有时候忘记了root密码是一件伤感的事.这里提供Windows 和 Linux 下的密码重置方法. Windows: 1.以系统管理员身份登陆系统. 2.打开cmd-----net start 查看mysql是否启动.启动的话就停止net stop mysql. 3.我的mysql安装在d:\usr\local\mysql4\bin下. 4.跳过权限检查启动mysql. d:\usr\local\mysql\bin\mysqld-nt --skip-grant-tables 5.重新打

Mysql 忘记root密码的完美解决方法

一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-tables,然后保存并退出 3.重启mysql服务:service mysqld restart 二.更改root用户名 1.重启以后,执行mysql命令进入mysql命令行 2.修改root用户密码 MySQL> UPDATE mysql.user SET Password=PASSWORD('新

windows环境中mysql忘记root密码的解决方法详解

一朋友告急:mysql 忘记root密码了 让我帮忙给看看,因为没有接触过mysql 所以从网上找了一下信息经我亲身实践  已经成功!mysql版本是5.1.以下是从网上找的mysql密码修改的信息:参考文章:windows下重置Mysql Root密码的方法mysql修改密码以及忘记密码1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令:net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令:mysqld --de

mysql8.0.19忘记密码的完美解决方法

推荐阅读:MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子) 1.打开cmd窗口(最好以管理员身份打开),net stop mysql 停止mysql服务 2.开启跳过验证密码的mysql服务 mysqld --console  --skip-grant-tables --shared-memory 3.打开一个新的cmd窗口,启动mysql服务 mysql -u root -p 4.输入密码直接空格键跳过 5.将密码置空 use mysql update user set aut

MySQL忘记root密码错误号码1045的解决办法

停止MySQL服务 Windows可以右键我的电脑--管理--服务和应用程序--服务--找到对应的服务停止掉 免密登录 切换到MySQL安装路径下:D:\mysql-5.7.24-winx64\bin:如果已经配了环境变量,则不用再安装目录 打开CMD命令窗口,在命令行输入:mysqld -nt --skip-grant-table 8.0以上数据库输入:mysqld --console --skip-grant-tables --shared-memory 进入数据库 以管理员身份重新启动一个

Linux使用MySQL忘记root密码及修改MySQL默认编码

概述: 本文不再对MySQL的语法进行讲解和说明,想了解或熟悉的朋友请自行百度或Google学习.本文主要是针对MySQL除语法之外的总结,希望能够也能帮助到你. 1.CentOS6.x下MySQL忘记root密码解决方法 Ⅰ. 修改MySQL的登录设置 # vim /etc/my.cnf 在[mysqld]段中加上一句:skip-grant-tables Ⅱ. 重启服务 # service mysqld restart Ⅲ. 登录Mysql,修改密码信息 # mysql mysql> USE

Window下Mysql忘记root密码怎么重置

本人机器环境: Windows 2008 R2 MySQL 5.6 以"Window下忘记Mysql的root密码"百度,找到一大堆解决方案.大多大同小异,比较经典的是百度文库上的一篇[1],图文并茂,条理也比较清晰.立刻按照这篇文章描述的操作. 具体操作如下: 以下步骤如果添加了MySQL的环境变量,则可以直接运行mysql有关命令,否则必须到mysql安装目录的bin目录下操作. 步骤如下: 1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql

MAC上Mysql忘记Root密码或权限错误的快速解决方案

最近一段时间都在倒腾mantis发现总是连接mysql出错,就随手修改了root权限,导致登录不上了. 下面给大家分享还原root权限和更改root密码的最便捷方法. 1:装mysql workbench .可视化界面直接操作. 2:苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务 3:进入终端 输入: cd /usr/local/mysql/bin/ 回车后 登录管理员权限 sudo su 回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe -

oracle 提示登录密码过期完美解决方法

oracle 提示登录密码过期解决 1.登录到oracle的 服务器 2.切换到oracle 用户 3.设置到当前操作的实例名:export ORACLE_SID=XXX 4.连接数据库的命令行模式:sqlplus /nolog 5.sql: conn /as sysdba;用dba的身份登录 6.修改过期的用户密码设置: 修改用户密码:alter user XXX identified by XXX 修改用户密码之后,重新使用修改的用户密码连接数据库就ok了,假如仍然还有锁定用户操作, 记得执

重置mysql的root密码最简单的方法

我的mysql版本 MYSQL V5.7.9,旧版本请使用: UPDATE mysql.user SET Password=PASSWORD('新密码') WHERE User='root'; Mac OS X - 重置 MySQL Root密码 密码太多记不住??你是否忘记了Mac OS 的MySQL的root密码? 通过以下4步就可重新设置新密码: 1. 停止 mysql server. 通常是在 '系统偏好设置' > MySQL > 'Stop MySQL Server' 2. 打开终端