MySQL管理与优化(20):备份与恢复

备份与恢复:

  • 备份使得数据库的中的数据更加高效和安全。

备份/恢复策略:

进行备份或恢复时需要考虑的一些因素:

  • 确定要备份的表的存储引擎是事务性还是非事务性,两种不同存储引擎备份方式在处理数据一致性方面是不太一样的。
  • 确实使用全量备份还是增量备份。全备份的优点是备份保持最新备份,恢复的时候可以花费更少的时间;缺点是如果数据量过大,将花费很多的时间,并对系统造成较长时间的压力。增量备份则恰恰相反,只需备份每天的增量日志,备份时间少,对负载压力下;缺点是恢复的时候需要全备份加上次备份到故障前的所有日志,恢复时间会长些。
  • 可以考虑采取复制的方法来做异地备份,但复制不能代替备份,它对数据库的误操作也是无能为力。
  • 要定期做备份,备份的周期要充分考虑系统可以承受的恢复时间。备份要在系统负载较小的时候进行。
  • 确保MySQL打开log-bin选项,有了BINLOG,MySQL才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。
  • 要经常做备份恢复测试,确保备份是有效的,并且是可以恢复的。

逻辑备份和恢复:

  • 逻辑备份可以针对不同的存储引擎,而使用相同的方法来备份;而物理备份对于不同的存储引擎会有不同的方法。

备份:

  • MySQL中的逻辑备份将数据库中的数据备份为一个文本文件,备份的文件可以查看和编辑。
  • 我们可以是使用mysqldump工具实现备份,如:
-- 备份所有数据库
mysqldump -uroot -p --all-database > all.sql

-- 备份数据库test
mysqldump -uroot -p test > test.sql

-- 备份数据库test下的表emp
mysqldump -uroot -p test emp > test_emp.sql

-- 备份数据库test下的表emp, dept
mysqldump -uroot -p test emp dept > test_emp_dept.sql

-- mysqldump --help可查看更多选项
  • 为了保证数据备份的一致性,对于MyISAM表备份时需要加上-l参数,对于InnoDB可采用--single-transaction选项。

完全恢复:

  • 同样,我们可以使用mysqldump实现简单的恢复:
-- 恢复某个数据库
mysql -uroot -p db_name < bakfile

-- 上面的恢复可能不完整,还需要将备份后执行的日志进行重做
mysqlbinlog binlog-file | mysql -uroot -p db_name

基于时间点恢复:

  • MySQL恢复中分为完全恢复和非完全恢复,非完全恢复分为基于时间点的恢复和基于位置的恢复。
  • 基于时间点的恢复:
-- 若上午10点发生了误操作,可以用下面的语句进行恢复
mysqlbinlog --stop-date="2014-10-06 9:59:59" bin_log_file | mysql -uroot -p****

-- 跳过10点的误操作,再恢复
mysqlbinlog --start-date="2014-10-06 10:00:01" bin_log_file | mysql -uroot -p****

基于位置恢复:

-- 保存某时间段内的日志
mysqlbinlog --start-date="2014-10-06 12:10:20" --stop-date="2014-10-06 12:15:00" bin_log_file > temp_file

-- 越过某些位置的日志,进行恢复,如跳过1000~2000位置的日志
mysqlbinlog --stop-position="1000" bin_log_file | mysql -uroot -p****
mysqlbinlog --start-position="2000" bin_log_file | mysql -uroot -p****

物理备份和恢复:

  • 物理备份又分为冷备份和热备份两种,和逻辑备份相比,优点是备份和恢复的速度更快。

冷备份:

  • 停掉MySQL服务,在操作系统级别恢复MySQL的数据文件;重启MySQL服务,使用mysqlbinlog工具恢复备份以来所有的BINLOG。

热备份:

  • 热备份需要针对不同存储引擎,主要是MyISAM和InnoDB。
  • MyISAM存储引擎:
-- 1. 使用mysqlhotcopy工具
mysqlhotcopy -u root -p **** db_name /path/to/new_directory

-- 2. 手动锁表复制
flush tables for read;
-- 复制数据文件到备份目录
  • InnoDB存储引擎:

可以参考收费工具ibbackup,http://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/ihb-meb-compatibility.html

表的导入导出:

导出:

  • 有时我们需要对数据库表进行导出,以:

1. 作为Excel显示;

2. 为了节省备份空间;

