怎么备份和还原mysql数据库

如题所述

备份数据库

使用mysqldump命令备份数据库

还原数据库

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

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

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-03-21
MySQL数据库备份与还原
备份和恢复数据
生成SQL脚本
在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一个数据库之后再去恢复数据。
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
现在可以在C盘下找到mydb1.sql文件了!
注意,mysqldump命令是在Windows控制台下执行,无需登录mysql!!!
执行SQL脚本
执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!!!
执行SQL脚本不只是用来恢复数据库,也可以在平时编写SQL脚本,然后使用执行SQL 脚本来操作数据库!大家都知道,在黑屏下编写SQL语句时,就算发现了错误,可能也不能修改了。所以我建议大家使用脚本文件来编写SQL代码,然后执行之!
SOURCE C:\mydb1.sql
注意,在执行脚本时需要先行核查当前数据库中的表是否与脚本文件中的语句有冲突!例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!
还可以通过下面的方式来执行脚本文件:
mysql -uroot -p123 mydb1<c:\mydb1.sql
mysql –u用户名 –p密码 数据库<要执行脚本文件路径

这种方式无需登录mysql!
第2个回答  2020-06-17

前言

MySQL 5.6引入了GTID,每个事务都会产生一个GTID,我们可以通过验证主从GTID来验证主从数据的一致性。

为了叙述简便,定义一个量ALL_GTID: 表示某个数据库实例上 所有存在过的 或 将要存在的事务 的GTID(包括已经被purge掉的事务)。

在讨论数据库可用性的场景中, 当发生主备切换时, 需要进行数据补偿。通过比较主备的ALL_GTID,可以确定需要补偿多少数据:

    在实例存活的情况,可以在实例状态中查询ALL_GTID。

    在实例崩溃的情况,无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。

    下面列举与ALL_GTID相关的变量。

    与ALL_GTID相关的变量

    Previous-GTIDs

    Previous-GTIDs格式如下(环境为MySQL5.7,日志手动flush binary logs获得):

    查看新轮转出的BINLOG:


    下面为mysql-bin.00001中包含的GTID:

    请点击输入图片描述


    然后再次flush binary logs:

    请点击输入图片描述


    mysql-bin.00002中是没有任何GTID的。

    请点击输入图片描述


    综上Previous-GTIDs是本身这个BINLOG文件前面的所有BINLOG的集合。

    请点击输入图片描述

    全局变量中的GTID相关的变量

    请点击输入图片描述

    变量解释:

    gtid_executed 代表着server上所有事务执行产生的GTID(包含已经被purge的BINLOG中的GTID或者是手动set gtid_purged的GTID)。

    gtid_purged 代表着已经被purge到的GTID。gtid_purged是gtid_executed的子集。

    gtid_retrieved 是从机上relay_log中的GTID。

    ALL_GTID 的计算

    了解了GTID相关的变量之后,可以得到获得实例的All_GTID的集合的方法:

    对象

    方法

    存活的Master实例    gtid_executed    

    存活的Slave实例    gtid_executed和gtid_retrieved的并集    

    非存活Master实例    最后一个BINLOG文件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

    非存活Slave实例    最后一个BINLOG文件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

    在获得非存活实例中的ALL_GTID时,最后一个BINLOG文件中的GTID可能不连续(比如事务同时来自于本实例客户端和复制回放),所以需要扫描最后一个BINLOG文件。

    生产中我们使用Xtrabackup来产生一个 从实例 的流程如下:

    拉取备份,进行还原

    change master to

    set @@global.gtid_purged='xxx';

    set @@global.gtid_purged='xxx'; 的影响:

    将 从实例 的ALL_GTID手工置为xxx, 在通过GTID方式建立复制时不会出错.

    将更新Binlog中记录的Previous-GTIDs (由于Binlog不可改变, 将产生新的Binlog, 记录新的Previous-GTIDs).

    MySQL 5.7中set gtid_purged的行为变更

    问题描述

    回顾一下备份恢复的流程:

    拉取备份,进行还原

    change master to

    set @@global.gtid_purged='xxx';

    现象: 发现有一台MySQL 5.7的Slave服务器恢复后没有产生 正确的Previous-GTIDs。

    分析

    分析整个过程,解决问题应该分阶段进行手动模拟发现问题。以下为详细步骤:

    手工还原备份

    环境

    BINLOG数量,Previous-GTIDs状态

    Xtrabackup 2.4.2 & MySQL 5.6    1,空    

    Xtrabackup 2.4.2 & MySQL 5.7    1,空    

    Xtrabackup 2.2.9 & MySQL 5.6    1,空    

    Xtrabackup 2.2.9 & MySQL 5.7    1,空    

    可见: 恢复过程不会轮转BINLOG。

    验证change master和set gtid_purged在不同的MySQL版本中执行的差异

    环境

    BINLOG数量,Previous-GTIDs状态

    change master & MySQL 5.6    1,空    

    change master & MySQL 5.7    1,空    

    set gtid_purged & MySQL 5.6    2,正常    

    set gtid_purged & MySQL 5.7    1,空    

    可见: 执行set gtid_purged时不同版本的MySQL产生了差异

    验证

    对不同版本MySQL单独执行set @@global.gtid_purged='';语句。检查结果

    环境

    进行的操作

    BINLOG数量,Previous-GTIDs状态

    MySQL 5.7    reset master; set @@global.gtid_purged=”;    1,空    

    MySQL 5.6    reset master; set @@global.gtid_purged=”;    2,正常    

    结论

    参考: http://bugs.mysql.com/bug.php?id=75767

    官方解释: 在5.7版本中,执行SET GTID_PURGED语句后binlog_simple_gtid_recovery会给GTID_PURGED计算出一个错误的值。

    由于5.7中新增了存储GTID的表。所以5.7版本中set @@global.gtid_purged='';语句被改成只修改存放GTID的表。

    而5.6版本中会进行BINLOG轮转和向Previous_gtids_log_event中添加GTID。如果5.7需要产生和5.6相同结果的话,可以在SET GTID_PURGED语句后手动执行flush binary logs语句。

