Linux shell操作mysql数据库深入解析

在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据、导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考。

方案1


代码如下:

mysql -uuser -ppasswd -e"insert LogTable values(...)"

优点:语句简单
缺点:支持的sql相对简单

方案2
准备一个sql脚本,名字为update.sql,例如:


代码如下:

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,内容如下:


代码如下:

use chbdb;
source update.sql

然后执行如下命令:


代码如下:

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脚本,格式如下:


代码如下:

#!/bin/bash
mysql -u* -h* -p* <<EOF
    Your SQL script.
EOF

例如:


代码如下:

#!/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,然后执行如下命令:


代码如下:

mysql -uroot -ppassword < update.sql

优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。

大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢。

(0)

相关推荐

  • 利用Shell脚本实现远程MySQL自动查询

    下面这个脚本是一个简单用来执行远程数据库查询的命令,相信大家都能看得懂,这对于有些需要每天自动检查数据库或是执行某些语句的兄弟,是很有帮助的,只要稍加修改就可以 复制代码 代码如下: #!/bin/shHOST=192.168.5.40USER=abcPASS=123456QUERY=`mysql -h$HOST -u$USER -p$PASS << EOFuse testdb;select * from person where name='LiMing';exitEOF`echo $QUE

  • Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求:   1,每天4点备份mysql数据:   2,为节省空间,删除超过3个月的所有备份数据:   3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim backup_mysql.sh mysqldump -uroot -p123456 --all-databases > /data/dbdata/mysqlbak/`date +%Y%m%d`.sql find

  • Shell下实现免密码快速登陆MySQL数据库的方法

    背景 当我们在 Shell 下想要通过 mysql-client 登陆到 MySQL 数据库的时候,我们总是需要非常麻烦的输入一次又一次的密码. 而且,如果你的 root 密码是高度随机的话(LastPass大法好),那么你登陆一次 MySQL 数据库的成本就会非常大了. 通常我们登陆数据库的时候都是这样登陆的,如下 root@imlonghao:~# mysql -uroot -p Enter password: 那么,有没有一个办法能够既安全,又能简单方便地登陆到数据库去呢? 方法 答案当然

  • Linux shell操作mysql数据库深入解析

    在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据.导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考. 方案1 复制代码 代码如下: mysql -uuser -ppasswd -e"insert LogTable values(...)" 优点:语句简单缺点:支持的sql相对简单 方案2准备一个sql脚本,名字为update.sql

  • 原生Java操作mysql数据库过程解析

    这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入数据库驱动的jar包 以通过maven引入mysql driver为例 1.1 到http://mvnrepository.com 搜索 mysql 1.2 复制所需maven配置文件到工程的 pom.xml <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-

  • Python基于DB-API操作MySQL数据库过程解析

    Python提供了一个标准数据库API,称为DB-API,用于处理基于SQL的数据库. 与任何底层数据库的交互都可以使用DB-API,因为DB-API在代码与驱动程序之间提供了一个抽象层,可以根据需要替换底层数据库,而无需丢弃现有的代码. DB-API与底层数据库交互示例: ①代码 ⇆ ②使用DB-API ⇆ ③数据库驱动程序 ⇆ ④底层数据库(如MySQL等) 使用DB-API操作MySQL数据库例子 1.Windows安装MySQL数据库驱动程序MySQL-Connector/Python

  • Linux下实现C++操作Mysql数据库

    想用C++写项目,数据库是必须的,所以这两天学了一下C++操作MySQL数据库的方法.也没有什么教程,就是在网上搜的知识,下面汇总一下. 连接MySQL数据库有两种方法:第一种是使用ADO连接,不过这种只适合Windows平台:第二种是使用MySQL自己的C API函数连接数据库.我是在Linux平台下开发,所以就采用第二种方法,有很多Api函数,但是常用的就几个,我也是就用到其中的几个. API函数 1.mysql_real_connect() 连接一个mysql服务器 MYSQL *mysq

  • linux下安装mysql数据库5.6源码安装,修改登录用户密码

    本篇内容主要给大家讲解一下如何在linux下安装MYSQL数据库,并以安装MYSQL5.6版本为例子教给大家进行登录用户名和密码的修改等操作. 源码下载地址http://dev.mysql.com/downloads/mysql/5.6.html#downloads tar.gz地址:https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz 选择Generic Linux (Architecture Independent

  • Linux操作系统操作MySQL常用命令小结

    下面给大家分享mysql常用命令, -- 启动数据库 service myslqd start; -- 进入MySQL -u root -p/mysql -h localhost -u root -p DatabaseName; -- 列出数据库 show database; -- 创建数据库 create database XXXX; -- 选择数据库 use DatabaseName; -- 罗列表 show table; -- 显示表格的属性 show columns from table

  • PHP使用mysqli操作MySQL数据库的简单方法

    PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 . 而 mysqli 恰恰也支持了这些新特性. 一. 建立和断开连接 与 MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库 , 以及最后关闭连接 .与 mysqli 几乎所有的特性一样 , 这一点可以使用面向对象的方法来完成,也可以采用过程化的方式完成. 1. 创建一个 mysqli 的对象 $_mys

  • 详解在Windows环境下访问linux虚拟机中MySQL数据库

    Linux虚拟机:VMware +ubuntu16.04.4 windows本机:Navicat for MySQL 1.虚拟机中下载安装MySQL VMware下载安装和ubuntu16.04.4下载安装,请自行百度查询,本文默认这些已经安装好了. 在虚拟机中Ctrl+Alt+T打开一个终端,输入命令 sudo apt-get install mysql-server mysql-client ,然后按照提示输入. 等待安装完成,可以输入命令:whereis mysql 查看mysql的安装位

  • linux定时备份MySQL数据库并删除以前的备份文件(推荐)

    备份数据库,这是必须会用到的,今天上午花了几个小时整理了一下,结果不错.下面详细的走一遍 一丶选择一个比较大位置来保存备份文件(创建文件就行) 使用mkdir来创建文件夹,这个简单. 二丶检查有没安装crond,如果没有,先安装 rpm -qa|grep cron  安装后会是 一般没有安装,所以先 yum -y install vixie-cron 然后再 yum -y install crontabs 这样服务就安装好了. 三丶写备份脚本 vi  /var/spool/cron/name.s

  • gorm操作MySql数据库的方法

    1.表中字段区分大小写的设置 在使用gorm查询的时候,会出现账户名A和a是一样的情况,是因为mysql默认不区分大小写造成的 1.问题产生的原因 MySQL在Windows下都不区分大小写. MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 1.数据库名与表名是严格区分大小写的: 2.表的别名是严格区分大小写的: 3.列名与列的别名在所有的情况下均是忽略大小写的: 4.变量名也是严格区分大小写的: MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-

随机推荐