设为首页 收藏本站
查看: 1686|回复: 1

[经验分享] 详解mysql备份恢复的三种实现方式

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-9-10 08:55:26 | 显示全部楼层 |阅读模式

一、Mysql备份策略:

完整备份:

完整备份就是指对某一个时间点上的所有数据或应用进行的一个完整拷贝,对数据量大的,备份时间较长,当然数据在恢复的时候快。

增量备份:

备份自上一次备份(包括完整备份,差异备份,增量备份)之后所有变化的数据进行备份。恢复的时候只需要一次完整的备份加上完整备份后的多个增量备份进行恢复即可。

差异备份:

备份自上一次完整备份之后所有变化的数据,恢复的时候仅需要最新一次完整备份加上差异备份即可。

详细如下图所示:

205534815.png


备份方式:

1、使用mysqldump进行逻辑备份

2、使用LVM快照备份:

快照备份就是把当时的场景保存为一个不变的状态,然后对这个不变的状态进行备份。但然,在规划mysql数据库时最好将数据和日志分开放到lvm分区中。使用LVM快照备份,需要将数据放在lvm分区。


205609730.png

3、Xtrabackup备份:


备份原理:

       XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb 的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。

当InnoDB启动的时候,它会先去检查datafile和transaction log,并且会做二步操作:

1.Itapplies committed transaction log entries to the data files

2.itperforms an undo operation on any transactions that modified data but did notcommit.


XtraBackup在备份的时候,一页一页地复制innodb的数据,而且不锁定表,

与此同时,XtraBackup还有另外一个线程监视着transactionslog,

一旦log发生变化,就把变化过的logpages复制走。


为什么要急着复制走呢?前几章的时候就提过这个问题,

因为transactions log文件大小有限,写满之后,就会从头再开始写,

所以新数据可能会覆盖到旧的数据。

在prepare过程中,XtraBackup使用复制到的transactionslog 对备份出来的innodb data file 进行crash recovery。


用mysqldump实现备份:

首先,mysqldump是mysql的一个客户端工具,可以实现备份整个服务器、单个或部分数据库、单个或部分表、表中的某些行,存储过程,存储函数,触发器等,能自动记录备份时的二进制日志文件及相应的position值


二、详解用mysqldump实现备份恢复操作:

首先,mysqldump是mysql的一个客户端工具,可以实现备份整个服务器、单个或部分数据库、单个或部分表、表中的某些行,存储过程,存储函数,触发器等,能自动记录备份时的二进制日志文件及相应的position值

对mysqldump参数说明:

--all-databases  , -A      //导出全部数据库。

--all-tablespaces  , -Y     //导出全部表空间。

--no-tablespaces  , -y     //不导出任何表空间信息。

--add-drop-database     //每个数据库创建之前添加drop数据库语句。

--add-drop-table                 //每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

--add-locks                    //在每个表导出之前增加LOCK TABLES并且之后UNLOCK  TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

--allow-keywords          //允许创建是关键词的列名字。这由表名前缀于每个列名做到。

--apply-slave-statements //在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

--character-sets-dir        //字符集文件的目录

--comments                   //附加注释信息。默认为打开,可以用--skip-comments取消

--compatible                  //导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,

要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。

--compact                      //导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table  --skip-add-locks --skip-comments --skip-disable-keys

--complete-insert,  -c     //使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

--compress, -C      //在客户端和服务器之间启用压缩传递所有信息

--create-options,  -a      //在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)

--databases,  -B      //导出几个数据库。参数后面所有名字参量都被看作数据库名。

--debug          //输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace

--debug-check    //检查内存和打开文件使用说明并退出。

--debug-info       //输出调试信息并退出

--delete-master-logs           //master备份后删除日志. 这个参数将自动激活--master-data。

--disable-keys           //对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。

--dump-slave //该选项将导致主的binlog位置和文件名追加到导出数据的文件中。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,在命令前增加说明信息。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。

--events, -E      //导出事件。

--flush-logs   //开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。

--flush-privileges//在导出mysql数据库之后,发出一条FLUSH  PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。

--ignore-table     //不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。

--lock-all-tables,  -x//提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。

mysqldump  -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables,  -l      //开始导出前,锁定所有表。用READ  LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。

请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。

