国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > 文庫(kù) > 正文

xtrabackup備份恢復(fù)測(cè)試

2024-09-07 22:12:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
       測(cè)試準(zhǔn)備
 
1、安裝xtrabackup工具
 
       以下測(cè)試安裝xtrabackup備份恢復(fù)工具的二進(jìn)制包,進(jìn)行測(cè)試。安裝的路徑為mysql安裝路徑,本次測(cè)試mysql的安裝路徑為:/home/q/percona-server/。
 
tar -xzf percona-xtraback-2.0.0-x86-64.tar.gz
 
cp percona-xtrabackup-2.0.0/bin/* /home/q/percona-server/bin
 
2、創(chuàng)建備份用戶
 
       創(chuàng)建備份用戶backup@localhost,xtraback只能用于本地操作,故只授權(quán)本地操作。
 
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO backup@localhost;
 
3、聲明PATH環(huán)境變量
 
       為xtrabackup備份恢復(fù)工具添加到PATH路徑中。
 
export PATH=$PATH:/home/q/percona-server/bin
 
4、創(chuàng)建測(cè)試庫(kù)
 
創(chuàng)建測(cè)試庫(kù)backup_test,測(cè)試表test。
 
mysql -uroot -S/tmp/mysql.sock -e'create database backup_test;'
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test.test (id int);'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test.test values(1),(2),(3),(4),(5);'
  
測(cè)試innodb
 
1、全備份測(cè)試
 
全備份測(cè)試主要通過測(cè)試以下幾個(gè)場(chǎng)景,對(duì)數(shù)據(jù)備份和恢復(fù)進(jìn)行驗(yàn)證。
 
1)備份全庫(kù),恢復(fù)進(jìn)行測(cè)試。
 
進(jìn)行全庫(kù)備份:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/
 
       關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/*
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
       數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份恢復(fù)正確。
 
2)修改表結(jié)構(gòu),備份全庫(kù),恢復(fù)進(jìn)行測(cè)試。
 
       修改數(shù)據(jù)庫(kù)表結(jié)構(gòu):
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test add name varchar(20) default "null";'
 
進(jìn)行全庫(kù)備份:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/
 
       關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/*
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
       數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份恢復(fù)正確。
 
3)備份某個(gè)庫(kù),恢復(fù)測(cè)試
 
       備份backup_test庫(kù)
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --user=backup backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
修改當(dāng)前數(shù)據(jù)文件:
 
mv /home/q/percona-server/data /home/q/percona-server/databak
 
mkdir /home/q/percona-server/data
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --database=backup_test --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --database=backup_test --user=backup backup/
 
cp /home/q/percona-server/databak/* /home/q/percona-server/data(僅拷貝不在data中的文件)
 
       數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份單個(gè)庫(kù)沒有問題。存在的不足是,恢復(fù)的時(shí)候,數(shù)據(jù)目錄必須為空。也就是說,在恢復(fù)階段,需要將現(xiàn)有的數(shù)據(jù)目錄改名為臨時(shí)目錄;在恢復(fù)之后,將原數(shù)據(jù)目錄(現(xiàn)臨時(shí)目錄)下的其他庫(kù)的內(nèi)容拷貝到數(shù)據(jù)目錄下即可。
 
4)備份單個(gè)表,恢復(fù)測(cè)試
 
備份backup_test庫(kù)
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
修改當(dāng)前數(shù)據(jù)文件:
 
mv /home/q/percona-server/data /home/q/percona-server/databak
 
mkdir /home/q/percona-server/data
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
       數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份單個(gè)表沒有問題。存在的不足是,恢復(fù)的時(shí)候,數(shù)據(jù)目錄必須為空。也就是說,在恢復(fù)階段,需要將現(xiàn)有的數(shù)據(jù)目錄改名為臨時(shí)目錄;在恢復(fù)之后,將原數(shù)據(jù)目錄(現(xiàn)臨時(shí)目錄)下的其他庫(kù)的內(nèi)容拷貝到數(shù)據(jù)目錄下即可。
 
5)innodb_file_per_table參數(shù)驗(yàn)證
 
       修改配置文件
 
在配置文件中添加innodb_file_per_table配置參數(shù)。
 
       重啟數(shù)據(jù)庫(kù)server
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
創(chuàng)建測(cè)試庫(kù)backup_test
 
mysql -uroot -S/tmp/mysql.sock -e'create database backup_test;'
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test.test (id int);'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test.test values(1),(2),(3),(4),(5);'
 
備份backup_test庫(kù)
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
修改當(dāng)前數(shù)據(jù)文件:
 
mv /home/q/percona-server/data /home/q/percona-server/databak
 
mkdir /home/q/percona-server/data
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
       數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
 
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份單個(gè)庫(kù)沒有問題。存在的不足是,恢復(fù)的時(shí)候,數(shù)據(jù)目錄必須為空。也就是說,在恢復(fù)階段,需要將現(xiàn)有的數(shù)據(jù)目錄改名為臨時(shí)目錄;在恢復(fù)之后,將原數(shù)據(jù)目錄(現(xiàn)臨時(shí)目錄)下的其他庫(kù)的內(nèi)容拷貝到數(shù)據(jù)目錄下即可。
 
2、增量備份測(cè)試
 
增量備份測(cè)試主要通過測(cè)試以下幾個(gè)場(chǎng)景,對(duì)數(shù)據(jù)備份和恢復(fù)進(jìn)行驗(yàn)證。
 
1)全庫(kù)備份,創(chuàng)建數(shù)據(jù)庫(kù),增量備份,恢復(fù)測(cè)試
 
       全庫(kù)備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/
 
       創(chuàng)建數(shù)據(jù)庫(kù)
 
mysql -uroot -S/tmp/mysql.sock -e'create database backup_test_tmp;'
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test_tmp.test (id int);'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test_tmp.test values(1),(2),(3),(4),(5);'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/ backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)增量備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)增量備份數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test_tmp.test;'
 
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份恢復(fù)正確。
 
2)全庫(kù)備份,修改數(shù)據(jù)表結(jié)構(gòu),增量備份,恢復(fù)測(cè)試
 
       全庫(kù)備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/
 
       修改數(shù)據(jù)表結(jié)構(gòu)
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test add email varchar(20) default "null";'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/ backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)增量備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)增量備份數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
   
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,增量備份沒有問題。存在的不足是,恢復(fù)的時(shí)候,首先數(shù)據(jù)目錄必須為空,其次,恢復(fù)的時(shí)候需要單獨(dú)拷貝增量備份的表結(jié)構(gòu)。也就是說,在恢復(fù)階段,需要將數(shù)據(jù)目錄清空;數(shù)據(jù)恢復(fù)后,需要單獨(dú)拷貝增量備份文件夾下的表結(jié)構(gòu)。
 
3)全庫(kù)備份,創(chuàng)建數(shù)據(jù)庫(kù),增量備份,修改表結(jié)構(gòu),增量備份,恢復(fù)測(cè)試
 
       全庫(kù)備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/
 
創(chuàng)建數(shù)據(jù)庫(kù)
 
mysql -uroot -S/tmp/mysql.sock -e'create database backup_test_tmp;'
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test_tmp.test (id int);'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test_tmp.test values(1),(2),(3),(4),(5);'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/ backup/
 
修改數(shù)據(jù)表結(jié)構(gòu)
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test add email varchar(20) default "null";'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/ backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/
 
       恢復(fù)增量備份1日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ --incremental-dir=backup/
 
恢復(fù)增量備份2日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)增量備份數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
 
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,增量備份沒有問題。存在的不足是,恢復(fù)的時(shí)候,首先數(shù)據(jù)目錄必須為空,其次,恢復(fù)的時(shí)候需要單獨(dú)拷貝最后一次增量備份的表結(jié)構(gòu)。也就是說,在恢復(fù)階段,需要將數(shù)據(jù)目錄清空;數(shù)據(jù)恢復(fù)后,需要單獨(dú)拷貝最后一次增量備份文件夾下的表結(jié)構(gòu)。
 
4)全備份某庫(kù),修改庫(kù),增量備份,恢復(fù)測(cè)試
 
       全備份某庫(kù)
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test backup/
 
       修改庫(kù)
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test add address varchar(20) default "null";'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test --incremental --incremental-basedir=backup/ backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/backup_test/*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/
 
       恢復(fù)增量備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)增量備份數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
 
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,增量備份沒有問題。存在的不足是,恢復(fù)的時(shí)候,首先數(shù)據(jù)目錄必須為空,其次,恢復(fù)的時(shí)候需要單獨(dú)拷貝增量備份的表結(jié)構(gòu)。也就是說,在恢復(fù)階段,需要將現(xiàn)有的數(shù)據(jù)目錄改名為臨時(shí)目錄;在恢復(fù)之后,將原數(shù)據(jù)目錄(現(xiàn)臨時(shí)目錄)下的其他庫(kù)的內(nèi)容拷貝到數(shù)據(jù)目錄下即可。數(shù)據(jù)恢復(fù)后,還需要單獨(dú)拷貝增量備份文件夾下的表結(jié)構(gòu)。
 
5)innodb_file_per_table參數(shù)驗(yàn)證
 
       修改配置文件
 
在配置文件中添加innodb_file_per_table配置參數(shù)。
 
       重啟數(shù)據(jù)庫(kù)server
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
創(chuàng)建測(cè)試庫(kù)backup_test
 
mysql -uroot -S/tmp/mysql.sock -e'create database backup_test;'
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test.test (id int);'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test.test values(1),(2),(3),(4),(5);'
 
備份backup_test庫(kù)
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/
 
修改庫(kù)
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test add phone varchar(20) default "null";'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test --incremental --incremental-basedir=backup/ backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/backup_test/*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/
 
       恢復(fù)增量備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)增量備份數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,增量備份沒有問題。存在的不足是,恢復(fù)的時(shí)候,首先數(shù)據(jù)目錄必須為空,其次,恢復(fù)的時(shí)候需要單獨(dú)拷貝增量備份的表結(jié)構(gòu)。也就是說,在恢復(fù)階段,需要將現(xiàn)有的數(shù)據(jù)目錄改名為臨時(shí)目錄;在恢復(fù)之后,將原數(shù)據(jù)目錄(現(xiàn)臨時(shí)目錄)下的其他庫(kù)的內(nèi)容拷貝到數(shù)據(jù)目錄下即可。數(shù)據(jù)恢復(fù)后,還需要單獨(dú)拷貝增量備份文件夾下的表結(jié)構(gòu)。
 
3、差分備份測(cè)試
 
       差分備份實(shí)際是一次增量備份操作,該過程包含在增量備份測(cè)試中,再次不再重復(fù)測(cè)試。
  
測(cè)試myisam
 
1、全備份測(cè)試
 
       創(chuàng)建myisam數(shù)據(jù)表
 
mysql -uroot -S/tmp/mysql.sock -e'create table backup_test.test_myisam (id int) engine=myisam;'
 
mysql -uroot -S/tmp/mysql.sock -e'insert into backup_test.test_myisam values(1),(2),(3),(4),(5);'
 
       全備份數(shù)據(jù)表
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/backup_test/test_myisam*
 
       恢復(fù)日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test_myisam;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份恢復(fù)正確。
 
2、增量備份測(cè)試
 
全備份數(shù)據(jù)表
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam backup/
 
修改數(shù)據(jù)表結(jié)構(gòu)
 
mysql -uroot -S/tmp/mysql.sock -e 'alter table backup_test.test_myisam add name varchar(20) default "null";'
 
       增量備份
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam --incremental --incremental-basedir=backup/backup/
 
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
 
kill -9 $(ps -ef|grep "mysql"|gawk '$0 !~/grep/ {print $2}' |tr -s '/n' ' ')
 
刪除當(dāng)前數(shù)據(jù)文件:
 
rm -rf /home/q/percona-server/data/backup_test/test_myisam*
 
       恢復(fù)全備份日志文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/
 
       恢復(fù)增量備份日志文件
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/ --incremental-dir=backup/
 
       恢復(fù)數(shù)據(jù)文件:
 
innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --copy-back --user=backup backup/
 
數(shù)據(jù)驗(yàn)證:
 
mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &
 
mysql -uroot -S/tmp/mysql.sock -e'select * from backup_test.test_myisam;'
  
測(cè)試結(jié)果:
 
       經(jīng)驗(yàn)證,備份恢復(fù)正確。
 
3、差分備份測(cè)試
 
差分備份實(shí)際是一次增量備份操作,該過程包含在增量備份測(cè)試中,再次不再重復(fù)測(cè)試。
  
測(cè)試總結(jié)
 
設(shè)置以上場(chǎng)景,經(jīng)測(cè)試,發(fā)現(xiàn)xtrabackup備份恢復(fù)工具仍然存在一些潛在的問題,但是這些問題完全可以通過規(guī)避或者完善腳本的方式,來(lái)改進(jìn)和避免存在的問題。
  
實(shí)現(xiàn)原理
 
對(duì)于InnoDB,XtraBackup基于InnoDB的crash-recovery功能進(jìn)行備份。
 
crash-recovery是這樣的:InnoDB維護(hù)了一個(gè)redo log,又稱為 transaction log,也叫事務(wù)日志,它包含了InnoDB數(shù)據(jù)的所有改動(dòng)情況。InnoDB啟動(dòng)的時(shí)候先去檢查datafile和transaction log,然后應(yīng)用所有已提交的事務(wù)并回滾所有未提交的事務(wù)。
 
XtraBackup在備份的時(shí)候并不鎖定表,而是一頁(yè)一頁(yè)地復(fù)制InnoDB的數(shù)據(jù),與此同時(shí),XtraBackup還有另外一個(gè)線程監(jiān)視著transactions log,一旦log發(fā)生變化,就把變化過的log pages復(fù)制走(因?yàn)閠ransactions log文件大小有限,寫滿之后,就會(huì)從頭再開始寫,新數(shù)據(jù)可能會(huì)覆蓋到舊的數(shù)據(jù),所以一旦變化就要立刻復(fù)制走)。在全部數(shù)據(jù)文件復(fù)制完成之后,停止復(fù)制logfile。
 
XtraBackup采用了其內(nèi)置的InnoDB庫(kù)以read-write模式打開InnoDB的數(shù)據(jù)文件,然后每次讀寫1MB(1MB/16KB=64page)的數(shù)據(jù),一頁(yè)一頁(yè)地遍歷,同時(shí)用InnoDB的buf_page_is_corrupted()函數(shù)檢查此頁(yè)的數(shù)據(jù)是否正常,如果正常則進(jìn)行復(fù)制,如不正常則重新讀取,最多重讀10次,如果還是失敗,則備份失敗退出。復(fù)制transactions log的原理也是一樣的,只不過每次讀寫512KB(512KB/16KB=32page)的數(shù)據(jù)。
 
由于XtraBackup其內(nèi)置的InnoDB庫(kù)打開文件的時(shí)候是rw的,所以運(yùn)行XtraBackup的用戶,必須對(duì)InnoDB的數(shù)據(jù)文件具有讀寫權(quán)限。
 
由于XtraBackup要從文件系統(tǒng)中復(fù)制大量的數(shù)據(jù),所以它盡可能地使用posix_fadvise(),來(lái)告訴OS不要緩存讀取到的數(shù)據(jù)(因?yàn)檫@些數(shù)據(jù)不會(huì)重用到了),從而提升性能。如果要緩存的話,大量的數(shù)據(jù)會(huì)對(duì)OS的虛擬內(nèi)存造成很大的壓力,其它進(jìn)程(如mysqld)很有可能會(huì)被swap出去,這樣就出問題了。同時(shí),XtraBackup在讀取數(shù)據(jù)的時(shí)候還盡可能地預(yù)讀。
 
由于不鎖表,所以復(fù)制出來(lái)的數(shù)據(jù)是不一致的,數(shù)據(jù)的一致性是在恢復(fù)的時(shí)候使用crash-recovery進(jìn)行實(shí)現(xiàn)的。
 
對(duì)于MyISAM,XtraBackup還是首先鎖定所有的表,然后復(fù)制所有文件。
  
應(yīng)用場(chǎng)景
 
       基于以上原理,xtrabackup備份恢復(fù)工具比較適合數(shù)據(jù)增長(zhǎng)型數(shù)據(jù)庫(kù)。對(duì)于數(shù)據(jù)增長(zhǎng)型的庫(kù),由于數(shù)據(jù)的增長(zhǎng)導(dǎo)致數(shù)據(jù)備份和恢復(fù)的空間和時(shí)間上的壓力較大。而xtrabackup有增量備份的功能,在短時(shí)間內(nèi)可以通過進(jìn)行增量備份來(lái)保證數(shù)據(jù)的安全性。而長(zhǎng)期來(lái)看,仍然需要間斷性的進(jìn)行全庫(kù)備份。此外,由于xtrabackup對(duì)innodb的數(shù)據(jù)庫(kù)不進(jìn)行鎖定,因此對(duì)要求不影響線上服務(wù)的數(shù)據(jù)備份和恢復(fù)較適合。
 
       而對(duì)于數(shù)據(jù)量無(wú)明顯增長(zhǎng),且更新為主的數(shù)據(jù)更新型數(shù)據(jù)庫(kù),xtrabackup顯得過于復(fù)雜。xtrabackup操作反而不如mysqldump的性能高。
  
建議
 
       通過以上測(cè)試,有以下建議,供DBA參考:
 
1、改進(jìn)和完善innobackupex腳本,或者編寫備份恢復(fù)腳本。避免備份中存在的不足和可能出現(xiàn)的問題。
 
2、建議根據(jù)數(shù)據(jù)庫(kù)的類型,指定周密的備份恢復(fù)策略。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德阳市| 松滋市| 体育| 宾川县| 闽侯县| 沂水县| 恭城| 沂水县| 呈贡县| 盐亭县| 比如县| 秦安县| 孝义市| 克什克腾旗| 芜湖市| 樟树市| 焦作市| 修武县| 静海县| 噶尔县| 宝丰县| 五家渠市| 永仁县| 松潘县| 徐州市| 波密县| 察哈| 邯郸县| 秦皇岛市| 清原| 黄龙县| 鄂伦春自治旗| 宁夏| 兰西县| 灵璧县| 化德县| 益阳市| 平罗县| 涡阳县| 福泉市| 时尚|