备份数据库
使用mysqldump命令备份数据库
还原数据库
1、使用mysql命令还原数据库
将game_backup.sql 还原至 game 数据库:
2、使用source命令还原数据库
如果数据库过大,建议可以使用source命令
前言
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...