`

mysql数据迁移、备份、还原

阅读更多

其实热备份和还原,客户端操作工具就有,不过这里还是介绍一下命令行吧(window下,linux未测试):

1、备份和恢复表:(test是数据库名)

备份:C:\Users>mysqldump test cloth -uroot -p123 > D:test.sql

恢复:C:\Users>mysql test -uroot -p123 < D:test.sql

所以如果你线上有某个表数据出错需要恢复,可以先建一个新表导入备份数据,再热更新到原表就可以了。

2、备份数据库:

备份:C:\Users>mysqldump test -uroot -p123 > D:test.sql

恢复(一样):C:\Users>mysql test -uroot -p123 < D:test.sql

 

具体的参数可以通过C:\Users>mysqldump --help查看,有详细简介,其中用的比较多的有-h(host地址比如ip),-a(备份所有数据库)

 

 

数据迁移:(数据逗号分开了)

1、导入:load data infile '/t.txt' into table t FIELDS TERMINATED BY ',';

2、导出:select * from t into outfile '/t_0.txt';

数据备份:

1、热备(上面有介绍)

2、冷备,拷贝data目录。

还原:

1、根据热备份,热还原

2、根据冷备份还原

3、根据binlog还原到指定时间点。

 

主从复制,高可用情况:

配置教程

原理介绍:

MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。

相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢?

1. MySQL数据库主从同步延迟原理。

2. MySQL数据库主从同步延迟是怎么产生的。

3. MySQL数据库主从同步延迟解决方案。

 

1. MySQL数据库主从同步延迟原理。

答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和 DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步, 问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺 序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要 执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什 么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。

2. MySQL数据库主从同步延迟是怎么产生的。

答:当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。

3. MySQL数据库主从同步延迟解决方案

答:最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。

附加:

sync_binlog 配置说明:

sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。

从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

innodb_flush_log_at_trx_commit 配置说明:

默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。 

 

 

mysql-5.6.3已经支持了多线程的主从复制。原理和丁奇的类似,丁奇的是以表做多线程,Oracle使用的是以数据库(schema)为单位做多线程,不同的库可以使用不同的复制线程。

 

基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了。如果延迟比较大,就先确认以下几个因素: 
1. 网络延迟
2. master负载
3. slave负载
一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器,只作为备份用,不进行其他任何操作,就能相对最大限度地达到'实时'的要求了

slave_net_timeout单位为秒 默认设置为 3600秒

参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据

master-connect-retry单位为秒 默认设置为 60秒

参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试。

通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟

 

判断主从延时,通常有两个方法:

1. Seconds_Behind_Master  vs  2. mk-heartbeat,下面具体说下两者在实现功能的差别。

可以通过监控show slave status\G命令输出的Seconds_Behind_Master参数的值来判断,是否有发生主从延时。
其值有这么几种:
NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.
0 - 该值为零,是我们极为渴望看到的情况,表示主从复制良好,可以认为lag不存在。
正值 - 表示主从已经出现延时,数字越大表示从库落后主库越多。
负值 - 几乎很少见,只是听一些资深的DBA说见过,其实,这是一个BUG值,该参数是不支持负值的,也就是不应该出现。

Seconds_Behind_Master是通过比较sql_thread执行的event的timestamp和io_thread复制好的 event的timestamp(简写为ts)进行比较,而得到的这么一个差值。我们都知道的relay-log和主库的bin-log里面的内容完全一 样,在记录sql语句的同时会被记录上当时的ts,所以比较参考的值来自于binlog,其实主从没有必要与NTP进行同步,也就是说无需保证主从时钟的 一致。你也会发现,其实比较真正是发生在io_thread与sql_thread之间,而io_thread才真正与主库有关联,于是,问题就出来了, 当主库I/O负载很大或是网络阻塞,io_thread不能及时复制binlog(没有中断,也在复制),而sql_thread一直都能跟上 io_thread的脚本,这时Seconds_Behind_Master的值是0,也就是我们认为的无延时,但是,实际上不是,你懂得。这也就是为什 么大家要批判用这个参数来监控数据库是否发生延时不准的原因,但是这个值并不是总是不准,如果当io_thread与master网络很好的情况下,那么 该值也是很有价值的。(就好比:妈–儿子–媳妇的关系,妈与儿子亲人,媳妇和儿子也亲人,不见得媳妇与妈就很亲。开个玩笑:-)之前,提到 Seconds_Behind_Master这个参数会有负值出现,我们已经知道该值是io_thread的最近跟新的ts与sql_thread执行到 的ts差值,前者始终是大于后者的,唯一的肯能就是某个event的ts发生了错误,比之前的小了,那么当这种情况发生时,负值出现就成为可能。

方法2. mk-heartbeat,Maatkit万能工具包中的一个工具,被认为可以准确判断复制延时的方法。

mk-heartbeat的实现也是借助timestmp的比较实现的,它首先需要保证主从服务器必须要保持一致,通过与相同的一个NTP server同步时钟。它需要在主库上创建一个heartbeat的表,里面至少有id与ts两个字段,id为server_id,ts就是当前的时间戳 now(),该结构也会被复制到从库上,表建好以后,会在主库上以后台进程的模式去执行一行更新操作的命令,定期去向表中的插入数据,这个周期默认为1 秒,同时从库也会在后台执行一个监控命令,与主库保持一致的周期去比较,复制过来记录的ts值与主库上的同一条ts值,差值为0表示无延时,差值越大表示 延时的秒数越多。我们都知道复制是异步的ts不肯完全一致,所以该工具允许半秒的差距,在这之内的差异都可忽略认为无延时。这个工具就是通过实打实的复 制,巧妙的借用timestamp来检查延时,赞一个!

分享到:
评论

相关推荐

    易语言MYSQL数据库备份还原器

    总之,《易语言MYSQL数据库备份还原器》是针对MYSQL数据库管理的高效工具,它的备份和还原功能确保了数据的安全,目录复制则提供了额外的灵活性。结合易语言的易用性,这款软件为用户提供了高效、可靠的数据库管理...

    MySQL数据库备份和恢复

    MySQL作为全球最流行的开源关系型数据库管理系统之一,其备份和恢复策略是确保数据安全和系统高可用性的关键环节。本文将深入探讨MySQL数据库的备份与恢复机制,涵盖主要的备份工具、技术细节以及最佳实践,旨在为...

    通过Data文件夹备份和还原实现Mysql数据库的备份以及还原

    在MySQL数据库管理中,数据备份和恢复是至关重要的任务,特别是在面临系统故障、数据丢失或升级迁移时。本文将详细讲解如何通过Data文件夹备份和还原实现MySQL数据库的备份及恢复,这是一种简单直接的方法,尤其适合...

    新宇Mysql备份还原大师 v1.0.zip

    总的来说,新宇Mysql备份还原大师v1.0是一款实用的数据库管理工具,它降低了数据库管理的门槛,使得非专业人士也能轻松应对数据备份和恢复任务,为企业的数据安全提供了有力保障。通过充分利用这款软件,用户可以更...

    MySQL数据库备份和还原

    总结,MySQL数据库备份和还原是数据安全管理的重要组成部分,理解不同备份类型和工具,制定合适的备份策略,并定期测试和优化,能有效保障数据安全,减少潜在风险。在实际操作中,应根据业务需求和资源限制灵活选择...

    MySql表备份还原

    "MySql表备份还原"是一个重要的环节,确保在数据丢失或系统故障时能够快速恢复到正常状态。下面将详细讲解MySQL表备份与还原的策略、方法及注意事项。 一、MySQL备份 1. 全量备份:使用`mysqldump`工具进行全库或单...

    记一次MySQL数据迁移到SQLServer全过程.doc

    迁移方案:结合工具与编程,首先备份MySQL数据库,然后将备份还原至本地MySQL,接着利用第三方工具完成数据迁移。通过编写代码统计SQL条数,以库名和表名为依据回写结果,最后使用ultracompare进行数据比对,确保...

    完整精品数据库课件 MySQL从入门到精通 第14章 数据备份与还原(共21页).ppt

    本章重点讨论了如何在MySQL中进行数据备份、还原以及数据库的迁移。数据备份是确保数据安全的重要环节,尤其是在可能发生硬件故障、软件错误或者人为误操作时,备份能够帮助恢复数据。 14.1 数据备份 MySQL提供了...

    史上最简单的MySQL数据备份与还原教程(上)(三十五)

    MySQL数据备份与还原是数据库管理中的重要环节,它关乎到数据的安全性和完整性。本文主要讲解了MySQL中最基础的数据备份和还原方法,特别是针对数据表备份的实践操作。 首先,我们需要理解备份和还原的基本概念。...

    阿里MySQL备份恢复指南

    同时,用户还应了解如何在不同版本的MySQL之间进行数据迁移,以及如何处理数据一致性问题。 除了基本的备份恢复流程,这份指南可能还会涵盖一些高级主题,如热备份与冷备份的区别、如何验证备份的完整性、如何在...

    实验报告六 MYSQL备份与恢复.docx

    根据提供的实验报告“MYSQL备份与恢复”的相关内容,我们可以总结出以下几个关键知识点: ...同时,通过数据的导出与导入操作,也可以方便地进行数据迁移等工作。这些操作对于数据库管理员来说是非常重要的技能。

    mysql数据库太大了如何备份与还原

    因此,定期备份mysql数据库并在需要时进行还原,是保障数据安全,确保业务连续性的重要措施。 二、mysql数据库备份的常用命令和方法 1. mysqlhotcopy mysqlhotcopy是一个用于备份mysql数据库的实用程序,适用于Unix...

    Mysql迁移Oracle方案

    - **生产数据备份**:在开始迁移前,必须先对MySQL生产库进行完整备份。通常采用的方法是备份数据库的.psc文件(包含表结构和数据),但不备份函数和事件等非数据对象。 - **导入机还原备份文件** - 新建与Oracle...

    人大金仓安装与数据迁移(windows)

    本文将详细介绍如何在Windows操作系统上安装人大金仓数据库(kingbase SE V8),以及如何进行数据迁移,特别是从MySQL迁移到金仓数据库。 首先,我们需要从人大金仓官方网站下载数据库安装包和授权码。下载地址为:...

    协动网络 MySQL 数据库备份还原程序 v1.7

    综上所述,【协动网络 MySQL 数据库备份还原程序 v1.7】是一个全面的数据库管理工具,它提供了多种备份策略和便捷的恢复功能,对于保障数据安全和业务连续性至关重要。了解并熟练运用此类工具,对于任何使用MySQL...

    Think PHP 数据备份 恢复

    "Think PHP 数据备份 恢复"这个主题聚焦于如何利用ThinkPHP框架来执行数据库的备份和恢复操作,这对于防止数据丢失、系统维护以及迁移过程中的数据安全至关重要。下面,我们将深入探讨相关知识点。 首先,ThinkPHP...

    nosql实验五-HBase数据迁移与数据备份&恢复.docx

    本实验主要介绍了 HBase 数据迁移与数据备份和恢复的方法,包括使用 Sqoop 将 MySQL 数据导入到 HBase、将文本文件批量导入 HBase、使用 Hadoop DistCp 实现 HBase 的冷备份和热备份。 一、使用 Sqoop 将 MySQL ...

    MySql8.0恢复备份或迁移时,函数创建失败

    原因:开启了binlog日志,默认关闭函数的生成。 1.临时开启函数生成方法: set GLOBAL log_bin_trust_function_creators=1; 2.永久开启,修改数据库my.cnf配置文件 log_bin_trust_function_creators=1 ...

Global site tag (gtag.js) - Google Analytics