最新消息: 新版网站上线了!!!

mysqldump实现全备份和增量备份

一、如果你使用mysql,那么肯定也会考虑到备份的情况吧,那下面我们就讲讲mysql备份的知识。

 

在线备份简单的来讲分为:全备份和增量备份,下面我们讲解一下mysqlinnodb引擎的数据库备份:

 

 

 

 

 

 

二、利用mysqldump实现的全备份和增量备份:

 

1.利用mysql自带的工具mysqldump来备份:

mysqldump -uroot -p --all-databases --flush-logs --master-data=2 --single-transaction  > full_back.sql

 

 

 

 

 

 

关键参数的含义:

 

 

--all-databases  , -A

导出全部数据库。

 

 

 

--flush-logs

开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外

 

。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 

 

和--flush-logs。

 

 

--master-data

该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE  MASTER命令前添加注释信息。该选项

 

将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--

 

single-transaction选项)。该选项自动关闭--lock-tables选项。

mysqldump  -uroot -p --host=localhost --all-databases --master-data=1;

mysqldump  -uroot -p --host=localhost --all-databases --master-data=2;

 

 

 

--single-transaction

该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK  TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。

mysqldump提供在线逻辑备份,我们在备份的时候使用single-transaction参数的话,MYSQL为我们提供一致性地读,并且保证mysqldump所看见的数据不会更改。(其它客户端对InnoDB表进行的更改不会被mysqldump进程看见)该参数自动关闭--lock-tables。

如果我们还有其它类型的表,我们必须假定在备份过程中它们不会更改。

 

 

 

 

--master-data=2起到的作用

 

grep -C 10 CHANGE  full_back.sql  | more(下面的内容在备份文件的前面出现)

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

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

 

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000078', MASTER_LOG_POS=107;

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

 

 

--flush-logs起到的作用,产生了新的binlog文件

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

-rw-rw---- 1 mysql mysql  644406800 Apr 23 11:11 mysql-bin.000077

-rw-rw---- 1 mysql mysql        107 Apr 23 11:11 mysql-bin.000078

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

 

 

 

2.增量备份:

增量备份可以利用flush log,产生新的binlog,保存(拷贝备份)新binlog之前的binlog文件,如果binlog数据量小的话,可以使一个binlog,如果多的话,就会产生多个binlog,不过没有关系,我们可以安装时间来拷贝产生的binlog文件。

 

在bird数据库的Customer表中插入一行数据:

mysql> insert into Customer(ID,First_Name,Last_Name,Addr,City,Country,Birth_Date) values (3,'wen','zhao','king 

 

street','shanghai','China','1985-09-21');

Query OK, 1 row affected (0.07 sec

mysql>

 

flush log:

mysqladmin -uroot -p flush-logs

 

可以看到产生的新log:

-rw-rw---- 1 mysql mysql  644406800 Apr 23 11:11 mysql-bin.000077

-rw-rw---- 1 mysql mysql        452 Apr 23 14:03 mysql-bin.000078

-rw-rw---- 1 mysql mysql        107 Apr 23 14:03 mysql-bin.000079

 

 

查看插入的数据是否在mysql-bin.000078中(mysqlbinlog mysql-bin.000078 | more),经查看插入的语句确实在mysql-bin.000078里面。

 

 

 

3.测试恢复,全备份的频率可每周做一次,增量备份可以每天做一次

 

如果机器出现了故障,或者数据库出现了问题,不能修复的情况下,就需要导入全备份和增量备份。用test库进行测试:

mysql> create table kehu(id int, name1 varchar(20),city varchar(20));

Query OK, 0 rows affected (0.06 sec)

 

mysql> insert into kehu(id,name1,city)values(1,'xiaoming','beijing');

Query OK, 1 row affected (0.04 sec)

 

mysql> select * from kehu;

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

| id   | name1    | city    |

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

|    1 | xiaoming | beijing |

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

1 row in set (0.00 sec)

 

mysql>

 

 

实现全备份:

备份test库:mysqldump -uroot -p test --flush-logs --master-data=2 --single-transaction  > test_back.sql

 

 

 

再次插入:

mysql> insert into kehu(id,name1,city)values(1,'dapeng','shanghai');

Query OK, 1 row affected (0.04 sec)

 

mysql>

 

 

 

实现增量备份:

mysqladmin  flush-logs

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

-rw-rw---- 1 mysql mysql      368 Apr 24 10:55 mysql-bin.000004

-rw-rw---- 1 mysql mysql      107 Apr 24 10:55 mysql-bin.000005

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

备份mysql-bin.000004文件

 

 

测试:

 

mysql> drop database test;

Query OK, 1 row affected (0.02 sec)

 

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

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

3 rows in set (0.00 sec)

 

mysql>

 

 

恢复时间点的全备份:

 

mysql> create database test;

Query OK, 1 row affected (0.00 sec)

 

mysql> use test;

Database changed

mysql> source /backup/test_back.sql;

Query OK, 0 rows affected (0.00 sec)

 

Query OK, 0 rows affected (0.00 sec)

....................................

mysql>

 

 

 

mysql> show tables;

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

| Tables_in_test |

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

| kehu           |

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

1 row in set (0.00 sec)

 

mysql> select * from kehu;

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

| id   | name1    | city    |

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

|    1 | xiaoming | beijing |

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

1 row in set (0.00 sec)

 

mysql> 

 

 

执行需要的增量备份:

 

mysqlbinlog mysql-bin.000004 | mysql

 

 

再次查看表的情况:

mysql> select * from kehu;

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

| id   | name1    | city     |

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

|    1 | xiaoming | beijing  |

|    1 | dapeng   | shanghai |

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

2 rows in set (0.00 sec)

 

mysql>

 

 

已经恢复到了最新的配置了。

 
.....

转载请注明:谷谷点程序 » mysqldump实现全备份和增量备份