服务器上的应用软件现在瘫痪了,想把数据库导出来以后在还原,不知数据库怎么备份和原
服务器系统是Windows server 2003的
数据库是mysql
请问现在怎样把mysql 数据库备份出来,待应用软件重新安装好后,再把数据库还原回去?
前言
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
1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | cmd |利用“cd \/Program Files\/MySQL\/MySQL Server 5.0\/bin”命令进入bin文件夹 | 利用“mysqldump -u 用户名 -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p voice>voice.sql,然后输入密码即可开始导...
如何备份和还原MYSQL数据库里的数据
找到服务器上mysql的数据库存放路径下面的数据库名文件,拷贝过去放到新服务器的对应路径下就可以了 比如你要备份test的数据库,就到你的mysql安装目录D:MySQLdata下面把test这个文件夹整个复制走就可以了
mysql 如何备份和还原数据库
需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog 的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了: FLUSH LOGS;如果是备份复制系统中的从服务器,还应该备份 master.info 和 relay-log.info 文件。 备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如: \/...
如何备份和还原MYSQL数据库里的数据?
备份:用SQLyog Enterprise登陆上去,选用你要备份的数据库--->右键选"Backup database as SQL dump",然后按提示设置并选好保存结果的路径即可.还原:用SQLyog Enterprise登陆上去,先建立一个库,然后选用你要恢复的数据库--->右键选"Restore FROM SQL dump",然后按提示设置并选好对应路径下的文件即可....
怎样备份\/还原MySQL数据库 之 MySQL Workbench
1、运行 MySQL Workbench ,点击(1)加号按钮,设置目标数据库的登录信息后,点击(2)[Test Connection]测试链接成功后,点击[OK]按钮。2、点击新建的连接,例如 Localhost。若弹出 Connection Warning 窗口,请确认当前版本 Workbench 是否支持目标数据版本,如果支持,点击[Continue Anyway]按钮。三、备份数据...
怎样彻底删除mysql数据库
1. 备份数据库。2. 使用命令行或管理工具卸载MySQL服务。3. 删除MySQL相关文件和目录。4. 清理系统配置和注册表。详细解释:备份数据库 在删除数据库之前,首先要备份所有重要的数据。这是为了防止在删除过程中数据丢失或损坏。可以使用MySQL的导出工具将数据导出为SQL文件,以便将来恢复。卸载MySQL服务 可...
教你怎样实现MySQL数据库双机热备份_MySQL
1、MySQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。实现MySQL数据库的热备份。 2、要想实现双机的热备首先要了解主从数据库服务器的版本的需求。要实现热备MySQL的版本都要...
怎样还备份和还原SQL数据库?
日志备份的脚本如下: SQL code BACKUP LOG mydb_log TO DISK=’D:\\backup\\mydb.trn’需要养成使用.trn为日志备份的扩展名的习惯。每个在数据库上的动作都会被安排一个Log Sequence Number (LSN)。如果需要还原到指定的时间点,需要有持续的LSN记录。也就是说,在完全恢复模式或者大容量日志模式下,一个不被打断...
怎样修复mysql表
1,REPAIR TABLE SQL statement(mysql服务必须处于运行状态)。2,命令mysqlcheck(mysql服务可以处于运行状态)。3,命令myisamchk(必须停掉mysql服务,或者所操作的表处于不活动状态)。在修复表的时候,最好先作一下备份。所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。1>...
如何通过phpMyAdmin备份和还原MySQL数据库
1、访问phpMyAdmin,输入数据库帐号密码,点击 登入 2、选择你的数据库,点击进入 3、点击 导出 ,点击 执行 ,备份将自动下载 导入是同样先选择数据库,然后点击 导入 ,选择数据库备份文件,点击 执行 等着就行,完成后会有提示