查看“Mysqldump - 数据库备份程序”的源代码
←
Mysqldump - 数据库备份程序
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
mysqldump客户端实用程序执行逻辑备份,生成一组可以执行以恢复原始数据库对象定义和表数据的SQL语句。它将一个或多个MySQL数据库备份或传输到另一个SQL服务器。mysqldump命令还可以生成CSV、其他定界文本或XML格式的输出。 <br> <blockquote>提示 考虑使用MySQL Shell转储实用程序,它提供多线程并行转储、文件压缩和进度信息显示功能,以及诸如Oracle Cloud Infrastructure Object Storage流式传输、MySQL HeatWave服务兼容性检查和修改等功能。可以使用MySQL Shell加载转储实用程序将转储轻松导入到MySQL服务器实例或MySQL HeatWave服务DB系统中。 </blockquote> <br> mysqldump至少需要转储表的SELECT权限、转储视图的SHOW VIEW权限、转储触发器的TRIGGER权限,如果未使用–single-transaction选项,则还需要LOCK TABLES权限。如果未使用–no-tablespaces选项,则需要在8.0.21及更高版本中使用PROCESS()权限,并在8.0.32及更高版本中使用RELOAD或FLUSH_TABLES权限(如果gtid_mode=ON且–set-gtid=purged=ON|AUTO)。 <br> 要重新加载转储文件,您必须具有执行其中包含的语句所需的权限,例如为由这些语句创建的对象分配适当的CREATE权限。 <br> mysqldump输出可能包括更改数据库排序规则的ALTER DATABASE语句。这些可能在转储存储程序时保留其字符编码。要重新加载包含此类语句的转储文件,需要对受影响的数据库的ALTER权限。 <br> <blockquote>注意 使用Windows上的PowerShell通过输出重定向创建的文件具有UTF-16编码: <pre>mysqldump [options] > dump.sql</pre> 但是,UTF-16不是允许作为连接字符集的(参见不允许的客户端字符集),因此无法正确加载该转储文件。要解决此问题,请使用–result-file选项,它在ASCII格式中创建输出: <pre>mysqldump [options] --result-file=dump.sql</pre></blockquote> <br> 不建议在服务器上启用GTID时(gtid_mode=ON)加载包含系统表的转储文件。mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,当启用GTID时,这不允许。 <br> == 性能和可扩展性考虑 == mysqldump的优势包括在恢复之前查看或编辑输出的便利性和灵活性。您可以克隆开发和DBA工作所需的数据库,或为测试生成现有数据库的轻微变化。它不是用于大量数据备份和恢复的快速或可扩展解决方案。对于大量数据,即使备份步骤花费合理时间,恢复数据也可能非常慢,因为重新播放SQL语句涉及插入、索引创建等磁盘I/O。 <br> 对于大规模备份和恢复,物理备份更合适,以复制数据文件的原始格式,以便可以快速恢复。 <br> 如果您的表主要是InnoDB表,或者您有一个混合了InnoDB和MyISAM表的表,可以考虑使用mysqlbackup,它是MySQL Enterprise的一部分。此工具为InnoDB备份提供了高性能,最小干扰;它可以备份来自MyISAM和其他存储引擎的表;它还提供了一些方便的选项来适应不同的备份场景。 <br> mysqldump可以按行检索和转储表内容,也可以从表中检索整个内容并将其缓冲在内存中再转储。缓冲在内存中可能是一个问题,如果您正在转储大型表。要按行转储表,请使用–quick选项(或–opt,后者启用–quick)。–opt选项(因此–quick)默认启用,因此要启用内存缓冲,请使用–skip-quick。 <br> 如果您使用较新版本的mysqldump生成要重新加载到非常旧的MySQL服务器的转储,请使用–skip-opt选项而不是–opt或–extended-insert选项。 <br> == 调用语法 == 通常有三种方法可以使用mysqldump——为了转储一个或多个表的集合、一个或多个完整的数据库集合或整个MySQL服务器——如上所示: <pre>mysqldump [options] db_name [tbl_name ...] mysqldump [options] --databases db_name ... mysqldump [options] --all-databases</pre> <br> 要转储整个数据库,不要在db_name后命名任何表,或使用–databases或–all-databases选项。 <br> 要查看支持您的mysqldump版本的选项列表,请输入命令mysqldump –help。 <br> == 示例 == 要备份整个数据库: <pre>mysqldump db_name > backup-file.sql</pre> <br> 将dump文件重新加载到服务器: <pre>mysql db_name < backup-file.sql</pre> <br> 另一种重新加载dump文件的方法: <pre>mysql -e "source /path-to-backup/backup-file.sql" db_name</pre> <br> mysqldump还非常适用于通过从一个MySQL服务器复制数据来填充数据库: <pre>mysqldump --opt db_name | mysql --host=remote_host -C db_name</pre> <br> 您可以使用一条命令备份多个数据库: <pre>mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql</pre> <br> 要备份所有数据库,请使用–all-databases选项: <pre>mysqldump --all-databases > all_databases.sql</pre> <br> 对于InnoDB表,mysqldump提供了一种在线备份的方法: <pre>mysqldump --all-databases --master-data --single-transaction > all_databases.sql</pre> <br> 或者从MySQL 8.0.26开始: <pre>mysqldump –all-databases –source-data –single-transaction > all_databases.sql</pre> <br> 此备份在dump开始时获取对所有表的全局读锁(使用FLUSH TABLES WITH READ LOCK)。一旦获得此锁,就会读取二进制日志坐标并释放锁。如果在发出FLUSH语句时正在运行长时间更新语句,MySQL服务器可能会在那些语句完成之前停滞不前。在那之后,dump变为无锁,对表中的读写操作不受影响。如果MySQL服务器接收到的更新语句执行时间很短(以执行时间为准),则初始锁定期不应引起注意,即使有大量更新。 <br> 对于时点恢复(也称为“回滚”,当您需要恢复旧备份并重放自该备份以来发生的变化时),通常有用的是轮换二进制日志或至少知道dump对应的二进制日志坐标: <pre>mysqldump --all-databases --master-data=2 > all_databases.sql</pre> <br> 或者从MySQL 8.0.26开始: mysqldump –all-databases –source-data=2 > all_databases.sql <br> 或者: <pre>mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql</pre> <br> 或者从MySQL 8.0.26开始: <pre>mysqldump --all-databases --flush-logs --source-data=2 > all_databases.sql</pre> <br> –source-data或–master-data选项可以与–single-transaction选项同时使用,提供一种方便的方法,用于在存储使用InnoDB存储引擎的表之前进行在线备份,以便进行时点恢复。 <br> 要选择–opt除了某些功能之外的效果,请为每个功能使用–skip选项。要禁用扩展插入和内存缓冲区,请使用–opt –skip-extended-insert –skip-quick。(实际上,–skip-extended-insert –skip-quick足够了,因为–opt默认启用。) <br> 要反转–opt的所有功能,除了禁用索引和表锁定,请使用–skip-opt –disable-keys –lock-tables。 <br> == 限制 == * mysqldump默认不会转储performance_schema或sys schema。要转储这些中的任何一个,请在命令行上明确指定它们。您还可以使用–databases选项指定它们。对于performance_schema,还要使用–skip-lock-tables选项。 * mysqldump不会转储INFORMATION_SCHEMA模式。 * mysqldump不会转储InnoDB CREATE TABLESPACE语句。 * mysqldump不会转储NDB Cluster ndbinfo信息数据库。 * mysqldump包括用于mysql数据库的dump的general_log和slow_query_log表的重新创建语句。Log表内容不会被转储。 <br> <span id="mysqlimport---数据导入程序"></span> = mysqlimport - 数据导入程序 = mysqlimport客户端提供了LOAD DATA SQL语句的命令行界面。大多数mysqlimport选项直接对应于LOAD DATA语法的子句。 <br> 调用mysqlimport的方式如下: <pre>mysqlimport [options] db_name textfile1 [textfile2 ...]</pre> <br> 对于命令行上命名的每个文本文件,mysqlimport会从文件名中删除任何扩展名,并使用结果来确定要导入文件内容的表的名称。例如,命名为patient.txt、patient.text和patient的文件都将导入到一个名为patient的表中。 <br> 以下是演示mysqlimport用法的示例会话: <pre>$> mysql -e ‘CREATE TABLE imptest(id INT, n VARCHAR(30))’ test $> ed a 100 Max Sydow 101 Count Dracula . w imptest.txt 32 q $> od -c imptest.txt 0000000 1 0 0 a x S y d o w 0 0000020 1 o u n t D r a c u l a $> mysqlimport –local test imptest.txt test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 $> mysql -e ‘SELECT * FROM imptest’ test +——+—————+ | id | n | +——+—————+ | 100 | Max Sydow | | 101 | Count Dracula | +——+—————+</pre>
返回至“
Mysqldump - 数据库备份程序
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息