首页 > 编程知识 正文

mysql备份与还原实例,mysql数据备份还原

时间:2023-12-27 22:27:02 阅读:325351 作者:UQRC

本文目录一览:

如何用mysql命令备份和恢复

Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面为大家分享一下操作的常用的命令。

一、备份命令

1、备份MySQL数据库的命令

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-hhostname-uusername-ppassword databasenamebackupfile.sql

2、备份MySQL数据库为带删除表的格式

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-–add-drop-table-uusername-ppassword databasenamebackupfile.sql

3、直接将MySQL数据库压缩备份

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-hhostname-uusername-ppassword databasename|gzipbackupfile.sql.gz

4、备份MySQL数据库某个(些)表

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-hhostname-uusername-ppassword databasename specific_table1 specific_table2backupfile.sql

5、同时备份多个MySQL数据库

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-hhostname-uusername-ppassword –databases databasename1 databasename2 databasename3multibackupfile.sql

6、仅仅备份数据库结构

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump –no-data –databases databasename1 databasename2 databasename3structurebackupfile.sql

7、备份服务器上所有数据库

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump –all-databasesallbackupfile.sql

二、还原命令

1、还原MySQL数据库的命令

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysql-hhostname-uusername-ppassword databasenamebackupfile.sql

2、还原压缩的MySQL数据库

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--gunzipbackupfile.sql.gz|mysql-uusername-ppassword databasename

3、将数据库转移到新服务器

!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--mysqldump-uusername-ppassword databasename|mysql –host=*.*.*.*-C databasename

总结

做好数据备份和还原,定好合适的备份策略,这是一个DBA所做事情的一小部分,万事开头难,就从现在开始吧!

怎么备份和还原mysql数据库

备份数据库

使用mysqldump命令备份数据库

还原数据库

1、使用mysql命令还原数据库

将game_backup.sql 还原至 game 数据库:

2、使用source命令还原数据库

如果数据库过大,建议可以使用source命令

