mysql备份的几种方式(mysql有哪些备份方式,各个备份方式有)

2024-06-30 08:10:22 0

mysql备份的几种方式(mysql有哪些备份方式,各个备份方式有)

各位老铁们,大家好,今天由我来为大家分享mysql备份的几种方式,以及mysql有哪些备份方式,各个备份方式有的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

mysql有哪些备份方式,各个备份方式有

常用xtra和mysqldump,前者物理备份(简单理解为物理文件复制),速度快,后者逻辑备份(导出的是可执行的SQL),备份集小,兼容性好表格形式对比,比较清楚些

MySQL 常用备份工具流程解析

下面我们就看一下常见的备份工具,以及目前最流行的 Percona XtraBackup 的备份流程。

MySQL 常见的备份工具主要分为三种:

这里先说一下 binlog 备份,它只是把 binlog 又复制了一份,并且需要在逻辑备份或者物理备份的基础上才能进行数据恢复,无法单独进行数据恢复。

mysqldump 备份出的文件就是 sql 文件,其核心就是对每个表执行 select ,然后转化成相应的 insert 语句。mysqldump 的备份流程大致如下:

从上面可以看出在 mysqldump 备份期间,备份到某个数据库时,该数据库下的表都会处于只读状态,无法对表进行任何变更,直到该库下的表备份完毕,这对于线上环境一般是无法接受的。若是指定了--master-data或者 --dump-slave 则会在备份开始时加全局读锁(FLUSH TABLES WITH READ LOCK),直到备份结束。当然我们可以选一个从库进行备份,这样就不会影响线上业务。另外使用 mysqldump 备份还有一个最大的好处,因为备份出来的是 sql 语句,所以它支持跨平台和跨版本的数据迁移或者恢复,这是物理备份无法做到的。

但是也正是因为 mysqldump 备份出来的是 sql 语句,在使用时要更加注意,否则可能会酿成大祸。例如,使用 mysqldump 常见的问题有:

所以使用 mysqldump 时一定要了解各个选项的作用,以及确认备份出来的 sql 文件里会有什么操作,会对现有数据造成什么影响。

Mydumper 原理与 Mysqldump 原理类似,最大的区别是引入了多线程备份,每个备份线程备份一部分表,当然并发粒度可以到行级,达到多线程备份的目的。这里不再单独介绍。

Percona XtraBackup 是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,是基于 InnoDB 的崩溃恢复功能来实现的。它的基本工作原理如下:

Percona XtraBackup 在进行恢复时会应用拷贝的 redo log ,应用已提交的事务,回滚未提交的事物,将数据库恢复到一致性状态。因为 Percona XtraBackup 备份出来的是物理文件,所以在使用备份出的文件进行恢复或者迁移时,不会像 mysqldump 那样会存在很多问题。

使用 XtraBackup 备份时根据备份参数设置不同,对数据库的变更会造成不同程度的影响,具体影响会在下文分析。

通过对比发现,XtraBackup 具有对数据库影响小,且能快速恢复的优点,在日常备份中是首选;mysqldump 使用相对更加灵活,但是使用是要注意对数据库原有数据的影响。

备份策略主要有:全量备份和增量备份,再加上 binlog 备份。

目前去哪儿网数据库备份主要采用 XtraBackup 全量备份 +binlog 备份。数据库的重要级别不同,全量备份的频率不同。备份程序主要架构如下:

说明:

Percona XtraBackup 是目前备份 MySQL 使用最广泛的工具。在备份过程中,数据库可以进行正常的读写或者其他变更操作,但是偶尔也会遇见备份引起的元数据锁,或提交事务时发现被 binlog lock 阻塞等情况。下面我们就看一下 Percona XtraBackup 的备份流程和加锁时机。

说明:以下对 Percona XtraBackup 的分析都是基于 2.4.23 的版本,其他版本会略有差别,但是关键步骤基本相同。

XtraBackup 在备份开始时,会创建一个后台线程,专门用于拷贝数据库的 redo log 。首先 XtraBackup 会扫描每组 redo log 的头部,找出当前的 checkpoint lsn ,然后从该 lsn 后顺序拷贝所有的 redo log ,包括后续新产生的 redo log 。该线程会一直持续到将非事务表完全拷贝完成,才会安全退出。备份日志输出中会记录拷贝开始时的 checkpoint lsn 。日志输出如下:

在拷贝ibd文件之前,会先扫描数据库的数据文件目录,获取ibdata1,undo tablespaces及所有的ibd文件列表,并会记录相应的 space id,因为在恢复时需要这些 space id来找到对应 doublewrite buffer里页面的内容,以及对应的redo log条目。然后开始循环拷贝ibdata1,undo tablespaces及所有的ibd文件。 这里可通过设置--parallel进行多线程备份,提高物理文件的拷贝效率。不设置则默认为1。

