testing and verifying your mysql backup strategy

16
Testing and Verifying your MySQL Backup Strategy EffectiveMySQL.com - Performance, Scalability, Site Reliability Ronald Bradford http://ronaldbradford.com @RonaldBradford 2015.08 EffectiveMySQL.com - Performance, Scalability, Site Reliability About the Author 16 years with MySQL / 26 years with RDBMS Senior Consultant at MySQL Inc (06-08) Consultant for Oracle Corporation (96-99) Published author of 4 MySQL books Ronald BRADFORD http://ronaldbradford.com/presentations/ EffectiveMySQL.com - Performance, Scalability, Site Reliability OTN TOUR 2015 Uruguay www.uyoug.org.uy Argentina www.aroug.org Chile www.cloug.cl Peru www.peoug.org Latin America Oracle User Groups Community www.laouc.net EffectiveMySQL.com - Performance, Scalability, Site Reliability "No one cares if you can backup, only that you can restore." Adapted from W. Curtis Preston - Backup & Recovery (O'Reilly 2009)

Upload: ngotruc

Post on 21-Dec-2016

231 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Testing and Verifying your MySQL Backup Strategy

Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Ronald Bradfordhttp://ronaldbradford.com

@RonaldBradford

2015.08

EffectiveMySQL.com - Performance, Scalability, Site Reliability

About the Author

16 years with MySQL / 26 years with RDBMS

Senior Consultant at MySQL Inc (06-08)

Consultant for Oracle Corporation (96-99)

Published author of 4 MySQL books

Ronald BRADFORD

http://ronaldbradford.com/presentations/

EffectiveMySQL.com - Performance, Scalability, Site Reliability

OTN TOUR 2015

Uruguay www.uyoug.org.uy

Argentina www.aroug.org

Chile www.cloug.cl

Peru www.peoug.org

Latin America Oracle User Groups Community www.laouc.net

EffectiveMySQL.com - Performance, Scalability, Site Reliability

"No one cares if you can backup, only that you can restore."

