您的位置:首页 > 运维架构 > Shell

shell脚本执行mysql语句

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

方案1

1

mysql
-uuser -ppasswd
-e"insert LogTable values(...)"
优点:语句简单

缺点:支持的sql相对简单

方案2

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

1

2

use chbdb;

source update.sql;
然后执行如下命令:

1

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

1

2

3

4

#!/bin/bash

mysql -u* -h* -p*
<<EOF

Your SQL script.

EOF
例如:

1

2

3

4

5

6

7

8

9

10

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

1

mysql
-uroot -ppassword <
UPDATE.SQL
优点:支持复杂的sql脚本

缺点:

1> 一旦中间出错,之后脚本就不会执行,例如:

如果第一张表已经存在,则会报出如下异常:

ERROR 1050 (42S01) at line 1 in file: ‘update.sql’: Table ‘user’ already exists

然后脚本退出,第二张表也就无法创建。

mysql -hhostname -Pport -uusername -ppassword
-e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法。

代码







#!/bin/bash HOSTNAME="192.168.111.84" #数据库信息 PORT="3306" USERNAME="root" PASSWORD="" DBNAME="test_db_test" #数据库名称 TABLENAME="test_table_test" #数据库中表的名称

#!/bin/bash

HOSTNAME="192.168.111.84"                              #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD=""

DBNAME="test_db_test"                                        #数据库名称
TABLENAME="test_table_test"                              #数据库中表的名称


Sql代码







#创建数据库
create_db_sql="create database ${DBNAME} IF NOT EXISTS ${DBNAME}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"

#创建表
create_table_sql="create table ${TABLE} IF NOT EXISTS ${TABLENAME} ( name varchar(20), id int(11) default 0 )"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${create_table_sql}"

#插入数据
insert_sql="insert into ${TABLENAME} values('billchen',2)"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${insert_sql}"

#查询
select_sql="select * from ${TABLENAME}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"

#更新数据
update_sql="update ${TABLENAME} set id=3"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${update_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"

#删除数据
delete_sql="delete from ${TABLENAME}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${delete_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: