当前位置:首页 > 数据库教程 >

MYSQL使用mysqldump导出某个表的部分数据

发布时间:2024-02-24 12:47:00 作者:佚名 阅读:(20)

MySQLdump是MySQL⾃带的导出数据⼯具,通常我们⽤它来导出我们需要的数据,接下来云梦编程为大家介绍一下MYSQL使用mysqldump导出某个表的部分数据,有需要的小伙伴可以参考一下:

MYSQL使用mysqldump导出某个表的部分数据

1、导出思路:

mysqldump命令中带有一个 --where/-w 参数,它用来设定数据导出的条件,使用方式和SQL查询命令中中的where基本上相同,有了它,我们就可以从数据库中导出你需要的那部分数据了。

2、语法:

mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径

3、相关参数:

参数 缩写 是否默认 说明
--print-defaults - - 用于打印默认参数
--no-defaults - - 禁止从默认配置文件中读取默认参数,
mysqldump默认会从/etc/my.cnf
/etc/mysql/my.cnf~/.my.cnf默认配置文件中
读取mysqldumpmariadb-dumpclient、
client-serverclient-mariadb等客户端配置。
--defaults-file - - 指定mysqldump默认配置文件,
mysqldump将仅从该文件读取默认配置。
--defaults-extra-file - - 指定mysqldump额外的配置文件,
mysqldump将除了从默认配置文件读取配置外,
还将从该文件读取。
--defaults-group-suffix - - 除默认组外,额外读取的组名,多个用逗号分隔。
--all-databases -A False 备份所有库
--all-tablespaces -Y False 备份所有表空间
--no-tablespaces -y False 不备份任何表空间
--add-drop-database False CREATE DATABASE前添加DROP DATABASE
--add-drop-table True CREATE TABLE前添加DROP TABLE
--skip-add-drop-table - 禁用**--add-drop-table**
--add-drop-trigger False CREATE TRIGGER前添加DROP TRIGGER
--add-locks True INSERT语句前添加LOCK TABLES,语句后添加UNLOCK TABLES;
--skip-add-locks - 禁用**--add-locks**
--allow-keywords False 允许创建包含关键字的列名
--apply-slave-statements False CHANGE MASTER前添加STOP SLAVE,备份文件末尾添加START SLAVE
--character-sets-dir - 字符集文件目录,用--character-sets-dir=name指定
--comments* -i True 添加注释信息
--skip-comments - 禁用**--comments***
--compatible - 与其他数据库或不同mysql版本匹配,需要4.1.0以上版本;
可以设置的值有ansi, mysql323, mysql40, postgresql,
oracle,mssql, db2, maxdb, no_key_options,
no_table_options, no_field_options
--compatible=name指定,多个用逗号分隔
--compact False 禁用注释和前后的dump文件信息,提供较少输出,适用于调试;
默认启用以下选项:--skip-add-drop-table--skip-add-locks
--skip-comments--skip-disable-keys--skip-set-charset
--complete-insert -c False 使用带有完整列名的INSERT语句,默认不带列名
--compress -C False 在服务端和客户端的协议中使用压缩
--create-options -a True 包含所有MySQL的特定创建选项
--skip-create-options - 禁用**--create-options**
--databases -B False 备份多个数据库,如果没有使用--tables选项,
后边的值都将被认为是数据库名,多个用逗号分隔;
将会在输出文件中添加'USE db_name'
--debug -# 非调试版本
--debug-check False 在退出时检查内存和打开文件的使用情况
--debug-info False 在退出时打印一些调试信息,包括用户占用CPU事件,
系统占用CPU事件,上下文切换等系统信息。
--default-character-set utf8 设置默认字符集,--default-character-set=utf8
--delayed-insert False 使用INSERT DELAYED而表示INSERT插入数据,
INSERT DELAYED在空闲时候插入数据,当有如SELECT等其他操作时候,
先处理其他操作,新版本已经不支持了。
--delete-master-logs False 备份后从master删除日志,该选项会自动启用--masert-data选项
--disable-keys -K True INSERT语句前添加
'/*!40000 ALTER TABLE tb_name DISABLE KEYS */;禁用索引,
INSERT语句后添加
'/*!40000 ALTER TABLE tb_name ENABLE KEYS */;启用索引;
因为一次创建索引比逐行创建效率更高,这样可以提高数据恢复效率。
--skip-disable-keys 禁用**--disable-keys**
--dump-slave 0 会将二进制文件位置和主文件名附加到备份文件中,
默认为0
如果为1,将会以CHANGE MASTER语句方式输出到备份文件;
如果为2CHANGE MASTER语句将会以注释形式输出到备份文件;
除非指定了--single-transaction,否则
将自动开启全局锁--lock-all-tables;
该选项会自动关闭--lock-tables
--events -E False 备份事件
--extended-insert -e True 使用包含多个值列表的多行插入语法。
--skip-extended-insert - 禁用**--extended-insert**
--fields-terminated-by - 结合**-T,--tab=path**选项使用,
tb_name.txt文件中的字段以指定字符串结尾,默认是TAB
--fields-terminated-by=name
--fields-enclosed-by - 结合**-T,--tab=path**选项使用,
tb_name.txt文件中的字段以指定字符串括起来,默认无
--fields-enclosed-by=name
--fields-optionally-enclosed-by - 结合**-T,--tab=path**选项使用,
tb_name.txt文件中的字段以指定字符串括起来,默认无
--fields-optionally-enclosed-by=name
--fields-escaped-by - 结合**-T,--tab=path**选项使用,
tb_name.txt文件中的字段以指定字符串转义,默认\,
效果就是将\替换成指定字符,
--fields-escaped-by=name
--flush-logs -F False 备份前生成新的服务器备份库的二进制日志文件,
备份多个库则每个库都会生成一个,
需要RELOAD权限,
如果只想生成一次,则应搭配--lock-all-tables--master-data使用
--flush-privileges False 在备份后执行FLUSH PRIVILEGES
在备份包含MySQL数据库或任何依赖MySQL中的数据库的数据库时需要使用
--force -f False 忽略错误
--gtid - --master-data=1dump-slave=1搭配使用,
当启用时,输出内容中将设置GTID位置替代binlog文件和偏移量,
binlog文件和偏移量将仅作为注释显示;
当禁用时,与之相反,GTID将仅作为注释显示
--help -? - 显示mysqldump工具帮助信息
--hex-blob False BINARY, VARBINARY, BLOB格式的二进制字符串备份成十六进制
--host -h - 指定连接主机,--host=name
--ignore-database - 忽略备份的库,忽略多个库需要多次使用该指令;
--all-database-A搭配使用
--ignore-database=db_name
--ignore-table-data - 忽略备份的表的数据,忽略多个表的数据需要多次使用该指令;
必须同时指定数据库和表名;
--ignore-table-data=db_name.tb_name
--ignore-table - 忽略备份的表,忽略多个表需要多次使用该指令;
必须同时指定数据库和表名;
--ignore-table=db_name.tb_name
--include-master-host-port False 在使用--dump-slave时候,
CHANGE MASTER TO语句中添加MASTER_HOST=hostMASTER_PORT=port
--insert-ignore False 使用INSERT IGNORE替代INSERT,有重复数据时候忽略报错
--lines-terminated-by - 结合**-T,--tab=path**选项使用,
tb_name.txt文件以指定字符串结尾,默认无,
--lines-terminated-by=name
--lock-all-tables -x False 在备份期间通过获取全局读取锁来锁定所有库和所有表,
将会自动关闭--single-transaction--lock-tables
--lock-tables -l True 对需要备份的库的所有表加读锁,
事务型表使用--single-transaction而非**--lock-tables**
--skip-lock-tables - 关闭**--lock-tables**
--log-error - 指定文件中添加告警和错误日志,--log-error=file
--log-queries True 到数据恢复时,如果日志记录是打开的,把查询记录到常规和慢查询日志中
--skip-log-queries - 禁用**--log-queries**
--master-data 0 将日志文件名和位置附加到备份文件中,默认值为0
如果值为1,将会以CHANGE MASTER命令的形式附加,
如果值为2,CHANGE MASTER命令将会以注释形式附加,
除非指定了--single-transaction
否则将自动开启全局读锁选项--lock-all-tables
该选项会自动关闭--lock-tables
--master-data=0
--max-allowed-packet 25165824 与服务器通信的最大数据包长度,应该大于单行数据大小,
小于mysql服务端设置的该变量大小,默认24M
--net-buffer-length 1046528 TCP/IP和Socket通信的缓冲区大小
--no-autocommit False INSERT语句前添加set autocommit=0;
INSERT语句及UNLOCK TABLES后添加commit;,
autocommit=0表示当前连接的操作都会被当成一个事务,
直到调用commit提交或ROLLBACK可以回滚;
autocommit=1每条语句会被当成单独的事务,自动commit
--no-create-db -n False --all-databases--databases搭配使用,
取消创建数据库CREATE DATABASE...IF NOT EXISTS语句
--no-create-info -t False 取消创建数据表相关语句,
包括DROP TABLE IF EXISTS...CREATE TABLE...语句
--no-data -d False 仅备份数据结构,不备份数据
--no-set-names -N - 等同于--skip-set-charset
--opt - 等同于--add-drop-table --add-locks --create-options --quick
--extended-insert --lock-tables --set-charset --disable-keys
--skip-opt - 禁用**--opt**,
禁用--add-drop-table --add-locks --create-options --quick
--extended-insert --lock-tables --set-charset --disable-keys
--order-by-primary False 如果备份表存在主键和唯一键,将会以主键和唯一键排序,
对于需要将MyISAM数据导入INNODB表时非常有用,
但会增加数据备份时长
--password -p - 用户账号的密码,如果没有给出密码则会提示输入密码,--password=name
--port -P 0 MySQL服务连接端口,--port=3306
--protocol - 连接协议,可选的有tcp、socket、pipe、memory--protocol=name
--quick -q True 不缓冲查询,直接将结果转向标准输出
--skip-quick - 禁用**--quick**
--quote-names -Q True 表名、列名、字段等加反引号括起来
--skip-quote-names - 禁用**--quote-names**
--replace False 使用REPLACE INTO语句替代INSERT INTO语句,
REPLACE INTO会先根据主键或唯一索引判断是否有重复数据,
如果有则替换旧数据,没有则直接插入新数据,
没有主键或唯一索引的表可能导致重复数据
--result-file=name -r - 结果输出到指定文件中,
用在使用回车换行符\r\n分隔文本的系统中,如WindowsDOS
--result-file=name
--routines -R False 备份函数和存储过程
--set-charset True 再备份文件中添加字符集相关信息,
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--skip-set-charset - 禁用**--set-charset**
--single-transaction False 通过在一个事务中备份所有表来创建一致性快照,
设置事务隔离级别为可重复读,即Repeatable Read
并向服务端发送START TRANSACTION,在这期间不会锁表
其他连接对数据的修改对事务内相同的查询结果没有影响,
仅对支持事务隔离的引擎有效,当前只支持INNODB,
为保障备份有效性,其他连接不可以使用ALTER TABLE
DROP TABLETRUNCATE TABLERENAME TABLE语句,
因为事务快照不会与它们隔离,
该选项会自动关闭选项--lock-tables
--dump-date True 在备份文件末尾添加备份完成日期和时间,
-- Dump completed on 2021-03-02 3:56:16
--skip-dump-date - 禁用**--dump-date**,
备份文件结尾为-- Dump completed,不再显示日期和时间
--socket=name -S - Socket连接文件地址,--socket=name
--ssl False 连接启用SSL(使用其他标志自动启用)
--ssl-ca - 指定PEM格式的CA文件名称,自动启用--ssl--ssl-ca=name
--ssl-capath - 指定CA文件目录,自动启用--ssl--ssl-capath=name
--ssl-cert - 指定PEM格式的X509证书文件名称,自动启用--ssl--ssl-cert=name
--ssl-cipher - 用于SSL加密的密码,自动启用--ssl--ssl-cipher=name
--ssl-key - 指定PEM格式的X509密钥文件名称,自动启用--ssl--ssl-key=name
--ssl-verify-server-cert False 用主机名验证证书中的Common Name字段
--tab -T - 在指定目录创建TAB分隔的tb_name.txt文件和数据备份文件tb_name.sql
仅当mysqldump与服务器在一台服务器时使用,
目录需要设置chown mysql.mysql tab_path,
--tab=name
--tables - 覆盖选项--databases,指定单个数据库的多张表
--triggers True 备份表关联的触发器
--skip-triggers - 禁用**--triggers**
--tz-utc True 在备份文件开头添加SET TIME_ZONE='+00:00'
允许备份的数据库中有不同时区的TIMESTAMP类型数据,
或要将这一类数据迁移到不同时区时
--skip-tz-utc - 禁用**--tz-utc**
--user -u - 用于连接的用户账号,--user=name
--verbose -v False 显示备份过程中各阶段信息
--version -V - 打印版本号
--where=name -w - 仅备份选定的数据记录,在查询语句后边添加WHERE条件语句
--where=name
--xml -X - 备份文件以xml格式导出
--plugin-dir - 客户端插件目录,--plugin-dir=name
--default-auth - 客户端验证插件名称,--default-auth=name

4、实例:

    (1)、从news_list数据库的sdata表中导出addtime>1682352000 且 addtime<1682524800的数据到 /root/web_news.sql 这个文件中

	mysqldump -uroot -p yundreams web_news --where=" pushtime>1682352000 and pushtime<1682524800" >/root/web_news.sql

    (2)、导出*.txt格式的文本文件

	mysqldump -uroot -p yundreams web_news --where=" pushtime>1682352000 and pushtime<1682524800" >/root/web_news.txt

    (3)、导出结构不导出数据

	mysqldump -d -uroot -p yundreams > yundreams.sql

    (4)、导出数据不导出结构

	mysqldump -t -uroot -p yundreams > yundreams.sql

    (5)、导出特定表的结构

	mysqldump  -uroot -p -B yundreams > yundreams.sql


以上就是云梦编程为大家介绍的关于mysql导出某个表的部分数据的方法的全部内容了,了解更多相关文章请关注云梦编程网!

© 2023 - 云梦编程网 版权所有 鲁ICP备2021017318号-4