在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据、导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考。
方案1
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单
方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (
02. `id` varchar(36) NOT NULL COMMENT '主键',
03. `username` varchar(50) NOT NULL COMMENT '用户名',
04. `password` varchar(50) NOT NULL COMMENT '用户密码',
05. `createdate` date NOT NULL COMMENT '创建时间',
06. `age` int(11) NOT NULL COMMENT '年龄',
07. PRIMARY KEY (`id`)
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
09.DROP TABLE IF EXISTS `visit_log`;
10.CREATE TABLE `visit_log` (
11. `id` varchar(36) character set utf8 NOT NULL,
12. `type` int(11) NOT NULL,
13. `content` text character set utf8 NOT NULL,
14. `createdate` date NOT NULL,
15. PRIMARY KEY (`id`)
16.) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='访问日志';
CREATE TABLE `user` (
`id` varchar(36) NOT NULL COMMENT '主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码',
`createdate` date NOT NULL COMMENT '创建时间',
`age` int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
DROP TABLE IF EXISTS `visit_log`;
CREATE TABLE `visit_log` (
`id` varchar(36) character set utf8 NOT NULL,
`type` int(11) NOT NULL,
`content` text character set utf8 NOT NULL,
`createdate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;
02.source update.sql
use chbdb;
source update.sql
然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword
cat update_mysql.sh | mysql --user=root -ppassword
优点:支持复杂的sql脚本
缺点:
1> 需要两个文件:update.sql和update_mysql.sh
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案3
新建一个shell脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -u* -h* -p* <<EOF
03. Your SQL script.
04.EOF
#!/bin/bash
mysql -u* -h* -p* <<EOF
Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -uroot -ppassword <<EOF
03. use chbdb;
04. CREATE TABLE user (
05. id varchar(36) NOT NULL COMMENT '主键',
06. username varchar(50) NOT NULL COMMENT '用户名',
07. password varchar(50) NOT NULL COMMENT '用户密码',
08. createdate date NOT NULL COMMENT '创建时间',
09. age int(11) NOT NULL COMMENT '年龄',
10. PRIMARY KEY (`id`)
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#!/bin/bash
mysql -uroot -ppassword <<EOF
use chbdb;
CREATE TABLE user (
id varchar(36) NOT NULL COMMENT '主键',
username varchar(50) NOT NULL COMMENT '用户名',
password varchar(50) NOT NULL COMMENT '用户密码',
createdate date NOT NULL COMMENT '创建时间',
age int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢。
分享到:
相关推荐
本文总结几种shell操作mysql的方法,供大家参考
mysql操作使用shell操作时候的mysql操作,备份,恢复
使用一般的mysql命令或者是sql脚本都可以插入数据到mysql数据表中,我这里介绍如何是Shell批量的从CSV文件中添加数据到mysql数据库中,方便数据迁徙,测试数据的添加之类的工作。
今天这个备份分二个版本一个是linux上直接安装的mysql,另一种是docker上安装的mysql。基本操作都一样只是备份sql语句不同而已。可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab ...
shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) student.sql,可以导入到数据库中做假数据,方便处理练习数据库操作
今天这个备份分二个版本一个是linux上直接安装的mysql,另一种是docker上安装的mysql。基本操作都一样只是备份sql语句不同而已。可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab ...
防止误删服务器数据库 ,使用Shell脚本备份数据库: ### 1、需求分析: 1)每天凌晨2:10备份数据库atguiguDB到/data...-----》shell脚本写到/usr/sbin/mysql_db_backup.sh---》然后将脚本设置到crond执行 2)代码实现
主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中、命令行调用单独的SQL文件、使用管道符调用SQL文件等方法,需要的朋友可以参考下
主要介绍了shell脚本连接、读写、操作mysql数据库实例,本文包含连接、读取、插入、创建数据库等操作示例,需要的朋友可以参考下
mysql自动备份shell脚本,个人感觉写的挺好的,推荐一下! mysql数据库中存储着网站最核心最宝贵的数据,如果因为不可预测的原因导致数据损坏或丢失,对一个网站的打击是毁灭性的,一次又一次的教训提醒着我们一定要...
mysql 前端工具,可对MYSQL数据库进行所有常用的操作
今天小编就为大家分享一篇关于shell脚本操作mysql数据库删除重复的数据,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
shell一键安装MySQL5.7.38,包括密码修改,指定安装位置,创建普通用户等操作
基于shell脚本的Linux环境下MySQL快速部署方法.pdf
关于mysql的简单操作 Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 ...
(UNIX、Linux)MySql数据库全量备份和增量备份处理脚本,以及从ftp自动拷贝备份文件(完整操作,附带shell脚本)
附操作使用文档和3个脚本文件,可以快速一键使用linux命令部署java环境和所需工具方便快捷.jdk1.8.0_201+tomcat9.0.16+mysql
Shell脚本语言与编译型语言的差异 17 Shell分类 18 Shell使用 19 项目一 初识Linux Shell 20 [学习目标] 20 任务1.1 构建开发环境 22 任务1.2 vi/vim编辑器 33 1.2.1 vim使用实例 34 1.2.2 vim按键说明 36 任务1.3 ...