在所有ibd文件拷贝完成后,XtraBackup开始备份非ibd文件。这一部分的逻辑比较复杂,因为备份非ibd文件前需要加锁,具体是否会加锁主要受到--no-lock 参数设置的影响。

若是设置了--no-lock为TRUE,则不会使用"FLUSH TABLES WITH READ LOCK"去加全局读锁,但是若备份过程中对non-InnoDB表执行了DDL或者DML操作, 这会导致备份的不一致,恢复出来的数据就会有问题。所以是不建议将--no-lock为TRUE,默认值是FALSE,也就是在不指定该选项的情况下会在备份非ibd文件前加全局读锁。

下面我们结合源码来看看判断是否加全局锁这部分的具体流程逻辑:

流程图如下:

总结来看:

1)若--no-lock为FALSE(默认值),则先施加全局读锁,然后再进行拷贝文件,另外若 --safe-slave-backup 设置为TRUE ,则会在加全局锁之前关闭SQL_THREAD线程;

2)若--no-lock为TRUE,则不会施加锁,直接进行拷贝文件。

加锁的逻辑主要由lock_tables_maybe实现,先看一下lock_tables_maybe源代码,如下:

lock_tables_maybe 函数简化处理流程如下:

1)若备份实例上已经加锁( LOCK TABLES FOR BACKUP / FLUSH TABLES WITH READ LOCK)或者设置lock-ddl-per-table 则直接返回;

2)若支持备份锁,则执行LOCK TABLES FOR BACKUP;

3)若不支持备份锁,则执行 FLUSH TABLES WITH READ LOCK。根据相应选项设置,在执行该操作前会判断是否有执行中的DDL/DML,以及等待超时时间,是否kill 对应的未结束的事务等。

从上文中我们还看到一个参数--safe-slave-backup ,该参数的主要作用是:

若是在从库执行的备份操作时设置了该参数,可以防止因从库同步主库操作,而导致XtraBackup长时间请求不到锁而造成备份失败。

若是设置了 --safe-slave-backup 为TRUE,那么会执行"STOP SLAVE SQL_THREAD",并等待Slave_open_temp_tables 为零才开始拷贝非 ibd 文件,Slave_open_temp_tables 为零说明SQL thread执行的事务都已经完成,这样就能保证备份的一致性。并且此时也不会有在执行的事务阻塞 XtraBackup 施加全局锁。

备份完非 ibd 文件后,将会备份 slave 和 binlog 信息。

mysql-bin.000004 2004 6b7bda9f-15f0-11ec-ba14-fa163ea367a4:1-83,9841546e-15f0-11ec-9557-fa163e736db4:1

需要注意,在支持备份锁的实例上备份,指定了 --slave-info 或--binlog-info 均会先施加 binlog 备份锁( LOCK BINLOG FOR BACKUP),这会阻塞任何会更改 binlog 位点的操作。

备份完数据库的所有文件和binlog等相关信息,备份工作就基本完成了,之后主要执行的操作如下:

1)执行"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS",将所有的redo log刷盘;

2)停止redo log复制线程;

3)释放全局读锁(备份锁),binlog锁;

4)开启SQL_THREAD;

5)拷贝ib_buffer_pool和ib_lru_dump文件;

6)生成配置文件backup-my.cnf;

7)打印备份信息到xtrabackup_info文件,这些信息主要包含备份时使用的参数信息,备份起止时间,binlog位点信息,以及将会回到的lsn点。

下面是xtrabackup_info记录的部分内容:

加锁对应的函数是 mdl_lock_tables ,释放锁对应的函数是 mdl_unlock_all,主要是执行COMMIT,结束 mdl_lock_tables 中开启的显式事务,来释放MDL锁。mdl_lock_tables 流程如下:

上面参数--lock-ddl和--lock-ddl-per-table是在 Percona XtraBackup 2.4.8 之后添加的,因为 MySQL 5.7 新增了一个叫做 Sorted Index Builds 的功能,这会导致某些 DDL 操作不记录重做日志而导致备份失败。使用--lock-ddl或--lock-ddl-per-table 就会在备份开始时施加锁,阻止 DDL 操作。

另外,若备份时指定了--lock-ddl或--lock-ddl-per-table,则在备份非 ibd 文件时就不是再有加锁操作。

注意:LOCK TABLES FOR BACKUP和LOCK BINLOG FOR BACKUP 语句只有在支持备份锁的实例上才会执行,Percona Server for MySQL已经在 5.6.16-64.0 版本开始支持这种更加轻量的备份锁。

