標籤:mysql 備份 innobackup
mysql簡介-1
本篇將介紹備份恢複、主從、主主
4、mysql備份恢複
mysql備份分為冷備和熱備,使用冷備需要關閉伺服器,在生產絕對不建議這麼操作,熱備又稱為邏輯備份和裸檔案備份,備份檔案又可以分為全備和增量備份,邏輯備份對增量備份不是特別理想。
從這裡開始我們準備兩台機器: 系統Cenos7.4 mysql: 5.7
4.1、mysqldump備份操作
1、全備備份: [[email protected] tmp]# mysqldump -uroot -pxiong123 -A > 20180510.sql恢複: [[email protected] tmp]# mysql -uroot -pxiong123 < 20180510.sql2、備份單個庫備份: [[email protected] tmp]# mysqldump -uroot -p extmail > extmail.20180510.sql 備份檔案頭部: Host: localhost Database: extmail 先刪除extmail這個庫 mysql> drop database extmail; 恢複操作: [[email protected] tmp]# mysql -uroot -pxiong123 extmail < extmail.20180510.sql 刪除資料庫,直接恢複會報這個錯誤,我們需要先建立這個庫,然後再進行恢複 ERROR 1049 (42000): Unknown database ‘extmail‘ 完整單庫恢複 mysql> create database extmail; [[email protected] tmp]# mysql -uroot -pxiong123 extmail < extmail.20180510.sql
3、備份庫中的單個表備份:文法: -u使用者 -p密碼 庫名 表名 [[email protected] tmp]# mysqldump -uroot -p extmail alias > ext_alias.sql恢複: 1、刪除 mysql> drop table extmail.alias; 2、恢複 [[email protected] tmp]# mysql -uroot -pxiong123 extmail < ext_alias.sql 3、查看 mysql> use extmail; mysql> show tables;
4.2、xtrbackup
- 點我下載 - 版本: percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
4.2.1、功能
能實現的功能: 非阻塞備份innodb等事務引擎資料庫、 備份myisam表會阻塞(需要鎖)、 支援全備、增量備份、壓縮備份、 快速增量備份(xtradb,原理類似於oracle:tracking 上次備份之後發生修改的page.)、 percona支援歸檔redo log的備份、 percona5.6+支援輕量級的backup-lock替代原來重量級的FTWRL,此時即使備份非事務引擎表也不會阻塞innodb的DML語句了、 支援加密備份、流備份(備份到遠程機器)、並行本地備份、並行壓縮、並行加密、並行應用備份期間產生的redo日誌、並行copy-back 支援部份備份,只備份某個庫,某個表 支援部分恢複 支援備份單個表分區 支援備份速度限制,指備份產生的IO速度的限制 支援point-in-time恢複 支援compat備份,也即使不備份索引資料,索引在prepare時--rebuild-indexs 支援備份buffer pool 支援單表export, import到其它庫 支援 rsync 來縮短備份非事務引擎表的鎖定時間
4.2.1、全備
yum安裝 依賴包 libev、rsync [[email protected] tmp]# yum -y install percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm前期準備:1、建立一個使用者備份的使用者 mysql> grant replication client, reload, lock tables, process on *.* to ‘xtrb‘@‘%‘ identified by ‘xtrb‘; mysql> flush privileges;2、建立一個備份目錄 /data/backup [[email protected] mysql]# mkdir /data/backup [[email protected] mysql]# chown mysql.mysql !$3、建立一個資料庫mysql> create database test;mysql> use test;mysql> create table te1 (id int primary key auto_increment,name varchar(25));mysql> insert into te1 (name) values (‘xiong1‘),(‘xddf2‘),(‘sa3‘);
備份:1、全備 [[email protected] mysql]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 /data/backup/
備份完成之後是直接以目前時間來命名[[email protected] mysql]# ls /data/backup/ 2018-05-10_15-54-29以下是備份的檔案,需要將屬主屬組設定成mysql,方便恢複
檔案說明 重要
恢複操作
恢複時需要加上 --apply-log參數,它的作用是復原未提交的事務及同步已經提交的事務至資料檔案,使資料檔案保持一致性;
[[email protected] 2018-05-10_15-54-29]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log /data/backup/2018-05-10_15-54-29/出現如下資訊說明成功
這時我們類比資料掛掉了,直接幹掉原先的mysql1、先停掉它 [[email protected] 2018-05-10_15-54-29]# service mysqld stop2、弄走原先的資料檔案 [[email protected] 2018-05-10_15-54-29]# mv /data/mysql{,.bak}3、恢複資料檔案 [[email protected] 2018-05-10_15-54-29]# pwd /data/backup/2018-05-10_15-54-29 [[email protected] 2018-05-10_15-54-29]# mkdir /data/mysql [[email protected] 2018-05-10_15-54-29]# mv * /data/mysql [[email protected] 2018-05-10_15-54-29]# chown mysql.mysql /data/mysql -R4、啟動服務 [[email protected] 2018-05-10_15-54-29]# service mysqld start5、查看資料庫 mysql> show databases; Database: test 沒問題
4.2.2增量備份
1、先進行一次全備 [[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 /data/backup/2、插入新的資料 mysql> insert into test.te1 (name) values (‘5sf‘),(‘adf‘),(‘555sf‘),(‘3adf‘),(‘5555sf‘),(‘3adadf‘),(‘55ad55sf‘),(‘3adadaf‘);
3、增量備份[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --no-timestamp --incremental /data/backup/2018-05-10_16-23-27-incre-1 --incremental-basedir /data/backup/2018-05-10_16-23-27/
4、增備的恢複 4.1、先進行全備恢複 4.2、再進行增備恢複 都需要加上 --redo-only --redo-only意味著只前滾xtrabackup日誌中已經提交的事務,並不復原那些沒有提交的事務資訊 4.3、最後一個過程就是對整體的全備進行恢複,這時就可以去掉--redo-only了,意味著需要復原那些還沒有提交的事務恢複步驟:1、全備的恢複[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log --redo-only /data/backup/2018-05-10_16-23-27xtrabackup: starting shutdown with innodb_fast_shutdown = 1InnoDB: Starting shutdown...InnoDB: Shutdown completed; log sequence number 2597453InnoDB: Number of pools: 1180510 16:41:43 completed OK!2、增備的恢複[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log --redo-only /data/backup/2018-05-10_16-23-27 --incremental-dir=/data/backup/2018-05-10_16-23-27-incre-1/180510 16:42:43 [00] ...done180510 16:42:43 [00] Copying /data/backup/2018-05-10_16-23-27-incre-1//xtrabackup_info to ./xtrabackup_info180510 16:42:43 [00] ...done180510 16:42:43 completed OK!3、整體的全備恢複不加--redo-only[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log /data/backup/2018-05-10_16-23-27xtrabackup: using the following InnoDB configuration for recovery:xtrabackup: innodb_data_home_dir = .xtrabackup: innodb_data_file_path = ibdata1:12M:autoextendxtrabackup: innodb_log_group_home_dir = .xtrabackup: innodb_log_files_in_group = 2 2個檔案xtrabackup: innodb_log_file_size = 50331648 可以看到記錄檔大小InnoDB: FTS optimize thread exiting.InnoDB: Starting shutdown...InnoDB: Shutdown completed; log sequence number 2608421 180510 16:43:51 completed OK!4、測試恢複過程[[email protected] data]# cd /data[[email protected] data]# service mysqld stop[[email protected] data]# mv mysql{,.bak}[[email protected] data]# mkdir mysql[[email protected] data]# mv backup/2018-05-10_16-23-27/* mysql/[[email protected] data]# chown mysql.mysql mysql -R[[email protected] data]# service mysqld start
mysql備份複製-2