数据库技术及应用课件第十三章 数据备份与恢复
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◈14--flush-logs, -F: 开始转储前刷新 MySQL 服务器日志文件。 该选 项要求 RELOAD 权限。
◈15--force, -f: 在表转储过程中,即使出现 SQL 错误也继续执行。 ◈16--lock-all-tables, -x: 对所有数据库中的所有表加锁。 在整体转储 过程中通过全局 锁定来实现。 该选项自动关闭--single-transaction 和-lock-tables。
MySQLdump 备份数据库语句的基本语法格式如下:
dbname 为需要备份的数据库名称;tbname 为 dbname 数据库中需 要备份的数据表,可以指定多个需要备份的 表;右 箭 头 符 号 “ >” 表 示 MySQLdump 将 备 份 数 据 表 的 定 义 和 数 据 写 入 备 份 文 件; filename. sql 为备份文件的名称。
使用 MySQLdump 命令备份
◈21--opt: 该选项是速记,等同于指定--add-drop-tables--add-locking,-create-option, --disable-keys-extended-insert, --lock-tables-quick 和--setcharset。 它可以快速进行转 储操作并产生一个能很快装入 MySQL 服务器 的转储文件。 该选项默认开启,但可以用-skip -opt 禁用。 要想禁用使用-opt 启用的选项,可以使用-skip 形式,例如--skip-add-drop-tables 或--skip-quick。
使用 MySQLdump 命令备份
【例 13. 3】 使用 MySQLdump 备份 booksDB 和 test 数据库,输 入语句如下:
该语句创建名称为 books_testDB_20160301. sql 的备份文件, 文件中包含了创建两个数 据库 booksDB 和 test_DB 所必需的所有语句。
使用 MySQLdump 命令备份
(1)使用 MySQLdump 备份单个数据库中的所有表 【例 13. 1】 使用 MySQLdump 命令备份数据库中的所有表。 为了更好地理解 MySQLdump 工具如何工作,本章给出一个完整的 数据库例子。 首先登 录 MySQL,按数据库结构创建 booksDB 数据库和 各个表,并插入数据记录。 完成数据插入后打开操作系统命令行输入窗口,可以看到备份文件包 含了一些信息,文 件开头首先表明了备份文件使用的 MySQLdump 工具的 版本号;然后是备份账户的名称和主 机信息,以及备份的数据库的名称,最 后是 MySQL 服务器的版本号,在这里为 5. 7. 10。 备份文件接下来的部分是一些 SET 语句,这些语句将一些系统变量
◈26--silent, -s: 沉默模式。 只有出现错误时才输出。 ◈27--socket = path, -S path: 当连接 localhost 时使用的套接字文件 (为默认主机)。 ◈28--user = user_name, -u user_name: 当连接服务器时 MySQL 使用的用户名。
◈22--password[ = password], --p[password]: 当连接服务器时使用的 密码。 如果使用 短选项形式(-p),选项和密码之间不能有空格。 如果在命令 行中--password 或--p 选项后 面没有密码值,则提示输入一个密码。 ◈23-port = port_num, -P port_num: 用于连接的 TCP / IP 端口号。 ◈24-protocol = {TCP | SOCKET | PIPE | MEMORY}: 使用的连接协议。
使用 MySQLdump 命令备份 (3)使用 MySQLdump 备份多个数据库 如果要使用 MySQLdump 备份多个数据库,需要使用--databases 参数。 备份多个数据库 的语句格式如下:
使用--databases 参数之后,必须指定至少一个数据库的名称,多个 数据库名称之间用空 格隔开。
第十三章 数据备份与恢复
学习目标:
✓ 了解什么是数据备份 ✓ 掌握各种数据备份的方法 ✓ 掌握各种数据恢复的方法 ✓ 掌握数据库迁移的方法 ✓ 掌握表的导入和导出的方法 ✓ 熟练掌握综合案例中数据备份与恢复的方法和技巧
13. 1 数据备份
数据备份是数据库管理员非常重要的工作之一。 系统意外崩 溃或者硬件的损坏都可能 导致数据库的丢失,因此,MySQL 管理员应 定期备份数据库,使得在意外情况发生时,尽可能地减少损失。
tbname 表示数据库中的表名,多个表名之间用空格隔开。 备份表 和备份数据库中所有表的语句中不同的地方在于,要在数据库名称 dbname 之后 指定需要备份的表名称。
使用 MySQLdump 命令备份 【例 13. 2】 备份 booksDB 数据库中的 books 表,输入语句如 下:
该语句创建名称为 books_20160301. sql 的备份文件,文件中包 含了前面介绍的 SET 语 句等内容,不同的是,该文件只包含 books 表的 CREATE 和 INSERT 语句。
使用 MySQLdump 命令备份
◈17--lock-tables, -1: 开始转储前锁定所有表。 用 READ LOCAL 锁 定表以允许并行插 入 MyISAM 表。 对于事务表(如 InnoDB 和 BDB),-single-transaction 是一个更好的选项,因 为它根本不需要锁定表。
13. 1. 1 使用 MySQLdump 命令备份
MySQLdump 是 MySQL 提供的一个非常有用的数据库备份工具。 MySQLdump 命令执行时,可以将数据库备份成一个文本文件,该文件中实 际上包含了多个 CREATE 和 INSERT 语 句,使用这些语句可以重新创建 表和插入数据。
◈18 - - no - create - db, - n: 该 选 项 禁 用 CREATE DATABASE / ∗! 32312 IF NOT EXISTS∗/ db_name 语句,如果给出--database 或--alldatabase 选项,则包含到输出中。
◈19--no-create-info, -t: 只导出数据,而不添加 CREATE TABLE 语句。 ◈20--no-data, -d: 不写表的任何行信息,只转储表的结构。
使用 MySQLdump 命令备份
◈25--replace, --r -replace 和--ignore: 控制替换或复制唯一键值已 有记录的输入记录 的处理。 如果指定--replace,新行替换有相同的唯一键 值的已有行;如果指定--ignore,复制 已有的唯一键值的输入行被跳过。 如 果不指定这两个选项,当发现一个复制键值时会出现 一个错误,并且忽视文 本文件的剩余部分。
使用 MySQLdump 命令备份
值赋给用户定义变 量,以确保被恢复的数据库的系统变量和原来备份时的 变量相同,例如:
该 SET 语句将当前系统变量 character_set_client 的值赋给用户定 义变量@old_character_ set_client。 其他变量与此类似。
备份文件的最后几行 MySQL 使用 SET 语句恢复服务器系统变量原 来的值,例如:
另外,使用--all-databases 参数可以备份系统中所有的数据库,语句 格式如下:
使用参数--all-databases 时,不需要指定数据库名称。
使用 MySQLdump 命令备份
【例 13. 4】 使用 MySQLdump 备份服务器中的所有数据库,输 入语句如下:
提示:该语句创建名称为 alldbinMySQL. sql 的备份文件,文件中包 含了对系统中所有数 据库的备份信息。
另外应注意,备份文件开始的一些语句以数字开头,这些数字代表 了 MySQL 版本号,该 数字告诉我们,这些语句只有在指定的 MySQL 版 本或者比该版本高的情况下才能执行。 例 如 40101,表明这些语句只有 在 MySQL 版本号为 4. 01. 01 或者更高的条件下才可以被执行。
使用 MySQLdump 命令备份 (2)使用 MySQLdump 备份数据库中的某个表 在前面 MySQLdump 语法中介绍过,MySQLdump 还可以备份数据 库中的某个表,其语法 格式如下:
该语句将用户定义的变量@old_character_set_client 中保存的值赋 给实际的系统变量 character_set_client。
使用 MySQLdump 命令备份
备份文件中的字符开头的行为注释语句,以“ / ∗!”开头、“∗/ ” 结尾的语句为可执行的 MySQL 注释,这些语句可以被 MySQL 执行,但 在其他数据库管理系统将被作为注释忽略,这 可以提高数据库的可移植 性。
使用 MySQLdump 命令备份
MySQLdump 其他常用选项如下: ◈1--add-drop-database: 在每个 CREATE DATABASE 语句前添加 DROP DATABASE 语句。 ◈2--add-drop-tables: 在每个 CREATE TABLE 语句前添加 DROP TABLE 语句。 ◈3-add-locking: 用 LOCK TABLES 和 UNLOCK TABLES 语句引用每 个表转储。 重载转储文件时插入得更快。 ◈4-all-database, -A: 转储所有数据库中的所有表。 与使用--database 选项相同,在命 令行中命名所有数据库。 ◈5-comments[ = 0 | 1]: 如果设置为 0,禁止转储文件中的其他信息。 -skip-comments与--comments= 0的结果相同。默认值为 1,即包括额外信息。
如果在服务器上进行备份,并且表均为 MyISAM 表,应考虑使用 MySQLhotcopy,因为可 以更快地进行备份和恢复。
MySQLdump 还有一些其他选项可以用来制定备份过程,例如--opt 选项,该选项将打开 -quick,-add-locks,-extended-insert 等多个选项。 使 用--opt 选项可以提供最快速的数据 库转储。
◈8--complete-insert, -c: 使用包括列名的完整的 INSERT 语句。 ◈9--debug[ = debug_options], -#[debug options]: 写调试日志。 ◈10--delete, -D:导入文本文件前清空表。 ◈11- - default - character - set = charset: 使用 charsetas 默认字符集。 如果没 有 指 定, MySQLdQLdump 命令备份
◈6-compact: 产生少量输出。 该选项禁用注释并启用-skip-add-droptables, -no-set- names, -skip-disable-keys 和-skip-add-locking 选项。
◈7-compatible = name: 产生比其他数据库系统或旧的 MySQL 服务器 更兼容的输出。 值 可以为 ansi, MySQL323,MySQL40, postgresql, oracle, mssql, db2,maxdb, no_key_options, no tables options 或者 no_field_options。
使用 MySQLdump 命令备份
◈12--delete-master-logs: 在主复制服务器上,完成转储操作后删除二 进制日志。 该选项 自动启用--master-data。
◈13--extended-insert, -e: 使用包括几个 VALUES 列表的多行 INSERT 语法。 这样使转 储文件更小,重载文件时可以加速插入。
◈15--force, -f: 在表转储过程中,即使出现 SQL 错误也继续执行。 ◈16--lock-all-tables, -x: 对所有数据库中的所有表加锁。 在整体转储 过程中通过全局 锁定来实现。 该选项自动关闭--single-transaction 和-lock-tables。
MySQLdump 备份数据库语句的基本语法格式如下:
dbname 为需要备份的数据库名称;tbname 为 dbname 数据库中需 要备份的数据表,可以指定多个需要备份的 表;右 箭 头 符 号 “ >” 表 示 MySQLdump 将 备 份 数 据 表 的 定 义 和 数 据 写 入 备 份 文 件; filename. sql 为备份文件的名称。
使用 MySQLdump 命令备份
◈21--opt: 该选项是速记,等同于指定--add-drop-tables--add-locking,-create-option, --disable-keys-extended-insert, --lock-tables-quick 和--setcharset。 它可以快速进行转 储操作并产生一个能很快装入 MySQL 服务器 的转储文件。 该选项默认开启,但可以用-skip -opt 禁用。 要想禁用使用-opt 启用的选项,可以使用-skip 形式,例如--skip-add-drop-tables 或--skip-quick。
使用 MySQLdump 命令备份
【例 13. 3】 使用 MySQLdump 备份 booksDB 和 test 数据库,输 入语句如下:
该语句创建名称为 books_testDB_20160301. sql 的备份文件, 文件中包含了创建两个数 据库 booksDB 和 test_DB 所必需的所有语句。
使用 MySQLdump 命令备份
(1)使用 MySQLdump 备份单个数据库中的所有表 【例 13. 1】 使用 MySQLdump 命令备份数据库中的所有表。 为了更好地理解 MySQLdump 工具如何工作,本章给出一个完整的 数据库例子。 首先登 录 MySQL,按数据库结构创建 booksDB 数据库和 各个表,并插入数据记录。 完成数据插入后打开操作系统命令行输入窗口,可以看到备份文件包 含了一些信息,文 件开头首先表明了备份文件使用的 MySQLdump 工具的 版本号;然后是备份账户的名称和主 机信息,以及备份的数据库的名称,最 后是 MySQL 服务器的版本号,在这里为 5. 7. 10。 备份文件接下来的部分是一些 SET 语句,这些语句将一些系统变量
◈26--silent, -s: 沉默模式。 只有出现错误时才输出。 ◈27--socket = path, -S path: 当连接 localhost 时使用的套接字文件 (为默认主机)。 ◈28--user = user_name, -u user_name: 当连接服务器时 MySQL 使用的用户名。
◈22--password[ = password], --p[password]: 当连接服务器时使用的 密码。 如果使用 短选项形式(-p),选项和密码之间不能有空格。 如果在命令 行中--password 或--p 选项后 面没有密码值,则提示输入一个密码。 ◈23-port = port_num, -P port_num: 用于连接的 TCP / IP 端口号。 ◈24-protocol = {TCP | SOCKET | PIPE | MEMORY}: 使用的连接协议。
使用 MySQLdump 命令备份 (3)使用 MySQLdump 备份多个数据库 如果要使用 MySQLdump 备份多个数据库,需要使用--databases 参数。 备份多个数据库 的语句格式如下:
使用--databases 参数之后,必须指定至少一个数据库的名称,多个 数据库名称之间用空 格隔开。
第十三章 数据备份与恢复
学习目标:
✓ 了解什么是数据备份 ✓ 掌握各种数据备份的方法 ✓ 掌握各种数据恢复的方法 ✓ 掌握数据库迁移的方法 ✓ 掌握表的导入和导出的方法 ✓ 熟练掌握综合案例中数据备份与恢复的方法和技巧
13. 1 数据备份
数据备份是数据库管理员非常重要的工作之一。 系统意外崩 溃或者硬件的损坏都可能 导致数据库的丢失,因此,MySQL 管理员应 定期备份数据库,使得在意外情况发生时,尽可能地减少损失。
tbname 表示数据库中的表名,多个表名之间用空格隔开。 备份表 和备份数据库中所有表的语句中不同的地方在于,要在数据库名称 dbname 之后 指定需要备份的表名称。
使用 MySQLdump 命令备份 【例 13. 2】 备份 booksDB 数据库中的 books 表,输入语句如 下:
该语句创建名称为 books_20160301. sql 的备份文件,文件中包 含了前面介绍的 SET 语 句等内容,不同的是,该文件只包含 books 表的 CREATE 和 INSERT 语句。
使用 MySQLdump 命令备份
◈17--lock-tables, -1: 开始转储前锁定所有表。 用 READ LOCAL 锁 定表以允许并行插 入 MyISAM 表。 对于事务表(如 InnoDB 和 BDB),-single-transaction 是一个更好的选项,因 为它根本不需要锁定表。
13. 1. 1 使用 MySQLdump 命令备份
MySQLdump 是 MySQL 提供的一个非常有用的数据库备份工具。 MySQLdump 命令执行时,可以将数据库备份成一个文本文件,该文件中实 际上包含了多个 CREATE 和 INSERT 语 句,使用这些语句可以重新创建 表和插入数据。
◈18 - - no - create - db, - n: 该 选 项 禁 用 CREATE DATABASE / ∗! 32312 IF NOT EXISTS∗/ db_name 语句,如果给出--database 或--alldatabase 选项,则包含到输出中。
◈19--no-create-info, -t: 只导出数据,而不添加 CREATE TABLE 语句。 ◈20--no-data, -d: 不写表的任何行信息,只转储表的结构。
使用 MySQLdump 命令备份
◈25--replace, --r -replace 和--ignore: 控制替换或复制唯一键值已 有记录的输入记录 的处理。 如果指定--replace,新行替换有相同的唯一键 值的已有行;如果指定--ignore,复制 已有的唯一键值的输入行被跳过。 如 果不指定这两个选项,当发现一个复制键值时会出现 一个错误,并且忽视文 本文件的剩余部分。
使用 MySQLdump 命令备份
值赋给用户定义变 量,以确保被恢复的数据库的系统变量和原来备份时的 变量相同,例如:
该 SET 语句将当前系统变量 character_set_client 的值赋给用户定 义变量@old_character_ set_client。 其他变量与此类似。
备份文件的最后几行 MySQL 使用 SET 语句恢复服务器系统变量原 来的值,例如:
另外,使用--all-databases 参数可以备份系统中所有的数据库,语句 格式如下:
使用参数--all-databases 时,不需要指定数据库名称。
使用 MySQLdump 命令备份
【例 13. 4】 使用 MySQLdump 备份服务器中的所有数据库,输 入语句如下:
提示:该语句创建名称为 alldbinMySQL. sql 的备份文件,文件中包 含了对系统中所有数 据库的备份信息。
另外应注意,备份文件开始的一些语句以数字开头,这些数字代表 了 MySQL 版本号,该 数字告诉我们,这些语句只有在指定的 MySQL 版 本或者比该版本高的情况下才能执行。 例 如 40101,表明这些语句只有 在 MySQL 版本号为 4. 01. 01 或者更高的条件下才可以被执行。
使用 MySQLdump 命令备份 (2)使用 MySQLdump 备份数据库中的某个表 在前面 MySQLdump 语法中介绍过,MySQLdump 还可以备份数据 库中的某个表,其语法 格式如下:
该语句将用户定义的变量@old_character_set_client 中保存的值赋 给实际的系统变量 character_set_client。
使用 MySQLdump 命令备份
备份文件中的字符开头的行为注释语句,以“ / ∗!”开头、“∗/ ” 结尾的语句为可执行的 MySQL 注释,这些语句可以被 MySQL 执行,但 在其他数据库管理系统将被作为注释忽略,这 可以提高数据库的可移植 性。
使用 MySQLdump 命令备份
MySQLdump 其他常用选项如下: ◈1--add-drop-database: 在每个 CREATE DATABASE 语句前添加 DROP DATABASE 语句。 ◈2--add-drop-tables: 在每个 CREATE TABLE 语句前添加 DROP TABLE 语句。 ◈3-add-locking: 用 LOCK TABLES 和 UNLOCK TABLES 语句引用每 个表转储。 重载转储文件时插入得更快。 ◈4-all-database, -A: 转储所有数据库中的所有表。 与使用--database 选项相同,在命 令行中命名所有数据库。 ◈5-comments[ = 0 | 1]: 如果设置为 0,禁止转储文件中的其他信息。 -skip-comments与--comments= 0的结果相同。默认值为 1,即包括额外信息。
如果在服务器上进行备份,并且表均为 MyISAM 表,应考虑使用 MySQLhotcopy,因为可 以更快地进行备份和恢复。
MySQLdump 还有一些其他选项可以用来制定备份过程,例如--opt 选项,该选项将打开 -quick,-add-locks,-extended-insert 等多个选项。 使 用--opt 选项可以提供最快速的数据 库转储。
◈8--complete-insert, -c: 使用包括列名的完整的 INSERT 语句。 ◈9--debug[ = debug_options], -#[debug options]: 写调试日志。 ◈10--delete, -D:导入文本文件前清空表。 ◈11- - default - character - set = charset: 使用 charsetas 默认字符集。 如果没 有 指 定, MySQLdQLdump 命令备份
◈6-compact: 产生少量输出。 该选项禁用注释并启用-skip-add-droptables, -no-set- names, -skip-disable-keys 和-skip-add-locking 选项。
◈7-compatible = name: 产生比其他数据库系统或旧的 MySQL 服务器 更兼容的输出。 值 可以为 ansi, MySQL323,MySQL40, postgresql, oracle, mssql, db2,maxdb, no_key_options, no tables options 或者 no_field_options。
使用 MySQLdump 命令备份
◈12--delete-master-logs: 在主复制服务器上,完成转储操作后删除二 进制日志。 该选项 自动启用--master-data。
◈13--extended-insert, -e: 使用包括几个 VALUES 列表的多行 INSERT 语法。 这样使转 储文件更小,重载文件时可以加速插入。