Q1: 使用 XtraBackup 备份的文件进行恢复时,恢复到哪个时间点? A1:恢复到执行 LOCK BINLOG FOR BACKUP 或 FLUSH TABLES WITH READ LOCK 的时间点,因为这时任何改变 binlog 位点的操作都会被阻塞,redo log和binlog 是一致的。

Q2: 在开启 binlog 的情况下,MySQL 的奔溃恢复是同时依赖 binlog 和 redo log 这两种日志的,为什么XtraBackup 不用备份binlog?

A2:因为在备份中有执行LOCK BINLOG FOR BACKUP/FLUSH TABLES WITH READ LOCK,阻止了任何改变binlog位点的操作,这样只需要根据redo log将有commit log 的事务提交,没有commit log的事务进行回滚即可。

Q3: 使用Percona XtraBackup备份完成后redo的位点是和binlog是一样还是比binlog多一些?

A3:通过分析备份流程可以发现备份 binlog 位点信息(加binlog锁)是发生在停止 redo 拷贝线程前,而释放锁是在停止 redo 拷贝线之后,所以 redo log 会多一些。锁住了 binlog 保证了在该 binlog 位点前已经提交的事务的 redo log 都有 commit log 的信息,未提交的事物也就没有对应的 commit log 的信息,即便在锁住 binlog 后有 Innodb 表新的 DML 产生的 redo log ,但是事务无法提交,也就没有 commit log 的信息的,最后在回放的过程中对没有 commit log 的事务进行回滚就可以了。

Q4:Percona XtraBackup什么时候会加锁,以及影响加锁时间长度的因素有哪些?

A4:上面进行了分析,加锁操作只在备份非 ibd 文件时执行,加锁时长主要和非事务表的数量和大小有关,非事务表的数量越多,体积越大,拷贝文件所用的时间越长,那么加锁时间也就越长。也会和 redo log 生成的速度有关,只是 redo log 刷盘受到多个因素的影响,未及时刷盘的 redo log 一般很小。

Q5:Percona XtraBackup 和mysqldump选择哪个更好?

A5:通过上面的的解析,若是整个实例备份,首先选择 Percona XtraBackup ,因为对数据库的影响最小。若只是备份某个库表,这个就要视数据量而定,若数据量不大可以使用 mysqldump 。注意,对数据库做备份时最好选择业务连接最少的从库,因为备份也会消耗一定的资源,避免影响业务。

如何备份MYSQL数据库

定期的备份可使我们数据库崩溃造成的损失大大降低。在MySQL中进行数据备份的方法有两种,一种是使用mysqldump程序,一种是使用mysqlhotcopy、cp、tar或cpio等打包程序直接拷贝数据库文件。mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。使用mysqlhotcopy等程序备份速度快,因为它直接对系统文件进行操作,需人为协调数据库数据的备份前后一致性。 使用mysqldump备份数据库其实就是把数据库转储成一系列CREATE TABLE和INSERT语句,通过这些语句我们就可重新生成数据库。使用mysqldump的方法如下: % mysqldump --opt testdb | gzip 》 /data/backup/testdb.bak #--opt选项会对转储过程进行优化,生成的备份文件会小一点,后的管道操作会进行数据压缩 % mysqldump --opt testdb mytable1,mytable2 | gzip 》 /data/backup/testdb_mytable.bak #可在数据库后接数据表名,只导出指定的数据表,多个数据表可用逗号分隔 --opt选项还可激活--add-drop-table选项,它将会在备份文件的每条CREATE TABLE前加上一条DROP TABLE IF EXISTS语句。这可方便进行数据表的更新,而不会发生“数据表已存在”的错误。 用mysqldump命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。重复执行可定期更新远程数据库。 % mysqladmin -h remote_host create testdb % mysqldump --opt testdb | mysql -h remote_host testdb 另外还可通过ssh远程调用服务器上的程序,如: % ssh remote_host mysqladmin create testdb % mysqldump --opt testdb | ssh remote_host mysql testdb 通过直接拷贝系统文件的方式备份数据库,在备份时,要确保没有人对数据库进行修改操作。要做到这点,最好关闭服务器。如果不能关闭的,要以只读方试锁定有关数据表。下面是一些示例: % cp -r db /backup/db #备份db数据库到/backup/db目录 % cp table_name.* /backup/db #只备份table_name数据表 % scp -r db remotehot:/usr/local/mysql/data #用scp把数据库直接拷贝到远程服务器 在把数据库直接拷贝到远程主机时,应注意两台机器必须有同样的硬件结构,或者将拷贝的数据表全部是可移植数据表类型。 使用mysqlhotcopy工具,它是一个Perl DBI脚本,可在不关闭服务器的情况下备份数据库,它主要的优点是: 它直接拷贝文件,所以它比mysqldump快。 可自动完成数据锁定工作,备份时不用关闭服务器。 能刷新日志,使备份文件和日志文件的检查点能保持同步。 下面是该工具的使用示例: % mysqlhotcopy db /bakcup/ #把db数据库备份到backup/db目录里,会自动创建一个db目录 使用BACKUP TABLE语句进行备份,该语句最早出现在MySQL 3.23.25版本中,仅适用于MyISAM数据表。用法如下: mysql》 BACKUP TABLE mytable TO ’/backup/db’; #把mytable数据表备份到/backup/db目录下 为了执行该语句,你必须拥有那些表的FILE权限和SELECT权限,备份目录还必须是服务器可写的。该语句执行时,会先把内存中的数据写入磁盘,再把各个数据表的.frm(表结构定义文件)、.MYD(数据)文件从数据目录拷贝到备份目录。它不拷贝.MYI(索引)文件,因为它能用另外两个文件重建。BACKUP TABLE语句备份时,依次锁定数据表,当同时备份多个数据表时,数据表可能会被修改,所以备份0完成时,备份文件中的数据和现时数据表中的数据可能会有差异,为了消除该差异,我们可用只读方式锁定数据表,在备份完成后再解锁。如: mysql》 LOCK TABLES tb1 READ,tb2 READ; mysql》 BACKUP TABLE tb1,tb2 TO ’backup/db’; mysql》 UNLOCK TABLE

