MySQL之备份与恢复

MySQL备份类型:

1 根据备份时,服务器是否在线,分为:

1)热备——服务器在线,并且读写不受影响。

2)温备——服务器在线,但需要锁表,并且可读不可写。

3)冷备——服务器下线,读写中止。

2 按备份方式,分为:

物理备份——复制数据文件,特点是备份和恢复速度比较快。占用空间较大,适合于大数据备份。

逻辑备份——将数据导出到文件中,速度较慢,可能失去浮点数精度,适合于数据量较小的场景。

逻辑备份最大的优点是对于各种存储引擎都可以采用同样的方式来备份。而物理备份则不同,不同的存储引擎有不同的备份方法,因此,对于不同存储引擎混合的数据库,用逻辑备份会理简单一些。

MySQL的备份工具:

1 mysqldump——逻辑备份工具,温备,对innoDB可以实现热备。

选项:

--master-data=0|1|2

0:不记录二进制文件及其位置

1:以change master to 的方式记录位置,可用于恢复后直接启动从服务器

2:以change master to 的方式记录位置,但默认为被注释

-x, --lock-all-tables:加上此参数,即备份之前锁定所有表

-F,--flush-logs:刷新二进制日志

--databases:备份指定库和表

-A, --all-databases:备份所有库和表

1)备份和恢复

导出指定库中的部分表:导出test库中的test01、test02两张表:

[[email protected] ~]# mysqldump -uroot -p test test01 test02 > /root/test_$(date +%F).sql

恢复:恢复表时,由于备份文件中没有建库的语句,必须指明库,如果库不存在,需要先建立数据库

[[email protected] ~]# mysql -uroot -p test < /root/test_2017-05-01.sql

导出一个或多个数据库:导出test yewu xiaoshou数据库

[[email protected] ~]# mysqldump -uroot -p --databases test yewu xiaoshou > /root/test_yewu_xiaoshou_$(date +%F).sql

恢复:由于备份文件中已包含完整的库信息,因此还原时不需要指定库名

[[email protected] ~]# mysql -uroot -p < test_yewu_xiaoshou_2017-05-01.sql

备份MySQL数据库中所有的库:

[[email protected] ~]# mysqldump -uroot -p --all-databases > alldatabase_$(date +%F).sql

恢复:

[[email protected] ~]# mysql -uroot -p < alldatabase_2017-05-01.sql

2)生产环境实例

a 上午10:00备份数据库

[[email protected] ~]# mysqldump -uroot -p --lock-all-tables --flush-logs --master-data=2 --databases test > test_$(date +%F).sql

其中表test01的内容如下:

mysql> select * from test01;

+------+------+

| id   | name |

+------+------+

|    1 | zhan |

|    2 | liso |

|    3 | wang |

|    5 | kang |

+------+------+

b 向表中添加新的数据

mysql> insert into test01 values(‘18‘,‘dan‘);

Query OK, 1 row affected (2.56 sec)

mysql> select * from test01;

+------+------+

| id   | name |

+------+------+

|    1 | zhan |

|    2 | liso |

|    3 | wang |

|    5 | kang |

|   18 | dan  |

+------+------+

5 rows in set (0.00 sec)

c 下午2:00,数据库中的表被误删,开始恢复备份,首先恢复全备

[[email protected] ~]# mysql -uroot -p test < test_2017-05-01.sql

Enter password:

mysql> select * from test01;

+------+------+

| id   | name |

+------+------+

|    1 | zhan |

|    2 | liso |

|    3 | wang |

|    5 | kang |

+------+------+

4 rows in set (0.00 sec)

由以上结果可知,缺少id为18的行

d 使用mysqlbinlog命令恢复自mysqldump备份以来的binlog

查看mysqldump备份时binlog日志的位置

[[email protected] ~]# less test_2017-05-01.sql

-- MySQL dump 10.13  Distrib 5.6.30, for Linux (i686)

--

-- Host: localhost    Database: test

-- ------------------------------------------------------

-- Server version       5.6.30-log

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;

/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;

/*!40101 SET @[email protected]@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @[email protected]@TIME_ZONE */;

/*!40103 SET TIME_ZONE=‘+00:00‘ */;

/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */;

/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;

--

-- Position to start replication or point-in-time recovery from

--

-- CHANGE MASTER TO MASTER_LOG_FILE=‘localhost-bin.000003‘, MASTER_LOG_POS=120;

--

-- Current Database: `test`

--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `test`;

--

-- Table structure for table `test01`

--

备份二进制日志