详解Mysql自动备份与恢复的几种方法(图文教

备份方案一: 通过 mysqldump命令,直接生成一个完整的 .sql 文件

Step 1: 创建一个批处理

(说明:root 是mysql默认用户名, aaaaaa 是mysql密码, bugtracker 是数据库名)

------------mySql_backup.bat--------------------------------------------------------------------------------------

d:

cd D:/AppServ/MySQL/bin

mysqldump -uroot -paaaaaa bugtracker E:/DataBase/Mysql_bugtracker_backup/bugtracker_back.sql

exit

Step 2: 创建一个计划任务

"Start" -- "Control Panel" -- "Administrative Tools" -- "Task Scheduler"

"Create A Basic Task" -- --- "Daily" (注意设置后面的 时 分 秒) -- ---- "Start a Program" -- "Browser" (定位选择到你刚才创建的批处理mySql_backup.bat) -- --- "Finish"

对应的还原方法

创建一个处理:

----------mySql_restore.bat-------

d:

cd D:/AppServ/MySQL/bin

mysql -uroot -paaaaaa bugtracker E:/DataBase/Mysql_bugtracker_backup/bugtracker_back.sql

exit

双击它即可自动执行还原

备份方案二: 通过 xcopy 命令,直接把Mysql 的 data 目录下的对应的数据库全部的文件全部 copy 出来

创建批处理:

xcopy D:/AppServ/MySQL/data/bugtracker E:/DataBase/Mysql_bugtracker_backup/bugtracker/ /e /h /d /y /r /v /f /k

exit

对应的还原方法

把 E:/DataBase/Mysql_bugtracker_backup 目录下的 bugtracker文件夹 直接 copy 到 D:/AppServ/MySQL/data 目录下,把这个目录的bugtracker文件夹 全部履盖掉

备份方案三:安装Navicat For MySql 工具,通过它的 Schedule 功能设置自动备份

Schedule -- New Batch Job

在新弹出的页面中 选择你的 DB (eg: bugtracker ),然后在右边面板(Available Jobs)中你会看到“Backup bugtracker”,双击它,它会出现在下边面板---

对应的还原方法:

找到上述目录下对应的最新的 .psc 文件,然后通过Navicat For Mysql 工具还原

基于Xtrabackup8的Mysql定时全量,增量备份及恢复实战演练

所有mysql实例皆为MYSQL8版本,使用的Xtrabackup备份组件为xtrabackup8.

生产mysql使用基于percona的分支,相对于原版mysql多了一些性能调教和监控视图,版本为:percona-server-server-8.0.22,备份相关工具对mysql8的官方版本也是完全兼容的.percona的分支相关信息:

生产环境mysql一共3个实例,使用MGR组成集群以实现灵活的高可用与读写分离.并由前置的proxysql进行数据的路由与转发.

模拟故障为:在生产环境mysql8 的MGR集群完全不可用,有前一天的Xtrabackup全量备份和增量备份,需要从之前的全量和增量备份完整恢复到故障最近的时间点.本次故障恢复的要求是读取前一天的所有增量和全量数据并恢复.快速重组生产MGR集群.

在这里会用ansible脚本快速搭建3个mysql实例,以模拟生产环境(略过).

backup_func.sh :

策略是每天的0:30做一次全量备份,之后每两个小时的半点会做一次增量备份.

注: 本次恢复属于完整的生产环境集群恢复,下面的 获取备份文件 , 准备备份 , 开始恢复 相关流程,需要在每一台服务器上执行,实际操作中,如果只需要恢复并查看数据则只做一个点就可以了.

这里取的是前一天的打过包的备份文件,根据备份脚本的规则,每天凌晨的全量备份之前,会自动将前一天的全量备份和增量备份目录全部打包并以前一天的日期命名:

20210609.tar.gz

将其scp到待恢复的服务器上并解压:

解压后的目录结构:

确保需要恢复的服务器有mysql实例,xtrabackup8工具已安装,由于备份是经过压缩的,确保qpress也已安装.

由于备份脚本在备份时使用了 --compress 指令,在恢复备份前,需要先解压缩备份,

这里将所有增量和全量备份路径均执行一下解压缩指令:

在同时存在全量和增量备份需要合并的情况下,准备备份时需要带上 --apply-log-only 参数,但是要注意在准备最后一个增量备份的时候,不需要加该参数.

以上操作会将所有的增量备份合并到全量备份中.

根据各自安装时指定的相关路径去删除数据.(data,binglog,logs,undolog),一般在my.cnf中有指定

如果my.cnf不是在默认路径(/etc/my.cnf),需要指定一下mysql配置文件的路径: --defaults-file=${DB_CONF}

至此,备份数据在单节点上的恢复已经完成了.

查看下最后一份增量备份里才会有的一些数据

先确保同样的mysql恢复操作分别在三台服务器上执行完成.(如果在新建服务器上恢复MGR集群,一定要检查my.cnf中MGR集群相关配置,比如 loose-group_replication_local_address , loose-group_replication_group_seeds , loose-group_replication_start_on_boot )

master节点启动:

MGR的三台节点的权重实际上是一样的,选择其中的一台做master即可.

mster节点启动完成后,再分别在两台slave节点启动MGR:

由于3台mysql实例的数据是一样的,节点间状态同步迅速就OK了.

至此,3台mysql的MGR状态均为 online ,整个集群启动完成,全演练流程结束.

实现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数据库 之 MySQL Workbench

您好,很高兴为您解答。

一、安装

MySQL

Workbench

1、从MySQL

官方网站下载

MySQL

Workbench(具体网址见参考),并默认安装即可。

注意,该软件需要安装

Visual

C++

2010

Redistributable

.Net

Framework

4

支持。

二、连接目标数据库

1、运行

MySQL

Workbench

,点击(1)加号按钮,设置目标数据库的登录信息后,点击(2)[Test

Connection]测试链接成功后,点击[OK]按钮。

2、点击新建的连接,例如

Localhost。若弹出

Connection

Warning

窗口,请确认当前版本

Workbench

是否支持目标数据版本,如果支持,点击[Continue

Anyway]按钮。

=

三、备份数据库

1、点击[Data

Export],界面右侧将显示数据导出窗口。

2、点击[Refresh]按钮,刷新数据库列表(1),选择要导出的数据表(2),设置导出的目录(3),点击[Start

Export]按钮开始导出,等待

Export

Progress

界面进度完成。

四、还原数据库

1、点击[Data

Import/Restore],界面右侧将显示数据导入窗口。

2、输入或选择(1)数据库备份的存储路径,点击(2)[Load

Folder

Contents]加载备份内容,选择要导入的数据库(3)和数据表(4),然后点击[Start

Import]开始导入,等待

Import

Progress

界面进度完成。

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~

O(∩_∩)O~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。