在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" #数据库中表的名称
- #创建数据库
- 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}"