數據備份是數據庫的數據保護措施之一,數據備份可使用工具輕鬆實現,結合定時任務也能必定程度上保證咱們數據的安全。下面教你用mysqldump & xtrabackup 備份數據庫的簡陋方法 |
mysqldump的簡單用法html
#備份(導出)全部數據庫的數據和結構(注意:這種方式備份,還原時,無需先建立數據庫,可直接導入) mysqldump -u root -p 'password' --all-databases > all.sql #備份指定數據庫(db1和db2) mysqldump -u root -p 'password' ---databases db1 db2 > db1-db2.sql #恢復(導入)全部庫 mysql -u root -p 'password' < all.sql #導入某個庫(只導入db1這個數據庫,db2不導入) mysql -u root -p 'password' db1 < db1-db2.sql
xtrabackup工具(不支持mysql5.7)mysql
介紹,能對InnoDB引擎進行增量備份(備份是不加鎖),對MyISAM引擎全量備份(備份時會鎖寫)linux
第一:安裝xtrabackupsql
wget https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-4.noarch.rpm rpm -ivh percona-release-0.1-4.noarch.rpm yum clean all yum makecache yum install percona-xtrabackup.x86_64 -y
第二:備份數據庫數據庫
#指定mysql的配置文件,指定mysql的用戶,指定密碼,指定用於存放備份的路徑(注意:前提是my.cnf文件內指定了data的存放目錄) #注意:innobackupex 不支持mysql 5.1的innodb備份 [root@iptables ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql innobackupex --defaults-file=/etc/my.cnf --user=root --password /mnt/mysqlback
第二:prepare數據庫(預備份--apply-log)安全
#建立完的備份以後的數據還不能立刻用於還原,須要回滾未提交事務,前滾提交事務,讓數據庫文件保持一致性 innobackupex --defaults-file=/etc/my.cnf --user=root --password --apply-log /mnt/mysqlback/2018-05-15 #成功後會輸出,成功後備份能夠被用來還原數據庫了 #prepare的過程,實際上是讀取備份文件夾中的配置文件,而後innobackupex重作已提交事務,回滾未提交事務,以後數據就被寫到了備份的數據文件(innodb)中,並重建日誌文件 #--user-memory 指定prepare階段可以使用的內存大小,默認爲10MB,內存多則快
第三:恢復數據庫app
注意,還原是先關閉服務,若是服務是啓動的,那麼就不能還原到datadir,而且datadir 必須是爲空的,由於 innobackupex --copy-back 不會覆蓋已存在的文件工具
#innobackupex 使用 --copy-back 來還原備份(recovery) innobackupex --defaults-file=/etc/my.cnf --user=root --password --copy-back /mnt/mysqlback/2018-05-15 #innobackupex 會根據my.cnf的配置,將全部備份數據複製到my.cnf裏面指定的 datadir 路徑下 #若是恢復成功,則有以下提示
第四:修改datadir目的的權限,啓動數據庫線程
#默認狀況下是經過root用戶恢復數據,因此mysql數據文件夾目錄是root權限,須要修改成數據庫程序的全部者權限 chown -R mysql:mysql datadir
附:備份壓縮和流日誌
#使用流特性,須要指定--stream 選項,使用tar備份(推薦方法) innobackupex --defaults-file=/etc/my.cnf --user=root --password --stream=tar /mnt/mysqlback | gzip - > /mnt/mysqlback.tar.gz #可用參數,--parallel=4 加速備份,這個選項指定xtrabackup備份文件的線程數 #解壓提取tar流文件,必須加 -i 參數,否則不可以使用 tar -xizf /mnt/mysqlback.tar.gz
示例,備份mysql的boke數據庫,並恢復
1:對mysql的boke庫進行備份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=111222 --database=boke --stream=tar /mnt/ 2>/mnt/back_data/boke.log | gizp 1>/mnt/back_data/boke.tar.gz #說明 2>/mnt/back_data/boke.log #innobackupex的輸出信息,寫入日誌文件,便於查閱覈對,備份是否成功 1>/mnt/back_data/boke.tar.gz #打包壓縮存儲到該文件中
2:此處能夠寫一個腳本備份(back.sh)
#!/bin/sh echo "開始備份----"`date` LOG=boke_`date +%F-%H%M`.log STR=boke_`date +%F-%H%M`.tar.gz innobackupex --defaults-file=/etc/my.cnf --user=root --password=111222 --database=boke --stream=tar /mnt/back_data/ 2>/mnt/back_data/$LOG | gzip 1>/mnt/back_data/$STR echo "備份完成---"`date`
3:數據恢復
1:先中止數據庫 2:解壓 tar -izxvf /mnt/back_data/boke.tar.gz -C /mnt/back_data/db/ #沒有db,須要mkdir /mnt/back_data/db/ 建立哦 3:恢復(確保datadir爲空) innobackupex --defaults-file=/etc/my.cnf --user=root --password=111222 --apply-log /mnt/back_data/db/ innobackupex --defaults-file=/etc/my.cnf --user=root --password=111222 --copy-back /mnt/back_data/db/ 4:賦權 chown -R mysql:mysql /var/lib/mysql #這個目錄是my.cnf 裏面指定的datadir路徑 5:啓動數據庫
本文地址:https://www.linuxprobe.com/mysqldump-xtrabackup-linux.html