[[email protected] ~]#mysqlbinlog localhost-bin.000003 > /root/binlog.sql

删除二进制日志中的错误SQL语句

vim binlog.sql

...

DROP TABLE `test01`

DROP TABLE IF EXISTS `test01`

...

恢复:

mysql -uroot -p  test < backbinlog.sql

查看恢复后的表:

mysql> select * from test01;

+------+------+

| id   | name |

+------+------+

|    1 | zhan |

|    2 | liso |

|    3 | wang |

|    5 | kang |

|   18 | dan  |

+------+------+

5 rows in set (0.00 sec)

2 xtrabackup——对InnoDB做数据备份的工具,备份方式为物理备份,而且支持热备,

1)安装,可以提前安装好epel的yum源

[[email protected] ~]# wget [[email protected] ~]# rpm -ivh https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.8/binary/redhat/6/i386/percona-xtrabackup-2.3.8-1.el6.i686.rpm

[[email protected] ~]# yum -y localinstall percona-xtrabackup-2.3.8-1.el6.i686.rpm

2)备份和恢复

备份:

a 建立备份账户:

mysql> grant reload,lock tables,replication client on *.* to ‘dbbak‘@‘localhost‘ identified by ‘bk2016‘ ;

b 完全备份,socket可以不指定,除非和默认不一致

[[email protected] ~]# innobackupex --socket=/tmp/mysqld.sock --user=dbbak --password=bk2016 /root/

...

170501 23:20:35 Backup created in directory ‘/root/2017-05-01_23-20-25/‘

MySQL binlog position: filename ‘localhost-bin.000003‘, position ‘15651‘

170501 23:20:35 [00] Writing backup-my.cnf

170501 23:20:35 [00]        ...done

170501 23:20:35 [00] Writing xtrabackup_info

170501 23:20:35 [00]        ...done

xtrabackup: Transaction log of lsn (2031876) to (2031876) was copied.

170501 23:20:35 completed OK!

[[email protected] ~]# cd 2017-05-01_23-20-25/            #查看备份后的目录

[[email protected] 2017-05-01_23-20-25]# ls

backup-my.cnf  ibdata1  mysql  performance_schema  test  xiaoshou  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile  yewu

备份目录说明:

xtrabackup_checkpoints——备份类型(如完全和增量)、备份状态、LSN(日志序列号)范围信息

xtrabackup_my.cnf——备份命令用到的配置选项信息

xtrabackup_binlog_info——MySQL服务器当前使用的二进制日志文件及到备份这一刻为止二进制日志事件的位置

c 预处理备份文件,准备一个完全备份,可增加内存选项,--use-memory=1G

[[email protected] ~]# innobackupex --apply-log /root/2017-05-01_23-20-25

d 数据更改之后,通过二进制进行增量备份

[[email protected] 2017-05-01_23-20-25]# cat xtrabackup_binlog_info

localhost-bin.000003 15651

[[email protected] ~]# mysqlbinlog /usr/data/mysql/localhost-bin.000003 > /root/bin$(date +%F).sql

恢复:

a 停止服务

[[email protected] ~]# service mysqld stop

b 恢复全备,MySQL数据目录必须为空,否则会报错

[[email protected] ~]# innobackupex --copy-back --user=dbbak --password=bk2016 /root/2017-05-01_23-20-25/

[[email protected] mysql]# cd /usr/local/mysql/            #修改数据目录的属主属组

[[email protected] mysql]# chown -R mysql.mysql *

c 启动服务

[[email protected] mysql]# service mysqld start

d 通过二进制文件恢复增量备份

mysql> set sql_log_bin=0;                    #暂时关闭二进制日志

Query OK, 0 rows affected (0.03 sec)

mysql> source /root/bin2017-05-01.sql;

...

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> set sql_log_bin=1;                    #开启二进制日志

Query OK, 0 rows affected (0.00 sec)

e 恢复完成后,重新进行一次完全备份

表的导入和导出

时间: 2024-12-13 07:13:08

MySQL之备份与恢复的相关文章

利用mysqlbump实现MySQL逻辑备份与恢复

mysqldump作为重要的MySQL备份工具,功能相当强大.备份参数.恢复策略,需要仔细研究. (1)基本语法 备份单个数据库或单个数据库中的指定表: mysqldump [OPTIONS] database [tables] 示例: 1.备份单个数据库mysql:mysqldump -uroot -p mysql > mysql.sql 2.备份单个数据库mysql的指定表user:mysqldump -uroot -p mysql user > mysql.user.sql 备份多个数据

