MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql
一、Xtrabackup概述
1、Xtrabackup簡介
Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。
官網:https://www.percona.com/
InnoDB存儲引擎支持熱備,完全備份、增量備份
MyISAM溫備,完全備份,不支持增量備份,
物理備份,速度快
特點:
1)備份過程快速、可靠;
2)備份過程不會打斷正在執行的事務;
3)能夠基于壓縮等功能節約磁盤空間和流量;
4)自動實現備份檢驗;
5)還原速度快;
2、Xtrabackup備份原理
物理備份,不鎖表,那么怎么保證現有的數據(備份過程中有尚未提交或已經提交但未同步事務)與復制出來的數據一致呢?
我們知道MySQL修改操作都會先記錄在ib_logfile日志文件,再同步到磁盤,這個文件并重復使用。在復制期間會開啟一個線程用來監控ib_logfile日志文件,如果有修改就從上次記錄的日志序列號(checkpoins)開始復制新增內容到Logfile文件。復制結束后,把logfile事務日志進行回滾,把未完成的事務同步到ibdata1和ibd里面,來保證數據一致性。這與Mysql崩潰后恢復基本操作一樣。
3、安裝
官網上提供各版本各安裝方式的包(rpm格式,源碼,通用二進制),這里使用最簡便的rpm包安裝[root@Node5?~]#?yum?install
[root@Node5?~]#?yum?list|grep?xtrabackup
holland-xtrabackup.noarch???????????????????1.0.14-3.el6?????????????????epel
percona-xtrabackup.x86_64???????????????????2.3.7-2.el6??????????????????percona-release-x86_64
percona-xtrabackup-20.x86_64????????????????2.0.8-587.rhel6??????????????percona-release-x86_64
percona-xtrabackup-20-debuginfo.x86_64??????2.0.8-587.rhel6??????????????percona-release-x86_64
percona-xtrabackup-20-test.x86_64???????????2.0.8-587.rhel6??????????????percona-release-x86_64
percona-xtrabackup-21.x86_64????????????????2.1.9-746.rhel6??????????????percona-release-x86_64
percona-xtrabackup-21-debuginfo.x86_64??????2.1.9-746.rhel6??????????????percona-release-x86_64
percona-xtrabackup-22.x86_64????????????????2.2.13-1.el6?????????????????percona-release-x86_64
percona-xtrabackup-22-debuginfo.x86_64??????2.2.13-1.el6?????????????????percona-release-x86_64
percona-xtrabackup-24.x86_64????????????????2.4.6-2.el6??????????????????percona-release-x86_64
percona-xtrabackup-24-debuginfo.x86_64??????2.4.6-2.el6??????????????????percona-release-x86_64
percona-xtrabackup-debuginfo.x86_64?????????2.3.7-2.el6??????????????????percona-release-x86_64
percona-xtrabackup-test.x86_64??????????????2.3.7-2.el6??????????????????percona-release-x86_64
percona-xtrabackup-test-21.x86_64???????????2.1.9-746.rhel6??????????????percona-release-x86_64
percona-xtrabackup-test-22.x86_64???????????2.2.13-1.el6?????????????????percona-release-x86_64
percona-xtrabackup-test-24.x86_64???????????2.4.6-2.el6??????????????????percona-release-x86_64
[root@Node5?~]#?yum?install?percona-xtrabackup
#?下載速度可能很慢,可以直接在官網上下載rpm包
[root@Node5?~]#?ls?percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm
percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm
[root@Node5?~]#?yum?install?percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm
[root@Node5?~]#?rpm?-ql?percona-xtrabackup-24
/usr/bin/innobackupex????#?是xtrabackup的軟鏈接文件
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.6
/usr/share/doc/percona-xtrabackup-24-2.4.6/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
[root@Node5?~]#?ls?-l?/usr/bin/innobackupex
lrwxrwxrwx?1?root?root?10?Mar?22?15:04?/usr/bin/innobackupex?->?xtrabackup
innobackupex: 是mysqld客戶端工具, 以mysql協議連入mysqld,不支持離線備份(不支持備份遠程主機)
常用參數
--user= ? ? #指定數據庫備份用戶
--password= ?#指定數據庫備份用戶密碼
--port= ? ? #指定數據庫端口
--socket= ? ?#指定socket文件路徑
--databases= ?#備份指定數據庫,多個空格隔開,如--databases="dbname1 dbname2",不加備份所有庫
--defaults-file=? ?????#指定my.cnf配置文件
--apply-log?????????#日志回滾
--use-memory ? ? ? ? ? # 日志回滾所使用的內存空間
--incremental= ? ? ? ? ?#增量備份,后跟增量備份路徑
--incremental-basedir= ? ? #增量備份,指定上次增量備份路徑
--redo-only?????????#合并全備和增量備份數據文件,(僅提交不回滾)
--copy-back?????????#將備份數據復制到數據庫,數據庫目錄要為空
--no-timestamp ? ? ? ? ?#生成備份文件不以時間戳為目錄名
--stream= ? ? ? ? ? ? ?#指定流的格式做備份,--stream=tar,將備份文件歸檔
--remote-host=user@ip DST_DIR ?#備份到遠程主機
二、Xtrabackup備份的實現
1、完全備份
# innobackupex --user=DBUSER --password=DBUSERPASS ?/path/to/BACKUP-DIR/
如果要使用一個最小權限的用戶進行備份,則可基于如下命令創建此類用戶:
mysql> CREATE USER 'bkpuser’@’localhost’ IDENTIFIED BY 'secret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;
使用innobackupex備份時,其會調用xtrabackup備份所有的InnoDB表,復制所有關于表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命名的目錄中。但不會備份二進制日志文件
實例:[root@Node5?~]#?innobackupex?--user=root?--password=123??/tmp/backup
[root@Node5?~]#?cd?/tmp/backup/
[root@Node5?backup]#?ls
2017-03-22_15-22-58
[root@Node5?backup]#?cd?2017-03-22_15-22-58/
[root@Node5?2017-03-22_15-22-58]#?ls
backup-my.cnf??mydb???performance_schema??xtrabackup_binlog_info??xtrabackup_info
ibdata1????????mysql??testdb??????????????xtrabackup_checkpoints??xtrabackup_logfile
在備份的同時,innobackupex還會在備份目錄中創建如下文件:
xtrabackup_checkpoints
備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日志序列號)范圍信息;每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
日志序列號
是相對于innodb表而言的,innodb表空間內部通過使用類似于數據塊的方式,組織數據存數,每個數據塊都有一個日志序列號,日志序列號標記了這個數據塊最近被改變的時間;是實現增量備份的重要憑據[root@Node5?2017-03-22_15-22-58]#?vim?xtrabackup_checkpoints
backup_type?=?full-backuped
from_lsn?=?0
to_lsn?=?1622135
last_lsn?=?1622135
compact?=?0???#?沒有壓縮
recover_binlog_info?=?0
xtrabackup_binlog_info
mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。
xtrabackup_binlog_pos_innodb
二進制日志文件及用于InnoDB或XtraDB表的二進制日志文件的當前position(也被廢棄了)
xtrabackup_binary
備份中用到的xtrabackup的可執行文件(已經廢棄了);
backup-my.cnf
備份命令用到的配置選項信息;[root@Node5?2017-03-22_15-22-58]#?vim?backup-my.cnf
#?This?MySQL?options?file?was?generated?by?innobackupex.
#?The?MySQL?server
[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=50331648
innodb_fast_checksum=false
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
server_id=1
redo_log_version=0
在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動創建一個以時間命名的目錄;如此一來,innobackupex命令將會創建一個BACKUP-DIR目錄來存儲備份數據。
2、數據恢復
1)準備(prepare)一個完全備份
一般情況下,在備份完成后,備份得到的數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。(數據此時處于開放狀態,可以合并增量備份的數據)
“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態。
innobakupex 命令的--apply-log選項可用于實現上述功能。如下面的命令:
#innobackupex --apply-log ?/path/to/BACKUP-DIR
如果執行正確,其最后輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1622568
170322 16:22:05 completed OK!
在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的內存的大小,默認通常為100M。如果有足夠的內存可用,可以多劃分一些內存給prepare的過程,以提高其完成速度。
2)從一個完全備份中恢復數據
注意:恢復可以不用啟動MySQL,/etc/my.cnf必須明確指定了數據目錄的路徑
innobackupex命令的--copy-back選項用于執行恢復操作,其通過復制所有數據相關的文件至mysql服務器DATADIR目錄中來執行恢復過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關信息。
# innobackupex --copy-back ?/path/to/BACKUP-DIR? ? ?# 自動恢復回原目錄
如果執行正確,其輸出信息的最后幾行通常如下:
170322 16:40:47 completed OK!
當數據恢復至DATADIR目錄以后,還需要確保所有數據文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動mysqld之前還需要事先修改數據文件的屬主和屬組。
如:# chown -R ?mysql:mysql ?/mydata/data/
3、使用innobackupex進行增量備份
每個InnoDB的頁面都會包含一個LSN信息,每當相關的數據發生改變,相關的頁面的LSN就會自動增長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之后發生改變的頁面來實現。
要實現第一次增量備份,可以使用下面的命令進行:
# innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是完全備份所在的目錄,此命令執行結束后,innobackupex命令會在/backup目錄中創建一個新的以時間命名的目錄以存放所有的增量備份數據。另外,在執行過增量備份之后再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。###?在數據庫上添加數據,再做增量備份
[root@Node5?backup]#?innobackupex?-uroot?-p123?--incremental?/tmp/backup?--incremental-basedir=/tmp/backup/2017-03-22_17-00-54/
[root@Node5?backup]#?vim?2017-03-22_17-33-37/xtrabackup_checkpoints
backup_type?=?incremental
from_lsn?=?1622636
to_lsn?=?1626700
last_lsn?=?1626700
compact?=?0
recover_binlog_info?=?0
###?在數據庫上增加數據,再做一個增量備份
[root@Node5?backup]#?innobackupex?-uroot?-p123?--incremental?/tmp/backup?--incremental-basedir=/tmp/backup/2017-03-22_17-33-37/
[root@Node5?backup]#?vim?2017-03-22_17-40-40/xtrabackup_checkpoints
backup_type?=?incremental
from_lsn?=?1626700
to_lsn?=?1633691
last_lsn?=?1633691
compact?=?0
recover_binlog_info?=?0
需要注意的是,增量備份僅能應用于InnoDB或XtraDB表,對于MyISAM表而言,執行增量備份時其實進行的是完全備份。
“準備”(prepare)增量備份與準備完全備份有著一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”?!爸胤拧敝?#xff0c;所有的備份數據將合并到完全備份上。
(2)基于所有的備份將未提交的事務進行“回滾”。
于是,操作就變成了:
# innobackupex --apply-log --redo-only BASE-DIR
接著執行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二個增量:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2[root@Node5?backup]#?innobackupex?--apply-log?--redo-only?2017-03-22_17-00-54/
[root@Node5?backup]#?innobackupex?--apply-log?--redo-only?2017-03-22_17-00-54/?--incremental-dir=2017-03-22_17-33-37/
[root@Node5?backup]#?innobackupex?--apply-log?--redo-only?2017-03-22_17-00-54/?--incremental-dir=2017-03-22_17-40-40/
[root@Node5?backup]#?vim?2017-03-22_17-00-54/xtrabackup_checkpoints
backup_type?=?log-applied
from_lsn?=?0
to_lsn?=?1633691
last_lsn?=?1633691
compact?=?0
recover_binlog_info?=?0
其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上操作;[root@Node5?backup]#?ls?-lh?*
2017-03-22_17-00-54:
total?21M
-rw-r-----?1?root?root??418?Mar?22?17:00?backup-my.cnf
-rw-r-----?1?root?root??12M?Mar?22?17:43?ibdata1
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?mydb
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?mysql
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?performance_schema
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?test1
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?test2
drwxr-x---?2?root?root?4.0K?Mar?22?17:43?testdb
-rw-r-----?1?root?root???29?Mar?22?17:43?xtrabackup_binlog_info
-rw-r--r--?1?root?root???24?Mar?22?17:43?xtrabackup_binlog_pos_innodb
-rw-r-----?1?root?root??111?Mar?22?17:43?xtrabackup_checkpoints
-rw-r-----?1?root?root??568?Mar?22?17:43?xtrabackup_info
-rw-r-----?1?root?root?8.0M?Mar?22?17:42?xtrabackup_logfile
2017-03-22_17-33-37:
total?8.5M
-rw-r-----?1?root?root??418?Mar?22?17:33?backup-my.cnf
-rw-r-----?1?root?root?416K?Mar?22?17:33?ibdata1.delta
-rw-r-----?1?root?root???44?Mar?22?17:33?ibdata1.meta
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?mydb
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?mysql
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?performance_schema
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?test1
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?test2
drwxr-x---?2?root?root?4.0K?Mar?22?17:33?testdb
-rw-r-----?1?root?root???28?Mar?22?17:33?xtrabackup_binlog_info
-rw-r-----?1?root?root??117?Mar?22?17:33?xtrabackup_checkpoints
-rw-r-----?1?root?root??567?Mar?22?17:33?xtrabackup_info
-rw-r-----?1?root?root?8.0M?Mar?22?17:43?xtrabackup_logfile
2017-03-22_17-40-40:
total?8.7M
-rw-r-----?1?root?root??418?Mar?22?17:40?backup-my.cnf
-rw-r-----?1?root?root?656K?Mar?22?17:40?ibdata1.delta
-rw-r-----?1?root?root???44?Mar?22?17:40?ibdata1.meta
drwxr-x---?2?root?root?4.0K?Mar?22?17:40?mysql
drwxr-x---?2?root?root?4.0K?Mar?22?17:40?performance_schema
drwxr-x---?2?root?root?4.0K?Mar?22?17:40?test1
drwxr-x---?2?root?root?4.0K?Mar?22?17:40?test2
drwxr-x---?2?root?root?4.0K?Mar?22?17:40?testdb
-rw-r-----?1?root?root???29?Mar?22?17:40?xtrabackup_binlog_info
-rw-r-----?1?root?root??117?Mar?22?17:40?xtrabackup_checkpoints
-rw-r-----?1?root?root??568?Mar?22?17:40?xtrabackup_info
-rw-r-----?1?root?root?8.0M?Mar?22?17:43?xtrabackup_logfile
可以看到增量備份主要是innodb共享的表空間文件數據的差異
恢復數據:
恢復完整備份(此時完整備份已經包含所有增量備份,可以通過查看checkpoints來核實)
# innobackupex --copy-back /mysql_backup/BASE-DIR[root@Node5?backup]#?innobackupex?--copy-back?2017-03-22_17-00-54/
[root@Node5?backup]#?cd?/data/mydata
[root@Node5?mydata]#?chown?-R?mysql.?.
###?然后可以檢查后面新增的數據是否都在
數據恢復后,應該做一次完全備份(方便后面數據恢復)
4、Xtrabackup的“流”及“備份壓縮”功能
Xtrabackup對備份的數據文件支持“流”功能,即可以將備份的數據通過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:
# innobackupex --stream=tar /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
甚至也可以使用類似如下命令將數據備份至其它服務器:
# innobackupex --stream=tar ?/backup | ssh user@www.magedu.com ?"cat - > /backups/`date +%F_%H-%M-%S`.tar"
此外,在執行本地備份時,還可以使用--parallel選項對多個文件進行并行復制。此選項用于指定在復制時啟動的線程數目。當然,在實際進行備份時要利用此功能的便利性,也需要啟用innodb_file_per_table選項或共享的表空間通過innodb_data_file_path選項存儲在多個ibdata文件中。對某一數據庫的多個文件的復制無法利用到此功能。其簡單使用方法如下:
# innobackupex --parallel ?/path/to/backup
同時,innobackupex備份的數據文件也可以存儲至遠程主機,這可以使用--remote-host選項來實現:
# innobackupex --remote-host=root@www.magedu.com ?/path/IN/REMOTE/HOST/to/backup
5、導入或導出單張表
針對于innodb表而言,myisam表可以直接復制3個表文件就可以實現表的導入導出
默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過,此時需要“導出”表的mysql服務器啟用了innodb_file_per_table選項(嚴格來說,是要“導出”的表在其創建之前,mysql服務器就啟用了innodb_file_per_table選項),并且“導入”表的服務器同時啟用了innodb_file_per_table和innodb_expand_import選項。
1)“導出”表
導出表是在備份的prepare階段進行的,因此,一旦完全備份完成,就可以在prepare過程中通過--export選項將某表導出了:
# innobackupex --apply-log --export /path/to/backup
此命令會為每個innodb表的表空間創建一個以.exp結尾的文件,這些以.exp結尾的文件則可以用于導入至其它服務器。
2)“導入”表
要在mysql服務器上導入來自于其它服務器的某innodb表,需要先在當前服務器上創建一個跟原表表結構一致的表,而后才能實現將表導入:(會生成mytable.frm表定義文件)
mysql>CREATE TABLE mytable (...) ?ENGINE=InnoDB;
然后將此表的表空間刪除:
mysql> ALTER TABLE mydatabase.mytable ?DISCARD TABLESPACE;
接下來,將來自于“導出”表的服務器的mytable表的mytable.ibd和mytable.exp文件復制到當前服務器的數據目錄,然后使用如下命令將其“導入”:
mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
6、使用Xtrabackup對數據庫進行部分備份
Xtrabackup也可以實現部分備份,即只備份某個或某些指定的數據庫或某數據庫中的某個或某些表。但要使用此功能,必須啟用innodb_file_per_table選項,即每張表保存為一個獨立的文件。同時,其也不支持--stream選項,即不支持將數據通過管道傳輸給其它程序進行處理。
此外,還原部分備份跟還原全部數據的備份也有所不同,即你不能通過簡單地將prepared的部分備份使用--copy-back選項直接復制回數據目錄,而是要通過導入表的方式來實現還原。當然,有些情況下,部分備份也可以直接通過--copy-back進行還原,但這種方式還原而來的數據多數會產生數據不一致的問題,因此,無論如何不推薦使用這種方式。
1)實現部分備份
實現部分備份的方式有三種:正則表達式(--include), 枚舉表文件(--tables-file)和列出要備份的數據庫(--databases)。
(a)使用--include
使用--include時,要求為其指定要備份的表的完整名稱,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1' ?/path/to/backup
(b)使用--tables-file
此選項的參數需要是一個文件名,此文件中每行包含一個要備份的表的完整名稱;如:
#echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt ?/path/to/backup
(c)使用--databases
此選項接受的參數為數據名,如果要指定多個數據庫,彼此間需要以空格隔開;同時,在指定某數據庫時,也可以只指定其中的某張表。此外,此選項也可以接受一個文件為參數,文件中每一行為一個要備份的對象。如:
# innobackupex --databases="mageedu testdb" /path/to/backup
例子:
innobackupex?--databases="mydatabase.mytable?mysql"?/path/to/backup?--user=backup?--password=backup
上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,最終結果將包括mydatabase數據庫中的mytable表,以及整個完整的mysql數據庫。
2)準備(preparing)部分備份
prepare部分備份的過程類似于導出表的過程,要使用--export選項進行:
#innobackupex --apply-log --export /pat/to/partial/backup
此命令執行過程中,innobackupex會調用xtrabackup命令從數據字典中移除缺失的表,因此,會顯示出許多關于“表不存在”類的警告信息。同時,也會顯示出為備份文件中存在的表創建.exp文件的相關信息。
3)還原部分備份
還原部分備份的過程跟導入表的過程相同。當然,也可以通過直接復制prepared狀態的備份直接至數據目錄中實現還原,不過此時要求數據目錄處于一致狀態。
復制部分表數據的方法:
導出某表的某些數據:
select clause INTO OUTFILE '/PATH/TO/FILE_NAME';
# 保存的目錄mysql需要有寫權限
恢復導出的數據:
需要先創建表結構:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) };
導入數據:
load data infile '/PATH/TO/FILE_NAME' into table TB_NAME;
三、mysql數據備份、還原總結
1、xtrabackup
xtrabackup實現完畢備份很簡便
xtrabackup的部分備份和表導入導出,比較麻煩了,要導入單張表直接使用mysqldump更簡便
完整的備份策略:完全備份 + 增量備份 + 二進制日志
2、注意
將數據和二進制文件放置于不同的磁盤設備上,二進制日志也應該周期性地備份
將數據和備份數據分開存放,建議不在同一設備、同一主機、同一機房、同一地域
每次災難恢復后都應該立即做一次完全備份
備份后的數據應該周期性地做恢復測試
備份腳本化
3、從備份中恢復應該遵循的步驟
1)停止mysqld服務器
2)記錄服務器配置和文件權限
3)將備份恢復到mysql數據目錄(依賴于具體的備份工具)
4)改變配置和文件權限
5)以限制方式啟動mysql服務器;比如禁止通過網絡訪問:
在配置文件中添加:
[mysqld]
skip-networking
soket=/tmp/mysql-recovery.sock
6)載入額外的邏輯備份:檢查和重復二進制日志
7)檢查已經還原的數據
8)以完全訪問模式重啟服務器
注釋前面在配置文件中添加的選項,并重啟
總結
以上是生活随笔為你收集整理的MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站锁定php文件命令,PHP文件锁定读
- 下一篇: powershell连接数据库_Powe