Adapted from W. Curtis Preston - Backup & Recovery (O'Reilly 2009)

Page 2: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Problem

To verify your backup is to restore

Test frequently

Test for exceptions

Restoring is a two part process

Restore static backup

Restore to point in time

EffectiveMySQL.com - Performance, Scalability, Site Reliability

"Testing is about breaking your software. Testing is not about

checking if it works."

Ronald Bradford, 2006

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Requirements?

What is most important?

Your restore completes successfully?

Your restore matches your backup files?

Your restored system has all the data it should have?

Your system is back online ASAP?

All of these requirements are necessary for success

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Constraints?

What part takes the most time to restore?

Copying your backup files across network?

Uncompressing your backup?

Restore the backup?

Point in time recovery?

Page 3: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Product Options

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

mysqldump

mydumper

XtraBackup

MySQL Enterprise Backup

LVM/SAN Snapshot

Filesystem copy

New options

review

EffectiveMySQL.com - Performance, Scalability, Site Reliability

mysqldump

Included with binary distribution

Open source

Maintained by Oracle

Only tool for schema information

Poor defaults

EffectiveMySQL.com - Performance, Scalability, Site Reliability

mysqldump

Locks schemas (by default)

Inconsistent for multi schema applications

Does not obtain position needed for point in time recovery

Does not backup all objects by default

Single threaded

Reads all data (into database buffers)

Defaults

Page 4: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

mysqldump

ASCII copy of data

editable

Cross platform/version compatible

Can perform partial backups

EffectiveMySQL.com - Performance, Scalability, Site Reliability

mydumper

Parallel implementation based on mysqldump

Open source

Community developed and maintained

Max Bubenick - Percona

https://launchpad.net/mydumper

EffectiveMySQL.com - Performance, Scalability, Site Reliability

xtrabackup

Open source

Maintained by 3rd party company

Widely used for large InnoDB installations

https://www.percona.com/doc/percona-xtrabackup/

EffectiveMySQL.com - Performance, Scalability, Site Reliability

xtrabackup

Non-blocking backup (of transactional data)

Consistent file copy

Page 5: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

MEB

Commercial license

bundled with subscription support

Oracle provided enterprise version

Features similar to Xtrabackup

MySQL enterprise backup

EffectiveMySQL.com - Performance, Scalability, Site Reliability

snapshot

LVM/SAN Snapshot

DB agnostic

MyLVMBackup

Open source

Community Maintained

http://www.lenzg.net/mylvmbackup/

EffectiveMySQL.com - Performance, Scalability, Site Reliability

snapshot

Read Consistent view

FLUSH TABLES WITH READ LOCK

Can take a long time on highly concurrent systems

EffectiveMySQL.com - Performance, Scalability, Site Reliability

upcoming

mysqlpump (5.7.8)

Open source

Developed by Oracle

rewrite of mysqldump

parallel implementation of mysqldump

https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html

Page 6: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

What is missing?

EffectiveMySQL.com - Performance, Scalability, Site Reliability

point in time

MySQL Binary Logs

Are they enabled?

Binary log position

Obtained consistently

SaaS (per schema issues)

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

cp

rsync

Use a slave --log-slave-updates

DRBD - Disk Replicated Block Device

mysqlbinlog --read-from-remote-server (New in 5.6)

EffectiveMySQL.com - Performance, Scalability, Site Reliability

binary log file copy

Binary logs are sequential files

cp/rsync

mysqladmin flush-logs

e.g. AWS 5 minutes strategy

Page 7: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

mirrored binary log

Remote copy binary logs as created

No automatic restart management

Requires MySQL 5.6+ (can be on a slave)

EffectiveMySQL.com - Performance, Scalability, Site Reliability

B&R Strategy Considerations

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Design choices

Time to backup

Time to restore

Consistency

Flexibility

Partial Capabilities

Cost

EffectiveMySQL.com - Performance, Scalability, Site Reliability

storage engines

InnoDB only

MyISAM

mysql schema

Other storage engines

Mixed data solutions

Page 8: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

TechnicalRequirements

(Regardless of method)

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Requirements

Schema & Data

Schema Size/Tables etc

Replication architecture

Auditing

Security

Checksums

Storage Engines

Do these help to test and verify?

EffectiveMySQL.com - Performance, Scalability, Site Reliability

schema & objects

Can only be obtained via mysqldump

Required for test systems & subsets

Auditability of schema changes

EffectiveMySQL.com - Performance, Scalability, Site Reliability

meta info

Schema size

Tables size

Table objects

Page 9: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

meta info

SELECT FORMAT(SUM(data_length+index_length)/1024/1024,2) AS total_mb, FORMAT(SUM(data_length)/1024/1024,2) AS data_mb, FORMAT(SUM(index_length)/1024/1024,2) AS index_mb, COUNT(DISTINCT table_schema) AS schema_cnt, COUNT(*) AS tables, CURDATE() AS today, VERSION()FROM information_schema.tables\G

*************************** 1. row *************************** total_mb: 5344.63 data_mb: 4545.49 index_mb: 799.13schema_cnt: 7 tables: 103 today: 2012-04-03 VERSION(): 5.1.61-0ubuntu0.11.10.1-log

Your daily verification step should include this

ALL Schemas Size

https://github.com/ronaldbradford/mysql/blob/master/sql/database_size.sql

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Meta Info

DROP TABLE IF EXISTS db_size;CREATE TABLE db_size( table_schema VARCHAR(64) NOT NULL, table_name VARCHAR(64) NOT NULL, engine VARCHAR(64) NOT NULL, row_format VARCHAR(10) NULL, table_rows INT UNSIGNED NOT NULL, avg_row INT UNSIGNED NOT NULL, total_mb DECIMAL(7,2) NOT NULL, data_mb DECIMAL(7,2) NOT NULL, index_mb DECIMAL(7,2) NOT NULL, created_date DATETIME NOT NULL, INDEX (created_date,table_name)) ENGINE=InnoDB;

Table size

Keep a copy of all tablesize info per backup

https://github.com/ronaldbradford/mysql/blob/master/sql/db_size_table.sql

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Meta Info

DELIMITER $$DROP PROCEDURE IF EXISTS generate_db_size$$CREATE PROCEDURE generate_db_size()BEGIN DECLARE l_created_date DATETIME; SET l_created_date := NOW();

INSERT INTO db_size(table_schema, table_name, engine, row_format, table_rows, avg_row, total_mb, data_mb, index_mb, created_date) SELECT table_schema, table_name, engine, row_format, table_rows, avg_row_length AS avg_row, ROUND((data_length+index_length)/1024/1024,2) AS total_mb, ROUND((data_length)/1024/1024,2) AS data_mb, ROUND((index_length)/1024/1024,2) AS index_mb, l_created_date FROM information_schema.tables WHERE table_schema=DATABASE() AND table_type='BASE TABLE' ORDER BY 6 DESC;

SELECT l_created_date AS created_date, DATABASE() AS table_schema, COUNT(*) AS tables, FORMAT(SUM(total_mb),2) AS total_mb, FORMAT(SUM(data_mb),2) AS data_mb, FORMAT(SUM(index_mb),2) AS index_mb FROM db_size WHERE created_date = l_created_date;

Table size

https://github.com/ronaldbradford/mysql/blob/master/sql/generate_db_size.sql

EffectiveMySQL.com - Performance, Scalability, Site Reliability

architecture

Do you backup the master or the slave?

Binary position option changes

Data drift?

Do you backup the entire DB?

Is some data static?

Can a recovered system start without need for all data?

replication topology

Page 10: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ sudo su -$ sync ; lvcreate -L1G -s -n dbsnapshot /dev/db/p0$ mkdir -p /mnt/dbsnapshot$ mount -o ro /dev/db/dbsnapshot /mnt/dbsnapshot$ du -sh /mnt/dbsnapshot$ ls -al /mnt/dbsnapshot

$ mkdir /mysql/backup/snapshot1$ cp -r /mnt/dbsnapshot/* /mysql/backup/snapshot1

$ sudo su -$ mylvmbackup

SNAPSHOT USAGE

http://effectiveMySQL.com/article/configuring-a-new-hard-drive-for-lvm http://effectiveMySQL.com/article/using-mysql-with-lvm

http://www.lenzg.net/mylvmbackup/

TIP: mylvmbackup does all the hard work

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Testing & Verification

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Situations

Incomplete backup file

Missing objects

Locking

Missing point in time position

Restore time considerations

Fake objects

Trigger hell

^C does not kill mysqldump

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ time mysqldump --all-databases > /mysql/backup/dump1.sqlreal 1m31.631suser 1m12.533ssys 0m10.893s$ echo $?0$ ls -lh /mysql/backup/dump1.sql-rw-rw-r-- 1 uid gid 2.9G 2012-04-03 03:04 /mysql/backup/dump1.sql

mysqldump USAGE

Page 11: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ time mysqldump --all-databases > /mysql/backup/dump1.sql

mysqldump: Got error: 1142: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'cond_instances' when using LOCK TABLES$ echo $?2

VERIFICATION

TIP: Error checking is essential and easy to implement

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Error examples

mysqldump: Couldn't execute 'SHOW FIELDS FROM `alarm`': View 'schema.alarm' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)

mysqldump: Got error: 1044: Access denied for user 'rbradfor'@'localhost' to database 'schema' when using LOCK TABLES

Invalid objects

Lack of permissions

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ time mysqldump --all-databases \ --events --routines > /mysql/backup/dump1.sql

mysqldump USAGE

All objects are NOT included by default

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ time mysqldump --all-databases \ --events --routines \ --single-transaction > /mysql/backup/dump1.sql

mysqldump USAGE

Remove default schema locking

Page 12: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Options

$ time mysqldump --all-databases \ --events --routines \ --single-transaction \ --master-data > /mysql/backup/dump1.sql

mysqldump USAGE

Point in Time recovery position

$ time mysqldump --all-databases \ --events --routines \ --single-transaction \ --dump-slave > /mysql/backup/dump1.sql

mysqldump: Error: Binlogging on server not active

Fail on test system?

Different for master or slave

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup improvment

# Schema$ mysqldump --all-databases --no-data \ --skip-triggers --add-drop-database \ > /mysql/backup/schema.sql

# Objects$ mysqldump --all-databases --no-data --no-create-info \ --events --routines --triggers \ > /mysql/backup/objects.sql

# Just the data$ mysqldump --all-databases --no-create-info \ --single-transaction --master-data --skip-triggers \ > /mysql/backup/data.sql

Separate schema/objects

TIP: Include daily dumps of database objects

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Restore Options

$ time mysqldump --all-databases > /mysql/backup/dump1.sqlreal 1m31.631s...$ time mysql –u[user] -p -f < dump1.sql > dump1.out 2>&1 real 14m13.817suser 1m6.960ssys 0m1.516s$ echo $?0$ ls -l dump1.out-rw-rw-r-- 1 uid gid 0 2012-04-08 04:07 dump1.out

mysqldump USAGE

Continue on error or stop on error?

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Fake objects

DROP TABLE IF EXISTS `demo`;/*!50001 DROP VIEW IF EXISTS `demo`*/;SET @saved_cs_client = @@character_set_client;SET character_set_client = utf8;/*!50001 CREATE TABLE `demo` ( `zip` tinyint NOT NULL, `lat` tinyint NOT NULL, `lon` tinyint NOT NULL) ENGINE=MyISAM */;SET character_set_client = @saved_cs_client;

/*!50001 DROP TABLE IF EXISTS `demo`*/;/*!50001 DROP VIEW IF EXISTS `demo`*/;/*!50001 CREATE ALGORITHM=UNDEFINED *//*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER *//*!50001 VIEW `demo` AS select `uszip`.`zip` AS `zip`,`uszip`.`lat` AS `lat`,`uszip`.`lon` AS `lon` from `uszip` */;

mysqldump USAGE

Page 13: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Fake objects

---- Temporary view structure for view `demo`--DROP TABLE IF EXISTS `demo`;/*!50001 DROP VIEW IF EXISTS `demo`*/;/*!50001 CREATE VIEW `demo` AS SELECT 1 AS `zip`, 1 AS `lat`, 1 AS `lon`*/;...---- Final view structure for view `demo`--/*!50001 DROP VIEW IF EXISTS `demo`*/;/*!50001 CREATE ALGORITHM=UNDEFINED *//*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER *//*!50001 VIEW `demo` AS select `uszip`.`zip` AS `zip`,`uszip`.`lat` AS `lat`,`uszip`.`lon` AS `lon` from `uszip` */;

mysqldump USAGE

5.7 syntax

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Compression

How long to compress the data?

Which compression do you use?

How long to uncompress the data?

95% of recovery is from last backup

Best strategy is to have an uncompressed copy on server.

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Compression

Utility Comp (s) Dec (s) Savinglzo (-3) 21 34 48%pigz (-1) 43 33 64%pigz [-6] 105 25 69%gzip [-6] 232 78 69%

bzip2 540 175 74%lzo (-9) 20m 82 58%lzma 58m 180 78%xz 59m 160 78%

Depends greatly on data types

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup needs

Static Backup

Useless without Binary Log position

mysql> SHOW MASTER STATUS\G File: mysql-bin.020616 Position: 63395562 Binlog_Do_DB: Binlog_Ignore_DB:

WARNING: Can work on slave and provide the wrong

information

Page 14: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Backup Needs

$ mysqldump --master-data (or --dump-slave)CHANGE MASTER TO MASTER_LOG_FILE= 'mysql-bin.000146', MASTER_LOG_POS=810715371;

$ cat xtrabackup_binlog_info mysql-bin.000001 37522

$ grep binlog meta/backup_variables.txt binlog_position=mysql-bin.000017:5555

MEB

Xtrabackup

$ cat export-20120407-230027/metadata Log: mysql-bin.000017 Pos: 8328

mydumper

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Situations

Lost connection

Transaction too large

ROW format statement

SET max_allowed_packet

Single threaded

Binary Log

EffectiveMySQL.com - Performance, Scalability, Site Reliability

A different strategy?

EffectiveMySQL.com - Performance, Scalability, Site Reliability

what about Failover

Is failover a better option?

Do you have high availability (HA)implemented?

Top Benefit

Improved time to recovery

Top Risk

[Potential] loss of high availability

Page 15: Testing and Verifying your MySQL Backup Strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

failover issues

Failover does not cater for all situations

Data recovery to a prior point in time

e.g. security problem

building testing systems

Building out replicas

Entirely different set of problems to verify

EffectiveMySQL.com - Performance, Scalability, Site Reliability

What to consider

Forget the technology?

What is most important for your business?

B&R/DR decision should be based on loss/cost to business

RPO/RDO/SLA

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Terminology

MTTD - Mean Time To Detect

MTTR - Mean Time to Recover

RPO - Recovery Point Objective

RDO - Recovery Data Objective

SLA - Service Level Agreement

Determining business priorities is important for any strategy

EffectiveMySQL.com - Performance, Scalability, Site Reliability

Conclusion

B&R is a complex process

Business will want all of the data, all of the time

Justify the business needs first

Discounts [easier] options

Page 16: Testing and Verifying your MySQL Backup Strategy

220 pages dedicated to B&R

http://j.mp/EM-book2 http://ronaldbradford.com [email protected]

@RonaldBradford

Ronald Bradford