备份mysql是用的什么方法

MySQL备份数据库的两个主要实际操作方案是采用MySQL(与PHP搭配之最佳组合) dump程序或是直接复制相关的数据库文件(如用cp、cpio或tar等)。当然每种实际应用方法都有其优缺点:MySQL(和PHP搭配之最佳组合)dump与MySQL(和PHP搭配之最佳组合)服务器协同操作。直接拷贝方法在服务器外部进行,并且你必须采取措施保证没有客户正在修改你将拷贝的表。如果你想用文件系统备份来备份数据库,也会发生同样的问题:如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。文件系统备份与直接拷贝文件的区别是对后者你完全控制了备份过程,这样你能采取措施确保服务器让表不受干扰。MySQL(和PHP搭配之最佳组合)dump比直接拷贝要慢些。MySQL(和PHP搭配之最佳组合)dump生成能够移植到其它机器的文本文件,甚至那些有不同硬件结构的机器上。直接拷贝文件不能移植到其它机器上,除非你正在拷贝的表使用MyISAM存储格式。ISAM表只能在相似的硬件结构的机器上拷贝。在MySQL(和PHP搭配之最佳组合) 3.23中引入的MyISAM表存储格式解决了该问题,因为该格式是机器无关的,所以直接拷贝文件可以移植到具有不同硬件结构的机器上。只要满足两个条件:另一台机器必须也运行MySQL(和PHP搭配之最佳组合) 3.23或以后版本,而且文件必须以MyISAM格式表示,而不是ISAM格式。不管你使用哪种备份方法,如果你需要恢复数据库,有几个原则应该遵守,以确保最好的结果:定期实施备份。建立一个计划并严格遵守。让服务器执行更新日志。当你在崩溃后需要恢复数据时,更新日志将帮助你。在你用备份文件恢复数据到备份时的状态后,你可以通过运行更新日志中的查询再次运用备份后面的修改,这将数据库中的表恢复到崩溃发生时的状态。以文件系统备份的术语讲,数据库备份文件代表完全倾倒(full dump),而更新日志代表渐进倾倒(incremental dump)。使用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是特别有意义。当实施你的恢复时,你将浪费时间找出文件里是什么东西。你可能发觉用数据库名和日期构成备份文件名会很有用。例如:%MySQL(和PHP搭配之最佳组合)dump samp_db 》/usr/archives/MySQL(和PHP搭配之最佳组合)/samp_db.1999-10-02%MySQL(和PHP搭配之最佳组合)dump menagerie 》/usr/archives/MySQL(和PHP搭配之最佳组合)/menagerie.1999-10-02

MySQL如何备份与还原

  使用MYSQL数据库的朋友,对MySQL进行备份和还原是比较重要的。重要的事简单做,今天介绍我们使用mysqldump和source命令来备份还原,分为Windows下和Linux下的MYSQL备份与还原操作。  一、Win32系统下MySQL的备份还原方法  备份:在“运行”中输入“cmd”,利用“cd/ProgramFiles/MySQL/MySQLServer5.0/bin”进入bin文件夹,输入“mysqldump-u用户名-pdatabasename》exportfilename”导出数据库到文件,如mysqldump-uroot-pvoice》voice.sql,然后输入密码即可开始导出MYSQL数据,实现备份操作。  还原:进入MySQLCommandLineClient,输入密码,进入到“mysql》”,输入命令"showdatabases;",回车,看看有些什么数据库;建立你要还原的数据库,输入"createdatabasevoice;",回车;切换到刚建立的数据库,输入"usevoice;",回车;导入数据,输入"sourcevoice.sql;",回车,开始导入,再次出现"mysql》"并且没有提示错误即还原成功。  二、Linux下MySQL的备份与还原方法:  备份:#mysql-uroot-pvoice