--log-error     //附加警告和错误信息到给定文件

--master-data//该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE  MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

--no-create-db,  -n   //只导出数据,而不添加CREATE DATABASE 语句。

--no-create-info,  -t

只导出数据,而不添加CREATE TABLE 语句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d       //不导出任何数据,只导出数据库表结构。

--order-by-primary  //如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。

--quick, -q     //不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。

--opt        //同时启用各种高级选项

--routines, -R      //导出存储过程以及自定义函数。

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

--dump-date       //将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。

--skip-opt           //禁用–opt选项.

--socket,-S     //指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock

--triggers       //导出触发器。该选项默认启用,用--skip-triggers禁用它。

--user, -u        //指定连接的用户名。

--verbose, --v           //输出多种平台信息。

--version, -V        //输出mysqldump版本信息并退出

实例详解:操作时数据库以及库中的表可以自己创建,主要讲解备份的过程及其中的要点详解一:对catidb数据库进行完全备份:
mysql>use catidb;Databasechangedmysql>show tables;  //使用catidb数据库查看其中的表+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              |+------------------+2rows in set (0.00 sec)对catidb数据库进行备份,恢复
[iyunv@localhost~]# mysqldump -uroot -pmypass catidb > /tmp/catidb.sql  //用这种方法对catidb数据库进行备份,在数据库恢复时有一个问题,即该catidb.sql文件中没用创建catidb数据库的语句,在恢复时所含所有表会恢复到当前默认的数据库中,相当的危险,因此需要谨慎,在恢复之前一定要先创建数据库mysql>drop database catidb;     //备份之后将catidb数据库删除QueryOK, 2 rows affected (0.07 sec)mysql>create database catidb;   //在恢复之前一定要先创建数据库,数据库名字可以自己定义QueryOK, 1 row affected (0.04 sec)mysql>use catidb;Databasechangedmysql>source /tmp/catidb.sql    //进行数据恢复mysql>show tables;        //恢复成功+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              |+------------------+2rows in set (0.01 sec)详解二:利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份仍以上面的catidb数据库为例先对catidb 数据库进行完全备份
mysql>use catidb;Databasechangedmysql>show tables;+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              |+------------------+2rows in set (0.00 sec)对catidb数据库进行完全备份[iyunv@localhost~]# mysqldump -uroot -pmypass --single-transaction --master-data=2 --databasescatidb > /backup/catidb_`date +%F`.sql备份完成之后又对catidb数据库进行了新的操作
mysql>show tables;+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              |+------------------+2rows in set (0.00 sec)mysql>use catidbDatabasechangedmysql>create table tb3 (id int);QueryOK, 0 rows affected (0.11 sec)mysql>insert into tb3 values (1),(6),(9);QueryOK, 3 rows affected (0.09 sec)Records:3  Duplicates: 0  Warnings: 0进行增量备份:从上一次完全备份完成后,到所有新的操作之前,那么如何查看记录的位置开始位置:
[iyunv@localhost~]# less /backup/catidb_2013-09-07.sql--MySQL dump 10.13  Distrib 5.5.33, forLinux (x86_64)----Host: localhost    Database: catidb----------------------------------------------------------Server version       5.5.33-log/*!40101SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101SET NAMES utf8 */;/*!40103SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103SET TIME_ZONE='+00:00' */;/*!40014SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;----Position to start replication or point-in-time recovery from---- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=1673;结束位置:mysql>show master status;+------------------+----------+--------------+------------------+|File             | Position |Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000004 |     1959 |              |                  |+------------------+----------+--------------+------------------+1row in set (0.00 sec)二进制增量备份[iyunv@localhost~]# mysqlbinlog --start-position=1673 --stop-position=1959/mydata/data/mysql-bin.000004 > /backup/catidb_`date +%F_%H`.sql之后又进行了一些操作记录一次此刻二进制日志的位置
mysql>show master status;+------------------+----------+--------------+------------------+|File             | Position |Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+|mysql-bin.000004 |     1959 |              |                  |+------------------+----------+--------------+------------------+1row in set (0.00 sec)mysql>use catidb;Databasechangedmysql>insert into tb3 values (2),(5);QueryOK, 2 rows affected (0.11 sec)Records:2  Duplicates: 0  Warnings: 0之后不小心删除了catidb数据库mysql>drop database catidb;QueryOK, 3 rows affected (0.13 sec)开始进行恢复操作,首先把所需二进制日志导出来[iyunv@localhost~]# mysqlbinlog --start-position=1959 /mydata/data/mysql-bin.000004/*!50530SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019SET @@session.max_insert_delayed_threads=0*/;/*!50003SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER/*!*/;#at 4#130907  5:41:54 server id 1  end_log_pos 107      Start: binlog v 4, server v 5.5.33-log created 130907  5:41:54 at startup#Warning: this binlog is either in use or was not closed properly.ROLLBACK/*!*/;BINLOG'IkwqUg8BAAAAZwAAAGsAAAABAAQANS41LjMzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiTCpSEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA=='/*!*/;#at 1959#130907  9:53:14 server id 1  end_log_pos 2029    Query  thread_id=6    exec_time=0 error_code=0SETTIMESTAMP=1378518794/*!*/;SET@@session.pseudo_thread_id=6/*!*/;SET@@session.foreign_key_checks=1, @@session.sql_auto_is_null=0,@@session.unique_checks=1, @@session.autocommit=1/*!*/;SET@@session.sql_mode=0/*!*/;SET@@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!Cutf8 *//*!*/;SET@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;SET@@session.lc_time_names=0/*!*/;SET@@session.collation_database=DEFAULT/*!*/;BEGIN/*!*/;#at 2029#130907  9:53:14 server id 1  end_log_pos 2124    Query  thread_id=6    exec_time=0 error_code=0use`catidb`/*!*/;SETTIMESTAMP=1378518794/*!*/;insertinto tb3 values (2),(5)/*!*/;#at 2124#130907  9:53:14 server id 1  end_log_pos 2151    Xid = 175COMMIT/*!*/;# at 2151#130907  9:54:04 server id 1  end_log_pos 2236    Query  thread_id=6    exec_time=1 error_code=0SETTIMESTAMP=1378518844/*!*/;drop database catidb/*!*/;DELIMITER;#End of log fileROLLBACK/* added by mysqlbinlog */;/*!50003SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;注意我们保存的是drop catidb数据库之前的内容,因此需要查看其中的位置,此时为2151开始导出二进制日志[iyunv@localhost~]# mysqlbinlog --start-position=1959 --stop-position=2151/mydata/data/mysql-bin.000004 > /tmp/catidb_binlog.sql开始恢复,此时不需要启动二进制日志mysql>set sql_log_bin=0;QueryOK, 0 rows affected (0.00 sec)mysql>flush logs; //滚动二进制日志QueryOK, 0 rows affected (0.17 sec)可以在命令行中进行导入,进行恢复操作,完全备份+增量备份+二进制日志[iyunv@localhost~]# mysql -uroot -pmypass < /backup/catidb_2013-09-07.sql //恢复完全备份[iyunv@localhost~]# mysql -uroot -pmypass < /backup/catidb_2013-09-07_09.sql     //恢复增量备份[iyunv@localhost~]# mysql -uroot -pmypass < /tmp/catidb_binlog.sql      //恢复二进制日志之后连到Mysql,进行查看
mysql>use catidb;Databasechangedmysql>show tables;+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              ||tb3              |+------------------+3rows in set (0.00 sec)mysql>select * from tb3;+------+|id   |+------+|    1 ||    6 ||    9 ||    2 ||    5 |+------+5rows in set (0.00 sec)备份恢复完成!注意:对于一般的备份,是针对整个服务器进行备份的因此所用的选项应该是—all-databases;
三、详解利用lvm的快照来备份Mysql及其恢复首先进行一次完全备份[iyunv@localhost~]# mysqldump -uroot -pmypass --lock-all-tables --all-databases --events >/backup/all_db_`date +%F`.sql[iyunv@localhost~]# service mysqld stop 停止Mysql服务Shuttingdown MySQL....                                    [  OK  ][iyunv@localhost~]# rm -rf /mydata/*要求创建逻辑卷并将其挂载至/mydata下,过程不在演示[iyunv@localhost~]# mount/dev/mapper/vg0-rooton / type ext4 (rw)procon /proc type proc (rw)sysfson /sys type sysfs (rw)devptson /dev/pts type devpts (rw,gid=5,mode=620)tmpfson /dev/shm type tmpfs (rw)/dev/sda1on /boot type ext4 (rw)/dev/mapper/vg0-usron /usr type ext4 (rw)/dev/mapper/vg0-varon /var type ext4 (rw)noneon /proc/sys/fs/binfmt_misc type binfmt_misc (rw)sunrpcon /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)/dev/mapper/myvg-mydata on /mydata type ext4 (rw)[iyunv@localhost~]# mkdir /mydata/data/ 在逻辑卷上创建数据目录[iyunv@localhost~]# chown -R mysql.mysql /mydata/data修改数据目录的权限[iyunv@localhost~]# cd /usr/local/mysql[iyunv@localhostmysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data  //初始化脚本在配置文件中添加/etc/my.cnf[mysqld]port            = 3306socket          = /tmp/mysql.sockskip-external-lockingkey_buffer_size= 256Mmax_allowed_packet= 1Mtable_open_cache= 256sort_buffer_size= 1Mread_buffer_size= 1Mread_rnd_buffer_size= 4Mmyisam_sort_buffer_size= 64Mthread_cache_size= 8query_cache_size=16M#Try number of CPU's*2 for thread_concurrencythread_concurrency= 8datadir=/mydata/datasync_binlog= 1启动mysqld服务[iyunv@localhost~]# service mysqld start连到Mysql上mysql>set session sql_log_bin=0; 关闭二进制日志QueryOK, 0 rows affected (0.00 sec)mysql>source /backup/all_db_2013-09-07.sql 恢复所有数据库mysql>show databases;+--------------------+|Database           |+--------------------+|information_schema ||catidb             ||hailian            ||hellodb            ||mysql              ||performance_schema ||test               |+--------------------+7rows in set (0.00 sec)mysql>qBye从新连到Mysql是为了开启二进制日志功能mysql>show binary logs;+------------------+-----------+|Log_name         | File_size |+------------------+-----------+|mysql-bin.000001 |     27719 ||mysql-bin.000002 |   1061358 ||mysql-bin.000003 |       182 |+------------------+-----------+3rows in set (0.00 sec)mysql>flush tables with read lock;QueryOK, 0 rows affected (0.09 sec)mysql>show master status;+------------------+----------+--------------+------------------+|File             | Position |Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+|mysql-bin.000003 |      182 |              |                  |+------------------+----------+--------------+------------------+1row in set (0.00 sec)也可以通过[iyunv@localhost ~]# mysql -uroot -pmypass -e 'show master status'> /backup/snapback-2013-09-07/binlog.txt保存到binlog.txt文档中[iyunv@localhost~]# lvcreate -L 100M -n mydata-snap -p r -s /dev/myvg/mydatamysql>unlock tables;QueryOK, 0 rows affected (0.00 sec)[iyunv@localhost~]# cp -a /mydata/data/* /backup/snapback-2013-09-07/之后连到mysql上有进行了一下操作mysql>use hellodb;Databasechangedmysql>show tables;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||toc               |+-------------------+7rows in set (0.00 sec)mysql>create table testtb (id int, name char(10));QueryOK, 0 rows affected (0.12 sec)mysql>insert into testtb values (1,'tom');QueryOK, 1 row affected (0.10 sec)[iyunv@localhost~]# mysqlbinlog --start-position=187 /mydata/data/mysql-bin.000003 >/backup/snapback-2013-09-07_incremental/incremental.sql[iyunv@localhost~]# service mysqld stop[iyunv@localhost~]# rm -rf /mydata/data/*[iyunv@localhost~]# cp /backup/snapback-2013-09-07/* /mydata/data/ -a[iyunv@localhost~]# chown -R mysql.mysql /mydata/data/*[iyunv@localhost~]# service mysqld start恢复二进制日志:mysql>set sql_log_bin=0;mysql>source /backup/snapback-2013-09-07_incremental/incremental.sqlmysql>use hellodb;Databasechangedmysql>show tables;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||testtb            ||toc               |+-------------------+8rows in set (0.00 sec)mysql>select * from testtb;+------+------+|id   | name |+------+------+|    1 | tom |+------+------+1row in set (0.00 sec)备份恢复完成
四、详解使用Xtrabackup进行MySQL备份为使每表单个表空间,先把所有数据备份出来,设置从新进行初始化:[iyunv@localhost~]# mysqldump -uroot -pmypass --lock-all-tables --all-databases --master-data=2--events > /root/alldb.sql[iyunv@localhost~]# cd /mydata/data/[iyunv@localhostdata]# rm -rf *[iyunv@localhostdata]# cd[iyunv@localhost~]# cd /usr/local/mysql/[iyunv@localhostmysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/修改配置文件/etc/my.cnf[mysqld]port            = 3306socket          = /tmp/mysql.sockskip-external-lockingkey_buffer_size= 256Mmax_allowed_packet= 1Mtable_open_cache= 256sort_buffer_size= 1Mread_buffer_size= 1Mread_rnd_buffer_size= 4Mmyisam_sort_buffer_size= 64Mthread_cache_size= 8query_cache_size=16M#Try number of CPU's*2 for thread_concurrencythread_concurrency= 8datadir=/mydata/data    //数据目录sync_binlog= 1                //立刻进行二进制日志同步innodb_file_per_table = 1    //实现每表单个表空间连到mysql上mysql>show global variables like 'innodb_file%';+--------------------------+----------+|Variable_name            | Value    |+--------------------------+----------+|innodb_file_format       | Antelope ||innodb_file_format_check | ON       ||innodb_file_format_max   | Antelope || innodb_file_per_table   | ON       |+--------------------------+----------+4rows in set (0.00 sec)mysql> source /root/alldb.sqlmysql>show databases;+--------------------+|Database           |+--------------------+|information_schema ||catidb             ||hailian            ||hellodb            ||mysql              ||performance_schema ||test               |+--------------------+7rows in set (0.00 sec)mysql>use hellodb;Databasechangedmysql>show tables;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||testtb            ||toc               |+-------------------+8rows in set (0.00 sec)mysql>use catidb;Databasechangedmysql>show tables;+------------------+|Tables_in_catidb |+------------------+|tb1              ||tb2              ||tb3              |+------------------+3rows in set (0.00 sec)mysql>select * from hellodb.testtb;+------+------+|id   | name |+------+------+|    1 | tom |+------+------+1row in set (0.00 sec)可以看到所有数据库都是每表单个表空间[iyunv@localhosthellodb]# lsclasses.frm  coc.ibd     db.opt      students.frm  teachers.ibd toc.frmclasses.ibd  courses.frm scores.frm  students.ibd  testtb.frm   toc.ibdcoc.frm      courses.ibd  scores.ibd teachers.frm  testtb.ibd
下载两个rpm包percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpmpercona-toolkit-2.2.4-1.noarch.rpm进行安装为解决依赖关系用yum命令:[iyunv@localhost~]# yum localinstall percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm[iyunv@localhost~]# yum localinstall percona-toolkit-2.2.4-1.noarch.rpm –y首先进行一次完全备份[iyunv@localhost~]# mkdir /innobackup  //作为备份使用目录[iyunv@localhost~]# innobackupex --user=root --password=mypass /innobackup/下面是最后显示的一部分结果,需要关注的部分用红色显示xtrabackup:Transaction log of lsn (1665573) to (1665573) wascopied.13090821:47:22  innobackupex: All tablesunlockedinnobackupex:Backup created in directory '/innobackup/2013-09-08_21-47-18'innobackupex:MySQL binlog position: filename 'mysql-bin.000005', position 54256513090821:47:22  innobackupex: Connection todatabase server closed13090821:47:22  innobackupex: completed OK![iyunv@localhost~]# cd /innobackup/[iyunv@localhostinnobackup]# ls2013-09-08_21-47-18[iyunv@localhostinnobackup]# cd 2013-09-08_21-47-18/[iyunv@localhost2013-09-08_21-47-18]# lsbackup-my.cnf  hailian ibdata1  performance_schema  xtrabackup_binary       xtrabackup_checkpointscatidb         hellodb  mysql   test               xtrabackup_binlog_info xtrabackup_logfile[iyunv@localhost2013-09-08_21-47-18]# cat xtrabackup_checkpointsbackup_type= full-backupedfrom_lsn= 0to_lsn= 1665573last_lsn= 1665573compact= 0[iyunv@localhost2013-09-08_21-47-18]# cat xtrabackup_binlog_info //显示使用的哪个二进制日志以及位置mysql-bin.000005 542565

