1. 将mysql查询结果导出到指定文件:
用 mysql -e 生成结果导入指定文件时
● 若要同时显示语句本身:-v
● 若要增加查询结果行数:-vv
● 若要增加执行时间: -vvv
不用在mysql提示符下执行sql语句,即可在shell中操作sql语句的方法,示例模板:
mysql -hhostname -Pport -uusername -ppassword -e sql语句
mysql -hhostname -Pport -uusername -ppassword -e sql语句 > xxx.txt // 将查询结果集导入txt文件(重定向)// 将mysql查询结果重定向到 test.txt(mysql登录命令 -e "sql语句" > xxx.txt),示例:
mysql -h x.x.x.x -P xx -uroot -p'xxxxxx' -D xxx -e "SELECT a FROM b WHERE create_time > 'xxxx-xx-xx xx:xx:xx' GROUP BY d HAVING COUNT(1) < 5 LIMIT 10;" > test.txt
2. 导入.sql文件到数据库
rz 上传.sql文件
source ./xxx.sql
3. mysqldump从数据库导出 建表语句/insert语句(数据库表数据) 到文本:
- 普通导出:
mysqldump -h 数据库ip -P 数据库端口 -u用户 -p'密码' --databases 数据库名 --tables 表名1 表名2 > test.sql - 条件导出(带drop表结构、表数据):
mysqldump -h 数据库ip -P 数据库端口 -u用户 -p'密码' --databases 数据库名 --where=" 字段名='字段值' " > test.sql
示例:
- 导出多条记录至一条insert语句中(导出结果包含自增id字段,如何过滤掉):
mysqldump -h xx.xxx.xx.xxx -P xxxx -uroot -p'xxxxxxxxxx' --databases xxxxxxx --skip-add-drop-table --complete-insert --tables xxx --where="create_time>'2021-12-09 00:00:00'" > test.sql- 导出多条记录至多条insert语句中(导出结果包含自增id字段):
mysqldump -h xx.xxx.xx.xxx -P xxxx -uroot -p'xxxxxxxxxx' --databases xxxxxxx --skip-add-drop-table --complete-insert --skip-extended-insert --tables xxx--fields-terminated-by="id"--where="create_time>'2021-12-09 00:00:00'" > test.sql
可选参数:
mysqldump会导致锁表,innodb需加上 --single-transaction 选项,参考:mysqldump锁表问题
--skip-tz-utc:timestamp数据类型导出时会有时区问题,导出机器默认为东八区时区,导出时的TIME_ZONE=‘+00:00‘ 这样导出的数据和表里看到的差了8小时。如果想在数据导出时不默认进行时区的转换,可以在导出语句中增加参数 --skip-tz-utc,这样导出的timestamp数据和在表里看到的时候是一样的
--tables:表1 表2 为可选字段
--skip-add-drop-table :取消drop表语句
--skip-extended-insert :每条记录占一行
--complete-insert :带字段名的完整insert语句
--no-data:只导出表结构,不导出数据
补充:
mysqldump 不支持导出指定字段(忽略指定字段),都是对应表的全字段导出,后续再自己在文本中手动去除不需要的字段即可。另外也可以参考该方法:mysql 导出数据库部分字段或部分数据_kezhen的专栏-CSDN博客_mysqldump 导出部分字段