实现MySQL数据库的备份与还原的几种方法

MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。1. 使用直接拷贝数据库备份 典型的如cp、tar或cpio实用程序当你使用直接备份方法时,必须保证表不在被使用。如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义。保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。 如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,应该使用相同的锁定协议让服务器“安静下来”。当你完成了MySQL数据库备份时,需要重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。 要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。2. 使用mysqldump数据库备份mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。mysqldump 的一些主要参数:1)--compatible=name它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。2)--complete-insert,-c导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。3)--default-character-set=charset指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。4)--disable-keys告诉mysqldump 在 INSERT 语句的开头和结尾增加 ; 和 ; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。5)--extended-insert = true|false默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。6)--hex-blob使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。7)--lock-all-tables,-x在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。8)--lock-tables它和--lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。9)--no-create-info,-t只导出数据,而不添加 CREATE TABLE 语句。10)--no-data,-d不导出任何数据,只导出数据库表结构。11)--opt这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。12)--quick,-q该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。13)--routines,-R导出存储过程以及自定义函数。14)--single-transaction该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。--triggers同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。备份:使用mysqldump备份数据库其实就是把数据库转储成一系列CREATE TABLE和INSERT语句,通过这些语句我们就可重新生成数据库。使用mysqldump的方法如下:% mysqldump --opt testdb | gzip 》 /data/backup/testdb.bak#--opt选项会对转储过程进行优化,生成的备份文件会小一点,后的管道操作会进行数据压缩% mysqldump --opt testdb mytable1,mytable2 | gzip 》 /data/backup/testdb_mytable.bak#可在数据库后接数据表名,只导出指定的数据表,多个数据表可用逗号分隔--opt选项还可激活--add-drop-table选项,它将会在备份文件的每条CREATE TABLE前加上一条DROP TABLE IF EXISTS语句。这可方便进行数据表的更新,而不会发生“数据表已存在”的错误。用mysqldump命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。重复执行可定期更新远程数据库。% mysqladmin -h remote_host create testdb% mysqldump --opt testdb | mysql -h remote_host testdb另外还可通过ssh远程调用服务器上的程序,如:% ssh remote_host mysqladmin create testdb% mysqldump --opt testdb | ssh remote_host mysql testdb 通过直接拷贝系统文件的方式备份数据库,在备份时,要确保没有人对数据库进行修改操作。要做到这点,最好关闭服务器。如果不能关闭的,要以只读方试锁定有关数据表。下面是一些示例:% cp -r db /backup/db #备份db数据库到/backup/db目录% cp table_name.* /backup/db #只备份table_name数据表% scp -r db remotehot:/usr/local/mysql/data #用scp把数据库直接拷贝到远程服务器,在把数据库直接拷贝到远程主机时,应注意两台机器必须有同样的硬件结构,或者将拷贝的数据表全部是可移植数据表类型。或者/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x testdb 》 testdb.sql使用以下 SQL 来备份 Innodb 表:/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction testdb 》 testdb.sql另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:/usr/local/mysql/bin/mysqldump -uroot -proot \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs testdb 》 testdb.sql它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。 还原:用mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。直接用 mysql 客户端例如:/usr/local/mysql/bin/mysql -uroot -proot testdb 《 testdb.sql用SOURCE 语法其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:SOURCE /tmp/testdb.sql;这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。 3. 使用mysqlhotcopy数据库备份 使用mysqlhotcopy工具,它是一个Perl DBI脚本,可在不关闭服务器的情况下备份数据库,mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。它主要的优点是:它直接拷贝文件,所以它比mysqldump快。可自动完成数据锁定工作,备份时不用关闭服务器。能刷新日志,使备份文件和日志文件的检查点能保持同步。备份:mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb /tmp (把数据库目录 testdb 拷贝到 /tmp 下)/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb_1 testdb_2 testdb_n /tmp/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb./regex/ /tmp 还原:mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:cp -rf testdb /usr/local/mysql/data/chown -R nobody:nobody /usr/local/mysql/data/ (将 testdb 目录的属主改成 mysqld 运行用户) 4. 使用SQL语句数据库备份 BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。备份:BACK TABLE tbl_test TO ’/tmp/testdb/’; #把tbl_test数据库备份到/tmp/testdb/目录里,会自动创建一个testdb目录 为了执行该语句,你必须拥有那些表的FILE权限和SELECT权限,备份目录还必须是服务器可写的。该语句执行时,会先把内存中的数据写入磁盘,再把各个数据表的.frm(表结构定义文件)、.MYD(数据)文件从数据目录拷贝到备份目录。它不拷贝.MYI(索引)文件,因为它能用另外两个文件重建。BACKUP TABLE语句备份时,依次锁定数据表,当同时备份多个数据表时,数据表可能会被修改,所以备份0完成时,备份文件中的数据和现时数据表中的数据可能会有差异,为了消除该差异,我们可用只读方式锁定数据表,在备份完成后再解锁。如:mysql》 LOCK TABLES tb1 READ,tb2 READ;mysql》 BACKUP TABLE tb1,tb2 TO ’backup/db’;mysql》 UNLOCK TABLES;使用BACKUP TABLE语句备份的数据表可用RESTORE TABLE重新加载到服务器。注意,必须要有 FILE 权限才能执行本SQL,并且目录 /tmp/testdb/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:SELECT * INTO OUTFILE ’/tmp/testdb/tbl_test.txt’ FROM tbl_test;注意,必须要有 FILE 权限才能执行本SQL,并且文件 /tmp/testdb/tbl_test.txt 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。还原:用BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子:RESTORE TABLE FROM ’/tmp/testdb/’;权限要求类似上面所述。用SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子:LOAD DATA INFILE ’/tmp/testdb/tbl_name.txt’ INTO TABLE tbl_name;权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。