MySQL上一步如何备份和恢复数据库mysql上一步
2.使用MySQL Workbench MySQL Workbench是一款开源的数据库设计工具,可以备份和还原MySQL数据库,还可以通过图形界面对数据库进行管理。使用MySQL Workbench备份数据库需要选择导出选项并指定备份文件的输出位置,并选择要导出的表。备份的操作详见以下图示:二、恢复数据库 1.使用mysql命令 要在MySQL中恢复数据...

如何解决MySQL备份还原问题mysql不能还原备份
1.使用mysqldump命令备份数据 mysqldump命令可以备份MySQL数据库中的所有表、数据、存储过程以及触发器等,具体命令如下:mysqldump -u用户名 -p密码 数据库名 > 备份文件名.sql 2.使用二进制日志备份数据 MySQL的二进制日志(Binlog)记录了所有对数据库的修改操作,通过备份二进制日志可以还原数据库到某...

mysql数据库备份和还原的常用命令小结
解释:通过`mysql`命令行工具,可以使用之前通过`mysqldump`工具生成的备份文件来还原数据库。命令中的`-u`参数用于指定用户名,`-p`参数用于提示输入密码,`数据库名`是需要还原数据的数据库名称,`<`符号用于从备份文件中读取数据。2. 使用MySQL导入工具还原CSV或文本文件:`LOAD DATA INFILE '文件路...

MySQL数据库备份和还原的常用命令小结
备份MySQL数据库,主要有以下几种方式:全面备份整个数据库:使用`mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql`删除表备份:添加`--add-drop-table`参数,如`mysqldump --add-drop-table -uusername -ppassword databasename > backupfile.sql`压缩备份:`mysqldump -hh...

如何正确还原MySQL数据库mysql数据库如何还原
1、可以使用MySQL Dump程序进行数据库备份,MySQL Dump可以将MySQL数据库快速备份到硬盘中,可以方便地将备份还原到原始状态。它使用如下代码来备份MySQL数据库:mysqldump -u root -p database_name > database_name.sql 2、可以使用MySQL Administrator工具来实现数据库备份和还原。MySQL Administrator工具...

实现MySQL数据库的备份与还原的几种方法
2. 使用mysqldump数据库备份mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。mysqldump 的一些主要参数:1)--compatible=name它告诉 mysqldump,导出的数据...

MySQL如何备份与还原
一、Win32系统下MySQL的备份还原方法备份:在“运行”中输入“cmd ”,利用“cd \/Program Files\/MySQL\/MySQL Server 5.0\/bin”进入bin文件夹,输入“mysqldump -u 用户名 -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p ...

数据误删怎么恢复MySQL数据mysql不小心把用户
一、使用备份文件还原数据 如果在数据删除前备份了MySQL数据库,就可以通过备份文件还原数据。可以使用命令行或图形界面工具,找到备份文件并还原。以命令行方式为例,执行以下命令:mysql -u root -p Enter password:mysql> CREATE DATABASE database_name;mysql> USE database_name;mysql> SOURCE \/path...

如何找回丢失的MySQL三天前数据mysql三天前数据
备份是防止数据丢失的最佳选择。如果你使用了备份,可以在数据丢失后,使用备份文件还原数据。如果没有备份,确保今后备份是必要的。在备份恢复数据的过程中,需要记住一些重要的问题。确定备份文件是正确的,尝试在备份文件上重现问题,以确保备份文件没有问题。2. 恢复二进制日志(Bin Logs)MySQL会自动记录...

mysql 如何备份和还原数据库
1.1 备份mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:•--compatible=name 它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql...

相似回答