MySql数据库备份与恢复
MySQL数据库备份与恢复
尽管采取了⼀些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失。
例如,意外的停电,不⼩⼼的操作失误等都可能造成数据的丢失。
所以为了保证数据的安全,我们需要定期对数据进⾏备份。如果数据库中的数据出现了错误,就需要使⽤备份好的数据进⾏数据还原,这样可以将损失降⾄最低。
。
数据库为什么需要备份
任何数据库都需要备份,备份数据是维护数据库必不可少的操作。
备份就是为了防⽌原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或者全部数据丢失后,备份⽂件可以帮我们回丢失的数据。
因此,数据备份是很重要的⼯作。
常见数据库备份的应⽤场景如下。
数据丢失应⽤场景:
⼈为操作失误造成某些数据被误操作
软件 BUG 造成部分数据或全部数据丢失
硬件故障造成数据库部分数据或全部数据丢失
安全漏洞被⼊侵数据恶意破坏
⾮数据丢失应⽤场景:
特殊应⽤场景下基于时间点的数据恢复
开发测试环境数据库搭建
相同数据库的新环境搭建
数据库或者数据迁移
以上列出的是⼀些数据库备份常见的应⽤场景,数据库备份还有其它应⽤场景,这⾥就不⼀⼀列举了。
⽐如磁盘故障导致整个数据库所有数据丢失,并且⽆法从已经出现故障的硬盘上⾯恢复出来时,可以通过最近时间的整个数据库的物理或逻辑备份数据⽂件,尽可能的将数据恢复到故障之前最近的时间点。
操作失误造成数据被误操作后,我们需要有⼀个能恢复到错误操作时间点之前的瞬间的备份⽂件存在,当然这个备份可能是整个数据库的备份,也可以仅仅只是被误操作的表的备份。
MySQL备份类型
备份是以防万⼀的⼀种必要⼿段,在出现硬件损坏或⾮⼈为的因素⽽导致数据丢失时,可以使⽤备份恢复数据,以将损失降低到最⼩程度,因此备份是必须的。
备份可以分为以下⼏个类型。根据备份的⽅法(是否需要数据库离线)可以将备份分为:
热备(Hot Backup)
热备份可以在数据库运⾏中直接备份,对正在运⾏的数据库操作没有任何的影响,数据库的读写操作可以正常执⾏。这种⽅式在MySQL 官⽅⼿册中称为 Online Backup(在线备份)。
按照备份后⽂件的内容,热备份⼜可以分为:
逻辑备份:在 MySQL 数据库中,逻辑备份是指备份出的⽂件内容是可读的,⼀般是⽂本内容。内容⼀般是由⼀条条 SQL
语句,或者是表内实际数据组成。如 mysqldump 和 SELECT * INTO OUTFILE 的⽅法。这类⽅法的好处是可以观察导出
⽂件的内容,⼀般适⽤于数据库的升级、迁移等⼯作。但其缺点是恢复的时间较长。
裸⽂件备份:裸⽂件备份是指复制数据库的物理⽂件,既可以在数据库运⾏中进⾏复制(如 ibbackup、xtrabackup 这类⼯
具),也可以在数据库停⽌运⾏时直接复制数据⽂件。这类备份的恢复时间往往⽐逻辑备份短很多。
按照备份数据库的内容来分,备份⼜可以分为:
完全备份:是指对数据库进⾏⼀个完整的备份,即备份整个数据库,如果数据较多会占⽤较⼤的时间和空间。
部分备份:是指备份部分数据库(例如,只备份⼀个表)。部分备份⼜分为:
增量备份需要使⽤专业的备份⼯具。指的是在上次完全备份的基础上,对更改的数据进⾏备份。也就是说每次备份只
会备份⾃上次备份之后到备份时间之内产⽣的数据。因此每次备份都⽐差异备份节约空间,但是恢复数据⿇烦。
差异备份指的是⾃上⼀次完全备份以来变化的数据。和增量备份相⽐,浪费空间,但恢复数据⽐增量备份简单。
冷备(Cold Backup)linux里grep什么意思
冷备份必须在数据库停⽌的情况下进⾏备份,数据库的读写操作不能执⾏。这种备份最为简单,⼀般只需要复制相关的数据库物理⽂件即可。这种⽅式在 MySQL 官⽅⼿册中称为 Offline Backup(离线备份)。
温备(Warm Backup)
温备份同样是在数据库运⾏中进⾏的,但是会对当前数据库的操作有所影响,备份时仅⽀持读操作,不⽀持写操作。
MySQL 中进⾏不同⽅式的备份还要考虑存储引擎是否⽀持,如 MyISAM 不⽀持热备,⽀持温备和冷备。⽽ InnoDB ⽀持热备、温备和冷备。
⼀般情况下,我们需要备份的数据分为以下⼏种:
表数据
⼆进制⽇志、InnoDB 事务⽇志
代码(存储过程、存储函数、触发器、事件调度器)
服务器配置⽂件
下⾯是⼏种常⽤的备份⼯具:
:逻辑备份⼯具,适⽤于所有的存储引擎,⽀持温备、完全备份、部分备份、对于 InnoDB 存储引擎⽀持热备。
cp、tar 等归档复制⼯具:物理备份⼯具,适⽤于所有的存储引擎、冷备、完全备份、部分备份。
lvm2 snapshot:借助⽂件系统管理⼯具进⾏备份。
mysqlhotcopy:名不副实的⼀个⼯具,仅⽀持 MyISAM 存储引擎。
:⼀款由 percona 提供的⾮常强⼤的 InnoDB/XtraDB 热备⼯具,⽀持完全备份、增量备份。
MySQL热备份及恢复
热备份是在数据库处于运⾏状态时直接备份,不影响现有业务的正常进⾏。热备份⼜细分为逻辑备份和裸⽂件备份,
逻辑备份
逻辑备份的最⼤优点就是对于各种存储引擎,都可以⽤同样的⽅法来备份。⽽冷备份则不同,不同的存储引擎的备份⽅法也各不相同。因此,对于不同存储引擎混合的数据库,⽤逻辑备份会更简单⼀些。
逻辑备份可以说是最简单,也是⽬前中⼩型系统最常⽤的备份⽅法。逻辑备份主要有以下⼏种⽅法:
mysqldump
mysqldump 是 MySQL ⾃带的逻辑备份⼯具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,然后将查询出的数据转换成对应的 INSERT 语句。当我们需要还原恢复这些数据时,只要执⾏这些 INSERT 语句,就能将对应的数据还原。所以有的资料也将这种备份⽅式称为 INSERT 备份。
恢复数据时可以使⽤mysql -uroot -p <backup.sql直接调⽤备份⽂件执⾏所有命令,将数据完全恢复到备份时候的状态。如果已经连接上了MySQL 服务器,那么可以通过source /path/backup.sql来进⾏恢复。
SELECT INTO…OUTFILE
SELECT INTO…OUTFILE 语句可以把表数据导出到⼀个⽂本⽂件中,且能将数据库中的表数据以特定分隔符进⾏分隔后记录在⽂本⽂件中,以达到逻辑备份的效果。
这种备份⽅式与 mysqldump ⽅法相⽐,使⽤的存储空间更⼩,数据格式更加清晰明确,编辑⽅便。但是这种⽅法只能导出或导⼊数据的内容,不包括表的结构,如果表的结构⽂件损坏,则必须先恢复原来的表的结构。⽽且这种⽅法不能在同⼀个备份⽂件中存在多个表的备份数据,增加了⽂件维护和恢复的成本。
这种备份⽅法恢复起来会稍微⿇烦⼀点,需要⼀个表⼀个表通过相关命令来进⾏恢复。当然如果是通过脚本来实现⾃动多表恢复也是⽐较⽅便的。恢复⽅法有 2 个,⼀个是通过 MySQL 的 LOAD DATA INFILE 命令来恢复数据,另⼀种⽅法就是通过 MySQL 提供的使⽤⼯具mysqlimport 来进⾏恢复。
mydumper
mydumper 是针对 MySQL 数据库备份的⼀个轻量级第三⽅的开源⼯具,备份⽅式为逻辑备份。它⽀持多线程,备份速度远⾼于原⽣态的mysqldump 以及其它众多优异特性。与其配套的相应恢复数据为 myloader ⼯具。DBA 称 mydumper 和 myloader 为备份界的“⼩钢炮”。我们可以看出所谓的逻辑备份就是备份 SQL 语句,然后恢复数据时执⾏备份 SQL,从⽽实现数据库数据的重现。逻辑备份完成后所形成的⽂件都可以直接编辑。
逻辑备份的作⽤如下:
通过逻辑备份,我们可以仅仅恢复备份中的部分数据⽽不需要全部恢复。不会影响不相关的数据;
通过全库的逻辑备份,我们可以在新的 MySQL 环境下完全重建出⼀个与备份时完全⼀样的数据库,并且不受平台类型限制;
通过特定条件的逻辑备份,我们可以将某些特定数据轻松迁移(或者同步)到其它的 MySQL 或另外
的数据库环境。
裸⽂件备份
裸⽂件备份主要在底层复制数据⽂件,所以备份速度要⽐逻辑备份更快。
我们利⽤ Percona 公司发布的⼀个 XtraBackup 热备份⼯具来完成裸⽂件备份,它是 Percona 公司的开源项⽬,据官⽅介绍它是世界上唯⼀⼀款开源的能够对 InnoDB 和 XtraDB 数据库进⾏热备的⼯具。
它的优点就是备份与恢复过程的速度很快,安全可靠,⽽且在备份过程中不会缩表,不影响现有业务。但它⽬前还是不能对表结构⽂件和其它⾮事务类型的表进⾏备份。
MySQL冷备份及恢复
冷备份可以称为 Offline Backup(离线备份)。这种备份最为简单,⼀般只需要复制相关的数据库物理⽂件到另外的位置即可。
由于 MySQL 服务器中的数据⽂件是基于磁盘的⽂本⽂件,所以最简单、最直接的备份操作,就是将数据⽂件直接复制出来。但是由于MySQL 服务器的数据⽂件在运⾏时期,总是处于打开和使⽤状态,因此备份⽂件不⼀定有效。为了解决该问题,在复制数据⽂件时,需要先停⽌ MySQL 服务器。
这样做的好处是可以保证数据库的完整性,备份过程简单且恢复速度相对快⼀些,但是关闭数据库会影响现有业务的进⾏。服务器停⽌运⾏期间,⽤户不能再继续访问⽹站。例如,⼀些电商⽹站店庆促销时,如果为了备份要停库,那么带来的代价损失将不可估量。所以冷备⼀般⽤于不是很重要、⾮核⼼的业务上⾯。
冷备份的优点如下:
备份简单、快速,只要复制相关⽂件即可。
备份⽂件易于在不同操作系统,不同 MySQL 版本上进⾏恢复。
恢复相当简单,只需要把⽂件恢复到指定位置即可。
恢复速度快,不需要执⾏任何 SQL 语句,也不需要重建索引。
低度维护,⾼度安全。
冷备份的缺点如下:
备份过程中,数据库不能做其它的⼯作,且必须是关闭状态。
InnoDB 存储引擎冷备的⽂件通常⽐逻辑⽂件⼤很多,因为表空间存放着很多其它的数据,如 undo 段,插⼊缓冲等信息。
若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
冷备也不总是可以轻易的跨平台。操作系统、MySQL 的版本、⽂件⼤⼩写敏感和浮点数格式都会成为问题。
数据库的物理⽂件主要由数据库的数据⽂件、⽇志⽂件以及配置⽂件等组成。MySQL 系统有⼀些共有的⽇志⽂件和系统表的数据⽂件。每种存储引擎的物理⽂件也不⼀样,
冷备的备份与恢复过程也很简单。仅仅需要如下⼏步:
1. 为了保证所备份数据的完整性,在停⽌ MySQL 数据库服务器之前,需要先执⾏ FLUSH TABLES 语句将所有数据写⼊到数据⽂件的
⽂本⽂件⾥。
2. 停掉 MySQL 服务,命令(2种⽅式)如下:
mysqladmin -uroot -proot shutdown
NET START mysql
3. 备份过程就是复制整个数据⽬录到远程备份机或者本地磁盘上,Linux 和 Windows 命令如下:mysql无法连接到服务器
Scp -r /data/mysql/ root@远程备份机ip:/新的⽬录
Copy -r /data/mysql/ 本地新⽬录
备份到本次磁盘也可以⼿动复制上述相关⽬录⾥的数据⽂件。
4. 恢复过程就更简单了,仅仅需要把已备份的数据⽬录替换原有的⽬录就可以了,最后重启 MySQL 服务。
恢复数据是数据库维护中最常⽤的操作,利⽤备份⽂件可以将 MySQL 数据库服务器恢复到备份时的状态,这样就可以将管理员的⾮常操作和计算机的故障造成的相关损失降到最⼩。
需要注意的是,通过复制数据⽂件这种⽅式实现数据恢复时,必须保证两个 MySQL 数据库的主版本号⼀致。只有两个 MySQL 数据库主版本号相同时,才能保证它们的数据⽂件类型是相同的。
MySQL冷备份所需物理⽂件
MyISAM存储引擎
MyISAM 存储引擎的所有数据默认存放在 C:/ProgramData/MySQL/MySQL Server 5.7/Data 路径下,即配置⽂件(my.ini或myf)中datadir 参数的值。
实际上不管我们使⽤的是 MyISAM 存储引擎还是其他存储引擎,每⼀个数据库都会在“datadir”⽬录下有⼀个⽂件夹(包括系统信息的数据库
mysql 也是⼀样)。
在各个数据库中每⼀个 MyISAM 存储引擎的表都会有 3 个⽂件存在,即记录表结构元数据的“.frm”⽂件,存储表数据的“.MYD”⽂件,存储索引数据的“.MYI”⽂件。
MyISAM 属于⾮事务性存储引擎,它没有⾃⼰的⽇志⽂件。所以 MyISAM 存储引擎的物理备份除了需要备份 MySQL 系统共有的物理⽂件之外,还需要备份上⾯的 3 种⽂件。
Innodb 存储引擎
Innodb 存储引擎属于事务性存储引擎,存放数据的位置也可能与 MyISAM 存储引擎有所不同,这主要取决于 Innodb 的相关配置。
指定 Innodb 存放数据和⽇志⽂件的位置参数为 innodb_data_home_dir、innodb_data_file_path 和 innodb_log_group_home_dir。以及决定 Innodb 的表空间存储⽅式参数 innodb_file_per_table,它决定 Innodb 是以共享表空间存放数据还是以独享表空间⽅式存储数据。
如果使⽤的是共享表空间的存储⽅式,那么需要备份 innodb_data_home_dir 和 innodb_data_file_path 参数设定的所有数据⽂件,以及datadir 中相应数据库⽬录下的所有 Innodb 存储引擎表的 .frm ⽂件。
⽽如果使⽤的是独享表空间,那么除了需要备份上⾯共享表空间⽅式所需要备份的所有⽂件之外,我们还需要备份 datadir 中相应数据库⽬录下的所有 .idb ⽂件,该⽂件中存放的才是独享表空间⽅式下 Innodb 存储引擎表的数据。
那么既然是使⽤独享表空间,为什么还要备份共享表空间“才使⽤到”的数据⽂件呢?其实这是很多⼈的⼀个共性误区,以为使⽤独享表空间的时候 Innodb 的所有信息就都存放在“datadir”所设定数据库⽬录下的“.ibd”⽂件中。实际上并不是这样的,“.ibd”⽂件中所存放的仅仅只是我们的表数据⽽已。
⼤家都很清楚,Innodb 是事务性存储引擎,它需要 undo 和 redo 信息,⽽不管 Innodb 使⽤的是共享还是独享表空间的⽅式来存储数据。与事务相关的 undo 信息以及其他的⼀些元数据信息,都是存放在 innodb_data_home_dir 和 innodb_data_file_path 这两个参数所设定的数据⽂件中的。所以要想 In
nodb 的物理备份有效,就必须备份 innodb_data_home_dir 和 innodb_data_file_path 参数所设定的数据⽂件。
此外,除了上⾯所说的数据⽂件之外,Innodb 还有存放⾃⼰的 redo 信息和相关事务信息的⽇志⽂件在 innodb_log_group_home_dir 参数所设定的位置。所以要想 Innodb 物理备份能够有效使⽤,我们还必须要备份 innodb_log_group_home_dir 参数所设定的位置的所有⽇志⽂件。
MySQL数据库迁移
数据库迁移就是把数据从⼀个系统移动到另⼀个系统上,迁移过程其实就是在源数据库备份和⽬标数据库恢复的过程组合。迁移的原因是多种多样的,⽐如:
exist函数用法需要安装新的数据库服务器
MySQL 版本更新
数据库管理系统的变更(如从 SQL Server 迁移到 MySQL)
根据实际操作等情况,可以将数据库迁移操作分成以下 3 种形式。
相同版本 MySQL 数据库之间的迁移。
不同版本 MySQL 数据库之间的迁移。
不同数据库间的迁移。
相同版本的迁移
相同版本的 MySQL 数据库是指主版本号⼀致的数据库。主版本号⼀致的数据库迁移最容易实现。由于迁移前后 MySQL 数据库的主版本号相同,所以可以通过复制数据库⽬录来实现数据库迁移。
最安全和最常⽤的⽅式是通过使⽤ mysqldump 命令进⾏数据库备份,然后使⽤ mysql 命令将备份⽂件还原到新的 MySQL 数据库。迁移时的备份和还原操作可以同时执⾏。
假设从⼀个名为 hostname1 的机器中备份出所有数据库,然后将这些数据库迁移到名为 hostname2 的机器上,具体语法形式如下:
mysqldump -h hostname1 -u root -password=password1 -all-databases
|
mysql -h hostname2 -u root -password=password2
其中:
符号“|”⽤来实现将命令 mysqldump 备份的⽂件送给 mysql 命令;
password1 为 hostname1 主机上 root ⽤户的密码;
password2 为 hostname2 主机上 root ⽤户的密码;
-all-databases 表⽰迁移全部的数据库,可省略。
不⽤版本的迁移
不同版本的 MySQL 数据库之间的数据迁移通常是 MySQL 升级的原因。例如,服务器使⽤ 4.0 版本的 MySQL 数据库,现在要升级为 5.7 版本的。这样就需要不同版本的 MySQL 数据库之间进⾏数据迁移。
不同版本下的数据库迁移,分为 2 种⽅式:
低版本数据库向⾼版本数据库进⾏迁移
vs2010有效序列号
⾼版本数据库向低版本数据库进⾏迁移
低版本数据库向⾼版本数据库进⾏迁移时,由于⾼版本会兼容低版本,所以该种⽅式也是最容易实现的操作。对于存储类型为 MyISAM 的表,最安全和最常⽤的操作是直接复制数据⽂件。对于存储类型为 InnoDB 的表,最安全和最常⽤的操作是执⾏ mysqldump 命令进⾏备份和执⾏ mysql 命令还原恢复数据。
但是⾼版本数据库向低版本数据库进⾏迁移时,因为⾼版本数据库可能有⼀些新的特性,这些特性是低版本数据库所不具有的,所以数据库迁移时要特别⼩⼼,最好使⽤ mysqldump 命令来进⾏备份,避免迁移时造成数据丢失。
不同数据库的迁移
电机2个电容怎么接不同数据库之间的迁移是指从其它类型的数据库迁移到 MySQL 数据库,或者从 MySQL 数据库迁移到其他类型的数据库。例如,某个⽹站原来使⽤ Oracle 数据库,因为运营成本太⾼等诸多原因,希望改⽤ MySQL 数据库。或者,某个管理系统原来使⽤ MySQL 数据库,因为某种特殊性能的要求,希望改⽤ Oracle 数据库。这样的不同数据库之间的迁移也经常会发⽣。但是这种迁移没有普通适⽤的解决办法。
其它数据库也有类似 mysqldump 这样的备份⼯具,可以将数据库中的⽂件备份成 sql ⽂件或普通⽂本。但是,不同的数据库⼚商并没有完全按照 SQL 标准来设计数据库,这就造成了不同数据库使⽤的 SQL 语句的差异。例如,微软的 SQL Server 软件使⽤的是 T-SQL 语⾔。T-SQL 中包含了⾮标准的 SQL 语句。这就造成了 SQL Server 和 MySQL 的 SQL 语句不能兼容。
除了 SQL 语句存在不兼容的情况外,不同的数据库之间的数据类型也有差异。例如,MySQL 不⽀持 SQL Server 中的 ntext、 Image 等数据类型。同样,SQL Server 也不⽀持 MySQL 中的 ENUM 和 SET 等数据类型。数据类型的差异也造成了迁移的困难。
从某种意义上说,这种差异是商业数据库公司故意造成的壁垒,这种⾏为是阻碍数据库市场健康发展的。
但是不同数据库服务器间的迁移并不是完全不可能。在 Windows 操作系统下,如果要实现从 MySQL 数据库服务器向 SQL SERVER 数据库服务器迁移,可以通过 MyODBC 来实现;如果要实现从 MySQL 数据库服务器向 ORACLE 数据库服务器迁移,可以先通过执⾏mysqldump 命令导出 sql ⽂件,然后⼿动修改 sql ⽂件中的 CREATE 语句。
MySQL mysqldump备份数据库电脑系统下载
数据库的主要作⽤就是对数据进⾏保存和维护,所以备份数据是数据库管理中最常⽤的操作。为了防⽌数据库意外崩溃或硬件损伤⽽导致的数据丢失,数据库系统提供了备份和恢复策略。
保证数据安全的最重要的⼀个措施就是定期的对数据库进⾏备份。这样即使发⽣了意外,也会把损失降到最低。
数据库备份是指通过导出数据或者复制表⽂件的⽅式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从⽽使数据库从错误状态恢复到备份时的正确状态。
MySQL 中提供了两种备份⽅式,即 mysqldump 命令以及 mysqlhotcopy 脚本。由于 mysqlhotcopy 只能⽤于 MyISAM 表,所以 MySQL 5.7移除了 mysqlhotcopy 脚本。
mysqldump 命令执⾏时,可以将数据库中的数据备份成⼀个⽂本⽂件。数据表的结构和数据将存储在⽣成的⽂本⽂件中。
备份⼀个数据库
使⽤ mysqldump 命令备份⼀个数据库的语法格式如下:
mysqldump -u username -p dbname [tbname ...]> filename.sql
对上述语法参数说明如下:
username:表⽰⽤户名称;
dbname:表⽰需要备份的数据库名称;
tbname:表⽰数据库中需要备份的数据表,可以指定多个数据表。省略该参数时,会备份整个数据库;
右箭头“>”:⽤来告诉 mysqldump 将备份数据表的定义和数据写⼊备份⽂件;
filename.sql:表⽰备份⽂件的名称,⽂件名前⾯可以加绝对路径。通常将数据库备份成⼀个后缀名为.sql的⽂件。
注意:mysqldump 命令备份的⽂件并⾮⼀定要求后缀名为.sql,备份成其他格式的⽂件也是可以的。例如,后缀名为.txt的⽂件。通常情况下,建议备份成后缀名为.sql的⽂件。因为,后缀名为.sql的⽂件给⼈第⼀感觉就是与数据库有关的⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论