当前位置: 代码网 > it编程>前端脚本>Powershell > Shell环境下MySQL数据库常用操作指南

Shell环境下MySQL数据库常用操作指南

2026年08月10日 Powershell 我要评论
一、shell 中导入/导出数据1.本地导入数据(load data local infile)mysql -u root -p -e "load data local infile '/path/t

一、shell 中导入/导出数据

1. 本地导入数据(load data local infile)

mysql -u root -p -e "load data local infile '/path/to/file.csv' into table stu.students fields terminated by ',' lines terminated by '\n' ignore 1 rows;"

注意:需确保 mysql 启用了 local_infile(默认可能关闭):

show variables like 'local_infile'; -- 查看
set global local_infile = 'on';     -- 临时开启(需权限)
  • 客户端连接时也要加 --local-infile=1
    mysql --local-infile=1 -u root -p
  • ignore 1 rows 跳过 csv 的标题行。
  • 文件路径是客户端所在机器的路径(不是数据库服务器)。

2. 导出数据(mysqldump)

基础导出表结构+数据:

mysqldump -u root -p123456 stu students > /root/data/mydb.sql

⚠️ 安全警告:密码明文写在命令行会泄露(可通过 history 查看)。
推荐做法

  • 使用配置文件(~/.my.cnf):
    [client]
    user=root
    password=123456
    然后:
    mysqldump stu students > /root/data/mydb.sql
  • 或交互式输入密码(不写 -p123456,只写 -p

导出仅数据(无建表语句):

mysqldump -u root -p --no-create-info stu students > data_only.sql

导出仅结构(无数据):

mysqldump -u root -p --no-data stu students > schema_only.sql

备份并压缩(推荐):

alias db_backup='mysqldump -u root -p --single-transaction --quick --lock-tables=false stu students | gzip > /root/data/mydb_$(date +%y%m%d).sql.gz'

参数说明

  • --single-transaction:innodb 一致性快照(避免锁表)
  • --quick:逐行读取,防内存溢出
  • --lock-tables=false:配合 --single-transaction 避免锁

二、查看 ddl 与当前数据库

-- 查看建表语句(修正拼写错误:show create table)
show create table students\g

-- 查看当前数据库
select database();
-- 或
status;  -- 显示更多信息,包括当前库

三、limit 限制查询

-- 前10条
select * from students limit 10;

-- 分页:跳过前20条,取10条(第3页)
select * from students limit 20, 10;
-- 或
select * from students limit 10 offset 20;

注意limit 无 order by 时结果顺序不确定!

四、alter table 表结构修改(扩展与规范)

增加字段(add)

-- 推荐指定位置(如 first / after)
alter table students add column enroll_date date default '2025-12-12' after name;

修改字段(modify vs change)

操作语法用途
modifymodify column_name new_type [options]改类型/属性,不改名
changechange old_name new_name new_type [options]可改名+改类型
-- modify:只改类型和注释
alter table students modify datet datetime comment '入学时间';

-- change:改名 + 改类型
alter table students change stu_id student_id varchar(50) not null;

🔔 重要modify 必须重写完整字段定义(类型、是否为空、默认值等),否则会被重置!

删除字段(drop)

alter table students drop column length;

修改字符集

-- 修改表字符集(不影响已有数据编码!)
alter table students convert to character set utf8mb4 collate utf8mb4_unicode_ci;

-- 更彻底(同时转数据):
alter table students convert to character set utf8mb4;

 建议使用 utf8mb4(支持 emoji),而非 utf8(mysql 的伪 utf8)

重命名表

rename table students to student_info;
-- 或
alter table students rename to student_info;

五、删除表(drop)

-- 删除表(结构+数据全丢)
drop table students;

-- 安全写法:先检查是否存在
drop table if exists students;

六、补充:实用 shell 脚本技巧

1. 自动备份脚本(带日期、压缩、日志)

#!/bin/bash
date=$(date +%y%m%d_%h%m)
backup_dir="/backup/mysql"
db="stu"
table="students"
user="root"

mkdir -p $backup_dir

mysqldump --single-transaction -u$user $db $table | gzip > $backup_dir/${db}_${table}_$date.sql.gz

echo "$(date): backup completed: ${db}_${table}_$date.sql.gz" >> /var/log/db_backup.log

2. 设置定时任务(crontab)

# 每天凌晨2点备份
0 2 * * * /root/scripts/db_backup.sh

七、安全与最佳实践总结

项目建议
密码不要明文写命令行,用 .my.cnf 或交互输入
备份用 --single-transaction + 压缩 + 保留多版本
字符集统一用 utf8mb4
alter大表结构变更谨慎操作(可能锁表)
load data注意文件权限、路径、分隔符匹配
权限生产环境避免用 root,创建专用账号

到此这篇关于shell环境下mysql数据库常用操作指南的文章就介绍到这了,更多相关shell mysql常用操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com