MySql 的备份与恢复

Linux下的mysql的备份与恢复 备份: 比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump 命令格式如下: [[email protected] root]# mysqldump -u root -p linux > /root/linux.sql Enter password:在这里输入数据库的密码 通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份:其次:备份目的地是/root,备份的文件名是linux.sql.其实备份的

MySQL增量备份与恢复实例【转】

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的MySQL版本为5.5.40 for Linux (x86_64). 增量备份要确保打开了二进制日志,参考mysql的日志系统: mysql> show variables like '%log_bin%'; 首先对pak数据库做一个完整备份: $ mysqldump -h localhost -u

2.MySQL用户管理,常用SQL语句,MySQL数据库备份与恢复

[toc] MySQL用户管理,重用SQL语句,MySQL数据库备份与恢复 一.MySQL用户管理 1.创建一个普通用户并授权 首先启动mysql,然后进入 [[email protected] ~]# /etc/init.d/mysqld start Starting MySQL... SUCCESS! [[email protected] ~]# mysql -uroot -pxavilinux Warning: Using a password on the command line in

96.创建普通用户并授权,常用SQL语句,MySQL数据库备份与恢复

一.创建普通用户并授权 1.创建用户并授权 [[email protected] ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.36 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/o

MySQL增量备份与恢复

MySQL增量备份与恢复 技能目标 理解MySQL增量备份的概念 理解MySQL增量备份与恢复的方法 1:增量备份的概念 完全备份每次把所有文件全部备份一边占用空间较大,增量备份就解决了这一问题它可以在你完全备份后如果做了修改或者需要备份的文件不大就用增量备份去解决这一问题 2:增量备份的特点 (1)二进制文件保存了所有更新或者可能更新数据库操作 (2)二进制文件在启动MySQL服务后开始记录 (3)只需要执行刷新就能创建新日志 增量备份实战演练 下面是生产环境中的案例,对它进行增量备份操作 1

MySQL的备份与恢复具体解释

MySQL数据备份 在mySQL里面,有逻辑备份和物理备份.逻辑备份最大长处是对于各种存储引擎,都能够使用相同的方法来备份. 而物理备份则不同.不同的存储引擎有着不同的备份方法. 逻辑备份与恢复 备份 在MySQL中逻辑备份是使用mysqldump将数据库中的数据备份为一个文本文件,备份的文件能够被查看和编辑.依照备份范围,能够将备份分为下面三种备份. 备份指定的一个数据库或者该数据库中的某些表 mysqldump [options] 数据库名 [表名] > data.sql 备份指定的多个数据

细聊MySQL的备份与恢复

备份对于数据库来说是相当重要的工作.如果数据库在使用过程中出现了问题,比如系统崩溃.硬件故障或错误的删除了数据.这时,如果我们进行了数据备份,就能比较方便的使数据库恢复工作,并使我们的数据损失到最小.下面,我从备份类型.备份方法及一些常用的例子来和大家详细探讨下数据库的备份与恢复. 一.备份类别 1.物理备份与逻辑备份 物理备份用人话来形容就是复制数据库的数据文件.如果我们需要备份名为test的数据库,则我们可以将数据目录下的test目录复制到备份设备中.如果我们需要备份test库下名为user

MySQL的备份与恢复详解

MySQL数据备份 在mySQL里面,有逻辑备份和物理备份.逻辑备份最大优点是对于各种存储引擎,都可以使用同样的方法来备份.而物理备份则不同,不同的存储引擎有着不同的备份方法. 逻辑备份与恢复 备份 在MySQL中逻辑备份是使用mysqldump将数据库中的数据备份为一个文本文件,备份的文件可以被查看和编辑.按照备份范围,可以将备份分为以下三种备份. 备份指定的一个数据库或者该数据库中的某些表 mysqldump [options] 数据库名 [表名] > data.sql 备份指定的多个数据库

DBA成长之路---mysql数据备份与恢复

数据备份与恢复 备份方式: 物理备份:直接拷贝备份库和表对应的文件 cp -r /var/lib/mysql/mysql  /mysql.bak tar -zcvf /mysql.tar.gz  /varlib/mysql/mysql/* 逻辑备份:执行备份时,根据已有的库和表生成对应的sql命令,把生成的sql命令存储到指定的备份文件里 备份策略: 完全备份: 备份所有数据(表,库,服务器) 差异备份:备份自完全备份后所新产生(备份新产生的数据) 增量备份:备份自上一次备份后,所有新产生(备份