mysql备份表的几种方式

基于之前的文章方法,加入批处理命令即可实现自动备份。只是由于批处理命令中对于备份文件的名字按照时间命名比较特别,所以特别整理一文。1、复制date文件夹备份============================假想环境:MySQL 安装位置:C:\MySQL论坛数据库名称为:bbs数据库备份目的地:C:\db_bak\============================新建db_bak.bat,写入以下代码*******************************Code Start*****************************net stop mysqlxcopy c:\mysql\data\bbs\*.* c:\db_bak\bbs\%date:~0,10%\ /S /Inet start mysql*******************************Code End ***************************** 然后使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨3点执行back_db.bat)解释:备份和恢复的操作都比较简单,完整性比较高,控制备份周期比较灵活,例如,用%date:~0,10%。此方法适合有独立主机但对mysql没有管理经验的用户。缺点是占用空间比较多,备份期间mysql会短时间断开(例如:针对30M左右的数据库耗时5s左右),针对%date:~0,10%的用法参考 。2、mysqldump备份成sql文件==============假想环境:MySQL 安装位置:C:\MySQL论坛数据库名称为:bbsMySQL root 密码:123456数据库备份目的地:D:\db_backup\脚本:rem *******************************Code Start*****************************@echo offset "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"C:\MySQL\bin\mysqldump --opt -u root --password=123456 bbs 》 D:\db_backup\bbs_%Ymd%.sql@echo onrem *******************************Code End*****************************将以上代码保存为backup_db.bat然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天凌晨5点执行back_db.bat)说明:此方法可以不用关闭数据库,并且可以按每一天的时间来名称备份文件。通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为2009-02-05,通过%date:~5,2%则可以得到02。(日期的字符串的下标是从0开始的)3、利用WinRAR对MySQL数据库进行定时备份。 对于MySQL的备份,最好的方法就是直接备份MySQL数据库的Data目录。下面提供了一个利用WinRAR来对Data目录进行定时备份的方法。首先当然要把WinRAR安装到计算机上。将下面的命令写入到一个文本文件里*******************************Code Start*****************************net stop mysqlc:\progra~1\winrar\winrar a -ag -k -r -s d:\mysql.rar d:\mysql\datanet start mysql*******************************Code End*****************************保存,然后将文本文件的扩展名修改成CMD。进入控制面版,打开计划任务,双击“添加计划任务”。在计划任务向导中找到刚才的CMD文件,接着为这个任务指定一个运行时间和运行时使用的账号密码就可以了。 这种方法缺点是占用时间比较多,备份期间压缩需要时间,mysql断开比第一种方法更多的时间,但是对于文件命名很好。

mysql 数据库如何备份,如图,

数据库备份,可以全量备份,也可以备份一部分备份的方法也有很多种如果是使用语句进行备份,那么只能导出数据的内容,不包括表的结构需要先锁表,避免备份过程中表被更新锁表语句:mysql》LOCK TABLES READ tbl_name;然后导出数据:mysql》SELECT * INTO OUTFILE_tbl_name.bak‘ FROM tbl_name;最后将表解锁:mysql》UNLOCK TABLES;如果是使用工具 mysqldump 进行备份,就不仅可以导出数据,还可以备份表结构假如要备份数据库 db_name:shell》 mydqldump db_name假如要把数据库备份到 bd_name.bak 中:shell》 mydqldump db_name》db_name.bak还可以用直接拷贝的方法进行备份,也就是直接复制文件来备份数据