3. 为了快速加载数据,LOAD DATA的加载速度比普通的SQL加载快20倍以上。

  • 可以有两种办法来实现:
-- 使用SELECT ... INTO OUTFILE ...
SELECT * FROM table_name INTO OUTFILE ‘file_name‘ [option];

其中option选项:

NOTE: SELECT ... INTO OUTFILE ...产生的输出文件如果已存在,将会创建失败,不会覆盖原文件。

第2种方法是用mysqldump导出:

mysqldump -u username -T target_dir db_name table_name [option]

其中option选项:

导入:

  • 使用LOAD DATA INFILE:
LOAD DATA [LOCAL] INFILE ‘file_name‘ INTO TABLE table_name [option]

其中option选项如下:

  • 使用mysqlimport:
mysqlimport -u root -p*** [--LOCAL] db_name file_name [option]

其中option:

NOTE: 如果导入和导出是跨平台操作的(Windows和Linux),那么要注意设置参数line-terminated-by,Windows上设置为line-terminated-by=‘\r\n‘,Linux上设置line-terminated-by=‘\n‘。

不吝指正。

时间: 2024-10-12 17:54:01

MySQL管理与优化(20):备份与恢复的相关文章

MySQL管理与优化(19):应用优化

应用优化: 使用连接池: 使用数据库连接池,可以复用数据库连接对象,从而减少创建新连接带来的资源消耗. 减少对MySQL的访问: 避免对同一数据做重复检索: 理清应用的业务逻辑,尽量减少查询次数. 使用查询缓存: 有关Mysql Query Cache的参数: mysql> SHOW VARIABLES LIKE '%query_cache%'; +------------------------------+---------+ | Variable_name | Value | +-----

MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是<MySQL管理之道:性能调优.高可用与监控>. 内容涵盖性能调优(包括sql优化等).备份.高可用,以及读写分离等,对于普及MySQL基础非常有用.记录一下,以便于后面查阅. 附目录: 1章 MariaDB架构与历史1 1.1 MariaDB的介绍 1 1.2 MariaDB和MySQL的兼容性 2 1.3 MariaDB 10.0新增的功能 3 1.3.1 更多的存储引擎 4 1.3.2 速度的提升 5 1.3.3

mysql的配置优化

需求:mysql的参数优化对于不同的网站,极其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次万次,需要在工作当中不断的监控观察和调试,才能得到最佳的效果.性能优化影响最大的变量分为连接请求变量和缓冲区变量. 理论总结: 修改vim/my.cnf max_connections = 1024    设置最大连接数为1024 back_log = 100      暂存的连接数量 wait_timeout = 100 interactive_timeout = 100

MySQL管理之SQL语句实例

MySQL管理之SQL语句实例 首先,我们来导入world库,这个world库中的表是mysql ocp考试专用表,在网上有下 mysql> source/root/world_innodb.sql 表结构如下: 本文来自http://yijiu.blog.51cto.com 转载请经博主允许 ,盗帖可耻! CREATE TABLE `Country` (  `Code` char(3) NOT NULL DEFAULT '',  `Name` char(52) NOT NULL DEFAULT

Mysql性能的优化配置

一.MySQL 性能优化之-影响性能的因素 1. 商业需求的影响 不合理需求造成资源投入产出比过低,这里我们就用一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计,附加要求:实时更新 从功能上来看非常容易实现,执行一条 SELECT COUNT(*) from 表名 的 Query 就可以得到结果.但是,如果我们采用不是 MyISAM 存储引擎,而是使用的 Innodb 的存储引擎,那么大家可以试想一下,如果存放帖子的表中已经有上千万的帖子的时候,执行这条 Query 语句需要多少

MYSQL之性能优化 ----MySQL性能优化必备25条

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被

(转)MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

标签:服务器 数据库 老男孩 高薪技能 一线城市 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师-老男孩专家拥有16年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的真传,所以只有6年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件

密码恢复及设置,用户授权及撤销,MySQL管理工具

密码恢复及设置 1.1 问题 本案例要求熟悉MySQL管理密码的控制,完成以下任务操作: 练习重置MySQL管理密码的操作 通过正常途径设置MySQL数据库的管理密码 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:重置MySQL管理密码 1)首先停止已运行的MySQL服务程序 [[email protected] ~]# systemctl stop mysqld.service         //停止服务 [[email protected] ~]# systemctl statu

Mysql数据库性能优化(一)

参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面