备份、还原及恢复
直接复制数据库目录进行物理备份(冷备)及还原
mysqldump逻辑备份及恢复

利用逻辑卷快照备份及恢复

利用xtrabackup进行数据库备份及恢复

直接复制数据库目录进行物理备份(冷备)及还原

[root@master ~]# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.28-log MySQL Community Server (GPL)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.28-log |
+------------+
1 row in set (0.01 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

备份前应停掉数据库

[root@master ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!
#准备好备份目录
[root@master ~]# mkdir /backup
[root@master ~]# cd /mydata/data/
[root@master data]# ls -F
bbs/         master.err        mysql-bin.000002  mysql-bin.000006  mysql-bin.000010  mysql-bin.000014  mysql-bin.index
ibdata1      master.pid        mysql-bin.000003  mysql-bin.000007  mysql-bin.000011  mysql-bin.000015  performance_schema/
ib_logfile0  mysql/            mysql-bin.000004  mysql-bin.000008  mysql-bin.000012  mysql-bin.000016  shop/
ib_logfile1  mysql-bin.000001  mysql-bin.000005  mysql-bin.000009  mysql-bin.000013  mysql-bin.000017  test/
[root@master data]# cd /mydata/
[root@master mydata]# tar zcf /backup/mysql-cold-full-`date +%F`.tar.gz data/
[root@master mydata]# ls /backup/
mysql-cold-full-2013-08-17.tar.gz

模拟故障

[root@master mydata]# rm /mydata/data/ -rf
[root@master mydata]# ls /mydata/
lost+found
还原数据库
[root@master mydata]# tar xf /backup/mysql-cold-full-2013-08-17.tar.gz -C /mydata/
[root@master mydata]# ls /mydata/
data/       lost+found/
[root@master mydata]# ls -l /mydata/data/ | head -n 5
total 34544
drwx------ 2 mysql mysql    57344 Aug 17 19:53 bbs
-rw-rw---- 1 mysql mysql 18874368 Aug 17 19:53 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Aug 17 19:53 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Aug 17 19:53 ib_logfile1
启动数据库
[root@master mydata]# service mysqld start
Starting MySQL... SUCCESS!
[root@master mydata]# mysql -p -e 'show databases;'
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+

完成

mysqldump逻辑备份及恢复

[root@master ~]# mysqldump -p --all-databases --lock-all-tables -R --triggers --flush-logs >/backup/mysql-`date +%F`-all-databases.sql
Enter password:
[root@master ~]# ll /backup/
total 5760
-rw-r--r-- 1 root root 3127923 Aug 17 20:10 mysql-2013-08-17-all-databases.sql
-rw-r--r-- 1 root root 2766412 Aug 17 19:55 mysql-cold-full-2013-08-17.tar.gz
记下此时binlog位置;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000019 |      605 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> select user_id,user_name,last_time from shop.ecs_users;
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
+---------+-----------+---------------------+
4 rows in set (0.00 sec)
增加几条记录模拟备份后的数据变化:
mysql> insert into shop.ecs_users(user_name,last_time) values ('user1',now());
Query OK, 1 row affected, 7 warnings (0.03 sec)
mysql> select user_id,user_name,last_time from shop.ecs_users;
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
+---------+-----------+---------------------+
5 rows in set (0.02 sec)
再插入1条:
mysql> insert into shop.ecs_users(user_name,last_time) values ('user2',now());
Query OK, 1 row affected, 7 warnings (0.00 sec)
mysql> select user_id,user_name,last_time from shop.ecs_users;
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
|       7 | user2     | 2013-08-17 21:01:59 |
+---------+-----------+---------------------+
6 rows in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000019 |     1225 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
滚动二进制日志后再插入几条:
mysql> flush logs;
Query OK, 0 rows affected (0.12 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000020 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> insert into shop.ecs_users(user_name,last_time) values ('user3',now()),('user4',now()),('user5',now());
Query OK, 3 rows affected, 7 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 7
mysql> select user_id,user_name,last_time from shop.ecs_users;
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
|       7 | user2     | 2013-08-17 21:01:59 |
|       8 | user3     | 2013-08-17 21:04:50 |
|       9 | user4     | 2013-08-17 21:04:50 |
|      10 | user5     | 2013-08-17 21:04:50 |
+---------+-----------+---------------------+
9 rows in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000020 |      449 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.12 sec)

备份mysqldump备份后新产生的binlog用于恢复

[root@master ~]# cp /mydata/data/mysql-bin.0000{19,20} /backup/
[root@master ~]# ll /backup/
total 5768
-rw-r--r-- 1 root root 3127923 Aug 17 20:53 mysql-2013-08-17-all-databases.sql
-rw-r----- 1 root root    1268 Aug 17 21:33 mysql-bin.000019
-rw-r----- 1 root root     492 Aug 17 21:33 mysql-bin.000020
-rw-r--r-- 1 root root 2766412 Aug 17 19:55 mysql-cold-full-2013-08-17.tar.gz
模拟故障:
[root@master ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@master ~]# rm /mydata/data/* -rf
[root@master ~]# ll /mydata/data/
total 0
数据库还原:
重新初始化数据库
[root@master ~]# cd /usr/local/mysql
[root@master mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@master mysql]# cd
[root@master ~]# service mysqld start
Starting MySQL..... SUCCESS!
[root@master ~]# mysql -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
还原;
[root@master ~]# mysql </backup/mysql-2013-08-17-all-databases.sql
[root@master ~]# mysql -e 'show databases;select user_id,user_name,last_time from shop.ecs_users;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
+---------+-----------+---------------------+
此时的数据库中没有备份后添加的记录
要想恢复到故障前的状态就需要用到binlog了
恢复所有数据:
[root@master ~]# mysqlbinlog /backup/mysql-bin.000019 /backup/mysql-bin.000020 | mysql
[root@master ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
|       7 | user2     | 2013-08-17 21:01:59 |
|       8 | user3     | 2013-08-17 21:04:50 |
|       9 | user4     | 2013-08-17 21:04:50 |
|      10 | user5     | 2013-08-17 21:04:50 |
+---------+-----------+---------------------+
[root@master ~]# mysql -e 'flush  privileges;;'
至此数据库完全恢复
如果不想要21点之后的数据怎么办?
1、手工提取
还原部分和之前一致,数据库还原后的状态:
[root@master ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
+---------+-----------+---------------------+
[root@master ~]# mysqlbinlog /backup/mysql-bin.000019 /backup/mysql-bin.000020 >/backup/r.sql
[root@master ~]# vim /backup/r.sql

[root@master ~]# mysql </backup/r.sql
[root@master ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
+---------+-----------+---------------------+
2、基于时间点的恢复
[root@master ~]# mysqlbinlog  --stop-datetime="2013-08-17 21:00:00" /backup/mysql-bin.000019 /backup/mysql-bin.000020 | mysql
[root@master ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
+---------+-----------+---------------------+
3、基于位置恢复
此法要一个一个binlog地恢复
[root@master ~]# mysqlbinlog --stop-position=842 /backup/mysql-bin.000019  >/backup/r.sql
[root@master ~]# mysql </backup/r.sql
[root@master ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       6 | user1     | 2013-08-17 20:58:40 |
+---------+-----------+---------------------+
利用逻辑卷快照备份及恢复
锁定所有表
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.02 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.09 sec)
记录下二进制日志文件及相关位置信息
[root@master ~]# mysql -p -e "show master status\G" >/backup/master.info
Enter password:
[root@master ~]# cat /backup/master.info
*************************** 1. row ***************************File: mysql-bin.000018Position: 107Binlog_Do_DB:
Binlog_Ignore_DB:
创建快照
[root@master ~]# lvcreate -L 100M -s -p r -n mysqldata /dev/mydata/mydataLogical volume "mysqldata" created
mydata     mysqldata
[root@master ~]# mount /dev/mydata/mysqldata /mnt/
mount: block device /dev/mapper/mydata-mysqldata is write-protected, mounting read-only
[root@master ~]# cd /mnt/
[root@master mnt]# tar zcf /backup/mysql-lvm-`date +%F`-full.tar.gz data/
[root@master mnt]# ll /backup/
total 2708
-rw-r--r-- 1 root root     158 Sep 17 22:50 master.info
-rw-r--r-- 1 root root 2766498 Sep 17 22:55 mysql-lvm-2013-09-17-full.tar.gz
备份完成,释放锁
mysql> unlock tables;
Query OK, 0 rows affected (0.02 sec)
删除快照卷(可省)
备份binlog..由于恢复过程和前面相似,这里只演示还原
[root@master ~]# rm /mydata/data/ -rf
[root@master ~]# ll /mydata/
total 16
drwx------ 2 root root 16384 Sep 16 05:17 lost+found
[root@master ~]# tar xf /backup/mysql-lvm-2013-09-17-full.tar.gz -C /mydata/
[root@master ~]# service mysqld start
Starting MySQL..... SUCCESS!
[root@master ~]# mysql -p -e 'select user_id,user_name,last_time from shop.ecs_users;'
Enter password:
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
+---------+-----------+---------------------+
利用xtrabackup进行数据库备份及恢复
为了演示对innodb表的效果先将部分表的存储引擎改成innodb
[root@master ~]# for table in `mysql -predhat -s  -e  "use shop;show tables;"`;do mysql -predhat -e "alter table  shop.$table engine=innodb;";done
[root@master ~]# wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/RPM/rhel6/i686/percona-xtrabackup-2.1.4-656.rhel6.i686.rpm
[root@master ~]# yum localinstall percona-xtrabackup-2.1.4-656.rhel6.i686.rpm
添加一个具有备份权限的用户
mysql> create user bakuser@localhost identified by 'redhat';
mysql> revoke all privileges,grant option from bakuser@localhost;
mysql> grant reload,lock tables,replication client on *.* to bakuser@localhost;
mysql> flush privileges;
备份:
星期天做一次全备(0级增量,后面的增量备份都基于此):
[root@master ~]# date && date +%w
Sun Aug 18 00:01:29 CST 2013
0
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
+---------+-----------+---------------------+
[root@master ~]# ./backup.sh
星期一做一次2级增量备份
[root@master ~]# date -s 2013-08-19 && date +%w
Mon Aug 19 00:00:00 CST 2013
1
增加一条记录
[root@master ~]# mysql -predhat -e "insert into shop.ecs_users(user_name,last_time) values('week`date +%w`',now());"
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
+---------+-----------+---------------------+
[root@master ~]# ./backup.sh
星期二在星期一备份的基础上做增量备份(2级)
[root@master ~]# date -s 2013-08-20 && date +%w
Tue Aug 20 00:00:00 CST 2013
2
[root@master ~]# mysql -predhat -e "insert into shop.ecs_users(user_name,last_time) values('week`date +%w`',now());"
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
+---------+-----------+---------------------+
[root@master ~]# ./backup.sh
周三做基于周日的差异备份(1级增量)
[root@master ~]# date -s 2013-08-21 && date +%w
Wed Aug 21 00:00:00 CST 2013
3
[root@master ~]# mysql -predhat -e "insert into shop.ecs_users(user_name,last_time) values('week`date +%w`',now());"
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
+---------+-----------+---------------------+
[root@master ~]# ./backup.sh
周四在周三基础上做增量备份(2级)...
周五在周四基础上做增量备份(2级)...
周六在周五基础上做增量备份(2级)...
结果:

[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
+---------+-----------+---------------------+
[root@master backup]# for dir in `ls`;do ls $dir;done
2013-08-18
2013-08-19
2013-08-20
2013-08-21
2013-08-22
2013-08-23
2013-08-24
[root@master backup]# for dir in `ls`;do du -sh $dir;done
31M     day0
4.3M    day1
4.3M    day2
4.4M    day3
4.1M    day4
4.1M    day5
4.1M    day6
还原试验:
假设周六的时候数据库损坏,需要进行数据库还原(还原到周六备份那一时刻)
需要用到的备份集:
1、day0+day{1..6}
2、day0+day{3..6}
下面以2为例进行还原操作
模拟数据库损坏:
[root@master ~]# rm /mydata/data/* -rf
准备还原:
[root@master ~]# innobackupex --apply-log --redo-only /backup/day0/2013-08-18/
[root@master ~]# innobackupex --apply-log --redo-only /backup/day0/2013-08-18/ --incremental-dir=/backup/day3/2013-08-21/
[root@master ~]# innobackupex --apply-log --redo-only /backup/day0/2013-08-18/ --incremental-dir=/backup/day4/2013-08-22/
[root@master ~]# innobackupex --apply-log --redo-only /backup/day0/2013-08-18/ --incremental-dir=/backup/day6/2013-08-24/
[root@master backup]# for dir in `ls`;do du -sh $dir;done
33M day0
4.3M    day1
4.3M    day2
6.4M    day3
6.1M    day4
6.1M    day5
6.1M    day6
还原:
[root@master backup]# innobackupex --copy-back /backup/day0/2013-08-18/
...
innobackupex: Starting to copy InnoDB system tablespace
innobackupex: in '/backup/day0/2013-08-18'
innobackupex: back to original InnoDB data directory '/mydata/data'
innobackupex: Copying '/backup/day0/2013-08-18/ibdata1' to '/mydata/data/ibdata1'
innobackupex: Starting to copy InnoDB undo tablespaces
innobackupex: in '/backup/day0/2013-08-18'
innobackupex: back to '/mydata/data'
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/day0/2013-08-18'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.
130824 00:36:30  innobackupex: completed OK!
[root@master backup]# ll /mydata/data/
total 18456
-rw-r--r-- 1 root root 18874368 Aug 24 00:36 ibdata1
drwxr-xr-x 2 root root     4096 Aug 24 00:36 mysql
drwxr-xr-x 2 root root     4096 Aug 24 00:36 performance_schema
drwxr-xr-x 2 root root    12288 Aug 24 00:36 shop
drwxr-xr-x 2 root root     4096 Aug 24 00:36 test
[root@master backup]# chown -R  mysql:mysql  /mydata/data/
[root@master backup]# ll /mydata/data/
total 18456
-rw-r--r-- 1 mysql mysql 18874368 Aug 24 00:36 ibdata1
drwxr-xr-x 2 mysql mysql     4096 Aug 24 00:36 mysql
drwxr-xr-x 2 mysql mysql     4096 Aug 24 00:36 performance_schema
drwxr-xr-x 2 mysql mysql    12288 Aug 24 00:36 shop
drwxr-xr-x 2 mysql mysql     4096 Aug 24 00:36 test
[root@master ~]# service mysqld start
Starting MySQL.... SUCCESS!
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
+---------+-----------+---------------------+
还原结束,周六备份到数据库损坏期间的数据还得用二进制日志恢复,过程与其它方式备份的恢复一样
备份策略:
备份所有库
周日 0级全备
周一周二 2级增量
周三 1级增量
周四、五、六 2级增量
每天凌晨4点04分开始备份

写入计划任务自动执行备份
[root@master ~]# cp backup.sh /usr/bin/backup-mysql
[root@master ~]# chmod 500 /usr/bin/backup-mysql
[root@master ~]# cat /var/spool/cron/root
04  04  *   *   *   /bin/bash /usr/bin/backup-mysql
[root@master ~]# cat /usr/bin/backup-mysql
#!/bin/bash
BASEDIR=/backup
HOST=localhost
USER=bakuser
PASSWORD=redhat
DATE=`date +%F`
YESTERDAY=`date --date "1 days ago" +%F`
DAYSAGO3=`date --date "3 days ago" +%F`
WEEK=`date +%w`
WEEK1=`date --date "1 days ago" +%w`
WEEK3=`date --date "3 days ago" +%w`
mkdir $BASEDIR/day{0..6} 2>/dev/null
Back_L0 ()
{ innobackupex --host=$HOST --user=$USER --password=$PASSWORD $BASEDIR/day$WEEKmv $BASEDIR/day$WEEK/$DATE* $BASEDIR/day$WEEK/$DATE
}
Back_L1 ()
{innobackupex --host=$HOST --user=$USER --password=$PASSWORD --incremental --incremental-basedir=$BASEDIR/day$WEEK3/$DAYSAGO3 $BASEDIR/day$WEEKmv $BASEDIR/day$WEEK/$DATE* $BASEDIR/day$WEEK/$DATE
}
Back_L2 ()
{innobackupex --host=$HOST --user=$USER --password=$PASSWORD --incremental --incremental-basedir=$BASEDIR/day$WEEK1/$YESTERDAY $BASEDIR/day$WEEKmv $BASEDIR/day$WEEK/$DATE* $BASEDIR/day$WEEK/$DATE
}
case $WEEK in0)Back_L0;;1|2|4|5|6)Back_L2;;3)Back_L1;;
esac

转载于:https://blog.51cto.com/sanyu/1306243

MySQL的备份、还原及恢复相关推荐

  1. [ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 2:备份.sql文件方式)

    本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库(利用.sql文件的方式). 关于MySQL数据库备份,本博客 ...

  2. 十一、MYSQL数据库备份还原

    十一.MYSQL数据库备份还原 数据库冷备份 mysqldump备份和还原数据库 备份 主从数据库备份 备份指定数据库 备份多个数据库 备份所有数据库 备份数据表 方法1: `mysqldump`备份 ...

  3. [ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 1:备份.nb3文件方式)

    本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库. 本文主要大纲为:使用Navicat备份工具方式进行备份和还 ...

  4. MYSQL数据库备份还原,并还原到最新状态(mysqldump,xtrabackup)

    启用二进制日志文件 vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定 sql_log_bin=ON|OFF:是否记录二进制日志,默认为ON //在需要的时候设置为OFF log_b ...

  5. 备份校验两不误,MySQL自动备份还原校验设计详解

    作者介绍 庞阔,优朋普乐传媒运维基础部经理.负责数据库运营管理及平台设计开发,监控设计改进,问题跟踪处理,机房网络维护管理,目前四个专利已在专利局申请中.擅长数据库运维管理及Shell.Perl.PH ...

  6. MySQL增量备份还原

    增量备份还原 前提: 备份后插入数据 模拟用户破坏数据 增量备份,恢复过程 1.查看凌晨的完全备份 2.检查全备后所有binlog 3.立即刷新并备份出binlog mysqlbinlog增量恢复 恢 ...

  7. Linux九阴真经之九阴白骨爪残卷13(LVM的备份还原,恢复最新状态)

    一.备份策略 1.备份的类型 类型1: 热备份:读写不受影响(MyISAM不支持热备,InnoDB支持热备) 温备份:仅可以执行读操作 冷备份:离线备份,读写操作均中止 类型2: 物理备份:复制数据文 ...

  8. mysql数据库备份还原

    首先进入cmd.exe 然后进入进入mysql C:\Windows\SysWOW64>cd C:\mysql\binC:\mysql\bin>mysql -u root -p 创建数据库 ...

  9. linux怎么把mysql数据库备份还原,MySQL数据库备份和还原

    MySQL数据库备份和还原 打开cmd命令行,一定不是mysql的命令行,我第一次就错在这个地方,郁闷了很久 备份MySQL数据库的命令 mysqldump -hhostname -uusername ...

  10. 达梦数据库自动备份与手动备份, 还原与恢复具体操作步骤,带图(超详细,windows+linux)

    按照以下步骤直接操作即可,可选择自动备份或手动备份,亲测有效! 自动备份步骤 (1)开启归档模式 1.运行图形化"DM管理工具",右键数据库,选择"管理服务器" ...

最新文章

  1. 一图了解git常用开源许可证书
  2. 页面布局让footer居页面底部_网站各页面该如何布局关键词优化提升排名?
  3. 吴恩达家免费 NLP 课程重磅上线!110 个小视频教你做出聊天机器人,粉丝:我要让娃跟吴恩达姓!...
  4. 【C#日期系列(一)】--C#获取某月第一天0分0秒以及最后一天59分59秒
  5. 刚换工作,记录下心得
  6. 一次公司内部的Tech Talk中涉及到的关于语言的发展问题
  7. C++编程思想:指针,引用,拷贝构造函数,赋值运算符
  8. SAP Spartacus新建org unit之后,排序不正确的问题分析
  9. SAP 采购流程和销售流程
  10. 【oracle】changePerm.sh
  11. Jersey框架简单实践(一)
  12. 在直流电源(Vcc)和地之间并接电容的作用
  13. 多媒体课件是不是计算机软件,计算机应用基础与信息处理多媒体课件制作.doc...
  14. 数据可视化——坐标轴的定制
  15. socket编程之read()/write()
  16. FASTX-Toolkit
  17. 推荐系统视频行业揭秘,“抖音快手”现象级产品背后的推荐逻辑
  18. 【心田花开】三年级语文上册南宋古诗鉴赏
  19. C++创建类对象时(无参)后不加括号与加括号的区别
  20. Find命令搭配atime/ctime/mtime时的日期写法

热门文章

  1. 2005毕业生薪酬预测女超男
  2. Apache Cassandra 开源数据库软件修复高危RCE漏洞
  3. SolarWinds 事件新动态:研究员发现新的C2基础设施
  4. Google Update Service 被曝提权 0day,谷歌拒绝修复
  5. PHP多进程初探 --- 再次谈daemon进程
  6. DiskGenius无损调整C盘容量方法
  7. SQL Server打开数据表中的XML内容时报错的解决办法
  8. 网络流24题 最小路径覆盖问题
  9. java 异常处理 Throwable Error 和Exception
  10. MFC 对Button控件的重绘方法(多种)