进行一次完全备份后连到Mysql上,做了一些修改
mysql>show tables;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||testtb            ||toc               |+-------------------+8rows in set (0.00 sec)mysql>select * from students;+-------+---------------+-----+--------+---------+-----------+|StuID | Name          | Age | Gender |ClassID | TeacherID |+-------+---------------+-----+--------+---------+-----------+|     1 | Shi Zhongyu   |  22| M      |       2 |         3 ||     2 | Shi Potian    |  22| M      |       1 |         7 ||     3 | Xie Yanke     | 53 | M      |       2 |        16 ||     4 | Ding Dian     | 32 | M      |       4 |         4 ||     5 | Yu Yutong     | 26 | M      |       3 |         1 ||     6 | Shi Qing      | 46 | M      |       5 |     NULL ||     7 | Xi Ren        | 19 | F      |       3 |     NULL ||     8 | Lin Daiyu     | 17 | F      |       7 |     NULL ||     9 | Ren Yingying  |  20 |F      |       6 |     NULL ||    10 | Yue Lingshan  |  19 |F      |       3 |     NULL ||    11 | Yuan Chengzhi |  23 | M     |       6 |      NULL ||    12 | Wen Qingqing  |  19 |F      |       1 |     NULL ||    13 | Tian Boguang  |  33 |M      |       2 |     NULL ||    14 | Lu Wushuang   |  17| F      |       3 |     NULL ||    15 | Duan Yu       | 19 | M      |       4 |     NULL ||    16 | Xu Zhu        | 21 | M      |       1 |     NULL ||    17 | Lin Chong     | 25 | M      |       4 |     NULL ||    18 | Hua Rong      | 23 | M      |       7 |     NULL ||    19 | Xue Baochai   |  18| F      |       6 |     NULL ||    20 | Diao Chan     | 19 | F      |       7 |     NULL ||    21 |Huang Yueying |  22 | F      |      6 |      NULL ||    22 | Xiao Qiao     | 20 | F      |       1 |     NULL ||    23 | Ma Chao       | 23 | M      |       4 |     NULL ||    24 | Xu Xian       | 27 | M      |    NULL |     NULL ||    25 | Sun Dasheng   | 100 | M      |   NULL |      NULL |+-------+---------------+-----+--------+---------+-----------+25rows in set (0.00 sec)mysql>delete from students where stuid >= 24;QueryOK, 2 rows affected (0.01 sec)mysql>q注意:如果有增量时只能提交事务,不能回滚事务使用innobackupex进行增量备份进行第一次增量备份--incremental明确说明进行增量备份的存放位置,--incremental-basedir表示增量相对的文件[iyunv@localhost~]# innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2013-09-08_21-47-18/[iyunv@localhost~]# cd /innobackup/[iyunv@localhostinnobackup]# ls2013-09-08_21-47-18  2013-09-09_00-30-21[iyunv@localhostinnobackup]# cd 2013-09-09_00-30-21/[iyunv@localhost2013-09-09_00-30-21]# lsbackup-my.cnf  ibdata1.meta        xtrabackup_binlog_infocatidb         mysql               xtrabackup_checkpointshailian        performance_schema  xtrabackup_logfilehellodb        testibdata1.delta  xtrabackup_binary[iyunv@localhost2013-09-09_00-30-21]# cat xtrabackup_checkpointsbackup_type= incrementalfrom_lsn= 1665573to_lsn= 1666830last_lsn= 1666830compact= 0连到Mysql上进行第二次修改操作mysql>use hellodb;Databasechangedmysql>show tables    -> ;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||testtb            ||toc               |+-------------------+8rows in set (0.00 sec)mysql>desc students;+-----------+---------------------+------+-----+---------+----------------+|Field     | Type                | Null | Key | Default |Extra          |+-----------+---------------------+------+-----+---------+----------------+|StuID     | int(10) unsigned    | NO  | PRI | NULL    | auto_increment ||Name      | varchar(50)         | NO  |     | NULL    |                ||Age       | tinyint(3) unsigned | NO   |    | NULL    |                ||Gender    | enum('F','M')       | NO  |     | NULL    |                ||ClassID   | tinyint(3) unsigned |YES  |    | NULL    |                ||TeacherID | int(10) unsigned    |YES  |    | NULL    |                |+-----------+---------------------+------+-----+---------+----------------+6rows in set (0.00 sec)mysql>insert into students (Name,Age,Gender,ClassID,TeacherID) values('tom',33,'M',2,4);QueryOK, 1 row affected (0.01 sec)进行第二次增量备份[iyunv@localhost~]# innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2013-09-09_00-30-21/注意:第二次增量备份是相对于第一次增量备份而言的,主要是—incremental-basedir的路径
第二次增量备份之后连到Mysql上又进行了一些修改mysql>use hellodb;Databasechangedmysql>show tables;+-------------------+|Tables_in_hellodb |+-------------------+|classes           ||coc               ||courses           ||scores            ||students          ||teachers          ||testtb            ||toc               |+-------------------+8rows in set (0.00 sec)mysql>select * from coc;+----+---------+----------+|ID | ClassID | CourseID |+----+---------+----------+|  1 |      1 |        2 ||  2 |      1 |        5 ||  3 |      2 |        2 ||  4 |      2 |        6 ||  5 |      3 |        1 ||  6 |      3 |        7 ||  7 |      4 |        5 ||  8 |      4 |        2 ||  9 |      5 |        1 ||10 |       5 |        9 ||11 |       6 |        3 ||12 |       6 |        4 ||13 |       7 |        4 ||14 |       7 |        3 |+----+---------+----------+14rows in set (0.00 sec)mysql>delete from coc where id=14;QueryOK, 1 row affected (0.01 sec)mysql>q把二进制日志复制出来,模拟mysql服务崩溃[iyunv@localhost~]# cd /mydata/data/[iyunv@localhostdata]# lscatidb       localhost.localdomain.err  mysql-bin.000004hailian      localhost.localdomain.pid  mysql-bin.000005hellodb      mysql                      mysql-bin.indexibdata1      mysql-bin.000001           performance_schemaib_logfile0  mysql-bin.000002           testib_logfile1  mysql-bin.000003[iyunv@localhostdata]# cp mysql-bin.00000[1-5] /tmp/[iyunv@localhostdata]# service mysqld stopShuttingdown MySQL.                                       [  OK  ][iyunv@localhostdata]# rm -rf *对二进制日志进行备份:[iyunv@localhostdata]# cd /innobackup/[iyunv@localhostinnobackup]# ls2013-09-08_21-47-18  2013-09-09_00-30-21  2013-09-09_00-40-47[iyunv@localhostinnobackup]# cd 2013-09-09_00-40-47/[iyunv@localhost2013-09-09_00-40-47]# lsbackup-my.cnf  ibdata1.meta        xtrabackup_binlog_infocatidb         mysql               xtrabackup_checkpointshailian        performance_schema  xtrabackup_logfilehellodb        testibdata1.delta  xtrabackup_binary[iyunv@localhost2013-09-09_00-40-47]# cat xtrabackup_binlog_infomysql-bin.000005 543041[iyunv@localhost~]# cd /tmp/[iyunv@localhosttmp]# mysqlbinlog --start-position=543041 mysql-bin.000005 > ./all.sql恢复前的准备工作:
[iyunv@localhost~]# innobackupex --apply-log --redo-only /innobackup/2013-09-08_21-47-18/ [iyunv@localhost ~]# innobackupex --apply-log--redo-only /innobackup/2013-09-08_21-47-18/ --incremental-dir=/innobackup/2013-09-09_00-30-21/ [iyunv@localhost ~]# innobackupex --apply-log--redo-only /innobackup/2013-09-08_21-47-18/--incremental-dir=/innobackup/2013-09-09_00-40-47/
进行恢复操作
[iyunv@localhost~]# innobackupex --copy-back /innobackup/2013-09-08_21-47-18/[iyunv@localhost~]# cd /mydata/data/[iyunv@localhostdata]# chown -R mysql.mysql *[iyunv@localhostdata]# lltotal18456drwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 catidbdrwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 hailiandrwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 hellodb-rw-r--r--1 mysql mysql 18874368 Sep  9 01:22ibdata1drwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 mysqldrwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 performance_schemadrwxr-xr-x2 mysql mysql     4096 Sep  9 01:22 test[iyunv@localhostdata]# service mysqld startmysql>use hellodb;Databasechangedmysql>select * from students;+-------+---------------+-----+--------+---------+-----------+|StuID | Name          | Age | Gender |ClassID | TeacherID |+-------+---------------+-----+--------+---------+-----------+|     1 | Shi Zhongyu   |  22| M      |       2 |         3 ||     2 | Shi Potian    |  22| M      |       1 |         7 ||     3 | Xie Yanke     | 53 | M      |       2 |        16 ||     4 | Ding Dian     | 32 | M      |       4 |        4 ||     5 | Yu Yutong     | 26 | M      |       3 |         1 ||     6 | Shi Qing      | 46 | M      |       5 |     NULL ||     7 | Xi Ren        | 19 | F      |       3 |     NULL ||     8 | Lin Daiyu     | 17 | F      |       7 |     NULL ||     9 | Ren Yingying  |  20 |F      |       6 |     NULL ||    10 | Yue Lingshan  |  19 |F      |       3 |     NULL ||    11 | Yuan Chengzhi |  23 | M     |       6 |      NULL ||    12 | Wen Qingqing  |  19 |F      |       1 |     NULL ||    13 | Tian Boguang  |  33 |M      |       2 |     NULL ||    14 | Lu Wushuang   |  17| F      |       3 |     NULL ||    15 | Duan Yu       | 19 | M      |       4 |     NULL ||    16 |Xu Zhu        |  21 | M     |       1 |      NULL ||    17 | Lin Chong     | 25 | M      |       4 |     NULL ||    18 | Hua Rong      | 23 | M      |       7 |     NULL ||    19 | Xue Baochai   |  18| F      |       6 |     NULL ||    20 | Diao Chan     | 19 | F      |       7 |     NULL ||    21 | Huang Yueying |  22 | F     |       6 |      NULL ||    22 | Xiao Qiao     | 20 | F      |       1 |     NULL ||    23 | Ma Chao       | 23 | M      |       4 |     NULL ||    26 | tom           | 33 | M      |       2 |         4 |+-------+---------------+-----+--------+---------+-----------+24rows in set (0.00 sec)mysql>select * from coc;+----+---------+----------+|ID | ClassID | CourseID |+----+---------+----------+|  1 |      1 |        2 ||  2 |      1 |        5 ||  3 |      2 |        2 ||  4 |      2 |        6 ||  5 |      3 |        1 ||  6 |      3 |        7 ||  7 |      4 |        5 ||  8 |      4 |        2 ||  9 |      5 |        1 ||10 |       5 |        9 ||11 |       6 |        3 ||12 |       6 |        4 ||13 |       7 |        4 ||14 |       7 |        3 |+----+---------+----------+14rows in set (0.00 sec)mysql>set sql_log_bin=0;QueryOK, 0 rows affected (0.00 sec)mysql>source /tmp/all.sql;QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)CharsetchangedQueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)DatabasechangedQueryOK, 0 rows affected (0.00 sec)QueryOK, 1 row affected (0.00 sec)QueryOK, 0 rows affected (0.01 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)QueryOK, 0 rows affected (0.00 sec)mysql>select * from coc;+----+---------+----------+|ID | ClassID | CourseID |+----+---------+----------+|  1 |      1 |        2 ||  2 |      1 |        5 ||  3 |      2 |        2 ||  4 |      2 |        6 ||  5 |      3 |        1 ||  6 |      3 |        7 ||  7 |      4 |        5 ||  8 |      4 |        2 ||  9 |      5 |        1 ||10 |       5 |        9 ||11 |       6 |        3 ||12 |       6 |        4 ||13 |       7 |        4 |+----+---------+----------+13rows in set (0.00 sec)恢复操作完成总结:深刻理解mysql的三种备份工作原理,多操作归纳总结是非常必要的,不足之处多多指点!





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-9114-1-1.html 上篇帖子: mysql更改表结构:添加、删除、修改字段、调整字段顺序 下篇帖子: mysql插入大量数据时避免重复记录出现 mysql

尚未签到

发表于 2014-1-1 02:50:43 | 显示全部楼层
-"〖八月】你说的承诺都成泡影,可我还在期待什么

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表