以上就是我们为大家找到的有关“mysql备份的几种方式(mysql有哪些备份方式,各个备份方式有)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

mysql备份的几种方式(mysql有哪些备份方式,各个备份方式有)

本文编辑:admin

更多文章:


QQ三国怎么全屏?非RMB玩家QQ三国全部攻略

QQ三国怎么全屏?非RMB玩家QQ三国全部攻略

本文目录QQ三国怎么全屏非RMB玩家QQ三国全部攻略QQ三国玩什么角色好QQ三国如何快速升级QQ三国怎么玩啊QQ三国是什么QQ三国非RMB玩家怎么玩QQ三国什么职业最好QQ三国恶搞NPC图求老版QQ三国头像QQ三国怎么全屏1、打开电脑,找到

2024年7月11日 05:17

极品时刻表不能用了吗(为什么我的电脑不能使用极品列车时刻表)

极品时刻表不能用了吗(为什么我的电脑不能使用极品列车时刻表)

各位老铁们好,相信很多人对极品时刻表不能用了吗都不是特别的了解,因此呢,今天就来为大家分享下关于极品时刻表不能用了吗以及为什么我的电脑不能使用极品列车时刻表的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录为什么我

2024年7月23日 17:24

跟原版红警一模一样的手游(类似红警的手机游戏有哪些)

跟原版红警一模一样的手游(类似红警的手机游戏有哪些)

大家好,跟原版红警一模一样的手游相信很多的网友都不是很明白,包括类似红警的手机游戏有哪些也是一样,不过没有关系,接下来就来为大家分享关于跟原版红警一模一样的手游和类似红警的手机游戏有哪些的一些知识点,大家可以关注收藏,免得下次来找不到哦,下

2024年6月29日 02:38

坦克世界盒子更新之后插件不能用了!怎么办?坦克世界,哪个插件比较好用啊

坦克世界盒子更新之后插件不能用了!怎么办?坦克世界,哪个插件比较好用啊

本文目录坦克世界盒子更新之后插件不能用了!怎么办坦克世界,哪个插件比较好用啊国服坦克世界准备更新了,没有了插件手残党该怎么办坦克世界盒子更新之后插件不能用了!怎么办因为你坦克世界盒子的插件属于老版本的插件 需删除原插件 再下载和客户端版本相

2024年6月5日 21:03

闪克PM422麦克风手机可以用吗?闪克和闪克2的区别

闪克PM422麦克风手机可以用吗?闪克和闪克2的区别

本文目录闪克PM422麦克风手机可以用吗闪克和闪克2的区别steam闪克2中文设置闪克的正确打法在游民星空上下载了闪克,使用BIN文件中的SHANK后说无法找到组件,我重新下了2遍都是如此,要怎么操作才行闪克2无法存档!!闪克PM422麦克

2023年11月15日 21:20

远程培训平台(我已经困惑好久好久了企业培训在线有哪些)

远程培训平台(我已经困惑好久好久了企业培训在线有哪些)

本文目录我已经困惑好久好久了企业培训在线有哪些远程教育培训平台,哪家的系统最好用昆明市教师远程培训平台如何修改姓名河南省机关事业单位工勤技能岗位网络远程培训平台事业单位培训平台的活动管理在哪里为什么远程培训平台网页总是打不开哪种方式可以登录

2024年5月4日 00:11

红帽子linux下载(linux操作系统有多大啊)

红帽子linux下载(linux操作系统有多大啊)

本文目录linux操作系统有多大啊谁有linux PE下载地址Red Hat Linux 9.0安装的问题现用WIN7系统,想要安装率红帽LINUX与WIN7的双系统,高手指导红帽子 Linux8.0 下载地址如何安装红旗Linuxlinu

2024年3月18日 19:55

迅捷录屏大师(手机录屏怎么操作)

迅捷录屏大师(手机录屏怎么操作)

这篇文章给大家聊聊关于迅捷录屏大师,以及手机录屏怎么操作对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录手机录屏怎么操作迅捷录屏大师好不好使用迅捷录屏大师为什么每次关机后需要重新安装安卓系统的手机怎么录屏呢迅捷录屏大师可以录制

2024年7月19日 17:05

word最新版本怎么下载(电脑上怎么下载word办公软件)

word最新版本怎么下载(电脑上怎么下载word办公软件)

今天给各位分享电脑上怎么下载word办公软件的知识,其中也会对电脑上怎么下载word办公软件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录电脑上怎么下载word办公软件电脑怎么下载word2010啊怎样在电脑

2024年6月28日 04:14

最新单机破解版(口袋妖怪单机版有内购破解版吗)

最新单机破解版(口袋妖怪单机版有内购破解版吗)

大家好,今天小编来为大家解答以下的问题,关于最新单机破解版,口袋妖怪单机版有内购破解版吗这个很多人还不知道,现在让我们一起来看看吧!本文目录口袋妖怪单机版有内购破解版吗单机游戏破解版怎么下载单机传奇破解版可以在哪里下载和平单机精英破解版在哪

2024年7月15日 07:11

pdf转为word文档(pdf文件怎么转换成word文档)

pdf转为word文档(pdf文件怎么转换成word文档)

本篇文章给大家谈谈pdf转为word文档,以及pdf文件怎么转换成word文档对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录pdf文件怎么转换成word文档电脑上怎么把PDF转wordpdf文件怎么转换成word文件电脑如何

2024年6月13日 03:55

中兴v960(中兴V960好用吗)

中兴v960(中兴V960好用吗)

本文目录中兴V960好用吗想入手一部中兴v960,这机子怎么样请问中兴V960机器怎么样呢中兴V960手机话费如何返还中兴V960的简介中兴V960好用吗手机没有最好用,只有自己够用!什么游戏,CPU,GUP都是浮云!(手机刚拿来,你会折腾

2024年5月5日 03:55

植物大战僵尸西游版正版下载(怎么下载到电脑植物大战僵尸西游版)

植物大战僵尸西游版正版下载(怎么下载到电脑植物大战僵尸西游版)

本篇文章给大家谈谈植物大战僵尸西游版正版下载,以及怎么下载到电脑植物大战僵尸西游版对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录怎么下载到电脑植物大战僵尸西游版植物大战僵尸龙宫西游版怎么下载植物大战僵尸西游版在哪里下载植物大

2024年7月8日 14:55

火狐搜索入口(Mozillafirefox火狐浏览器主页网址)

火狐搜索入口(Mozillafirefox火狐浏览器主页网址)

“火狐搜索入口”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看火狐搜索入口(Mozillafirefox火狐浏览器主页网址)!本文目录Mozillafirefox火狐浏览器主页网址火狐浏览器怎么在页面内搜索内容如何添加百度搜

2024年4月13日 15:05

粤语在线翻译(粤语如何在线翻译成普通话)

粤语在线翻译(粤语如何在线翻译成普通话)

本篇文章给大家谈谈粤语在线翻译,以及粤语如何在线翻译成普通话对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录粤语如何在线翻译成普通话粤语翻译

2024年8月18日 10:25

好玩的电脑游戏(电脑有什么好玩的游戏)

好玩的电脑游戏(电脑有什么好玩的游戏)

大家好,关于好玩的电脑游戏很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于电脑有什么好玩的游戏的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录电脑有什么

2024年7月2日 23:55

微店网的官网(如何搭建微官网)

微店网的官网(如何搭建微官网)

本文目录如何搭建微官网怎么找到微店网站微店怎么注册微店怎么在qq上显示如何搭建微官网搭建微官网可以采用微信服务号、微店网供应商账号完成!一、对接微信公众号环节:第一步:让用户关注微信服务号。微信服务号是可以免费申请的,在微信官网提交资 料即

2024年3月10日 01:05

xscale(this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5);在flash中这是什么意思啊)

xscale(this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5);在flash中这是什么意思啊)

本文目录this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5);在flash中这是什么意思啊谁能给我解释一下flash中_xscale=100*(_root._xmouse-_x)/(xs/2)

2024年6月1日 17:35

健康码二维码图片(绿码健康码怎么弄)

健康码二维码图片(绿码健康码怎么弄)

本文目录绿码健康码怎么弄扫健康码的二维码图片怎么弄健康码有几种颜色代表什么微信健康码怎么弄如何查看健康码的二维码健康通行码是什么扫什么码可以显示健康码如何扫描健康码绿码健康码怎么弄打开支付宝,点击健康码,填写信息,若无去过高风险地区,即会显

2024年6月30日 10:28

qq盗号神器免费版(怎么用手机盗别人的QQ)

qq盗号神器免费版(怎么用手机盗别人的QQ)

本篇文章给大家谈谈qq盗号神器免费版,以及怎么用手机盗别人的QQ对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录怎么用手机盗别人的QQ盗号神器qq密码手机版从哪里下载盗号神器qq密码手机版是什么哪个大哥大姐有QQ的盗号程序啊,

2024年9月5日 16:25

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索