PHP程序員玩轉Linux系列 備份還原MySQL
PHP程序員玩轉Linux系列文章:
1.PHP程序員玩轉Linux系列-怎么安裝使用CentOS
2.PHP程序員玩轉Linux系列-lnmp環(huán)境的搭建
3.PHP程序員玩轉Linux系列-搭建FTP代碼開發(fā)環(huán)境
前幾天有個新聞,說是gitlab的工程師把數(shù)據(jù)文件給誤刪了,搞了個大事件,很多人都去圍觀了.備份工作應該在最開始的時候就要做,否則就會失去最佳時機,為了保證我的數(shù)據(jù)是安全的,因此我要搞備份了.備份分為邏輯備份和物理備份,邏輯備份是導sql,物理備份是基于文件的,這兩種我都搞一下.
開啟binlog
首先第一件事是打開binlog日志,編輯mysql配置文件開啟一下,默認是關閉的.編輯 /etc/my.cnf ,log-bin=mysqlbinlog =號后面的是binlog日志的名字,默認生成在數(shù)據(jù)目錄里面,重啟一下mysql服務 , service mysqld restart
查看mysql的數(shù)據(jù)目錄 , /var/lib/mysql ,mysqlbinlog.000001等文件就是binlog日志文件.
添加一些測試數(shù)據(jù)
建數(shù)據(jù)庫,建表和插入一些記錄,用于測試,表的存儲引擎選擇innodb,因為這個引擎容易測出來問題
#建庫 create database entmail charset=utf8; #建表,存儲引擎選用innodb create table user( id int auto_increment primary key, name varchar(100) not null default '' ) engine=innodb; #插記錄 insert into user values(null,'shihan'); insert into user values(null,'shihan1'); insert into user values(null,'shihan2'); insert into user values(null,'shihan3');
小數(shù)據(jù)量使用mysqldump邏輯備份
第一想到的備份方式是使用mysqldump,導出sql語句,恢復的時候就再次導入sql語句.
針對我的數(shù)據(jù)庫,用戶名root 密碼空,我放sql文件的位置是/home/shihan1/mysql/sqls/ ,備份所有數(shù)據(jù)庫,我的導出命令是下面這句
此時,我誤刪了數(shù)據(jù)庫entmail , drop database entmail
不著急,馬上進行恢復,執(zhí)行以下導入命令,數(shù)據(jù)庫立刻就回來了,注意一個是mysqldump命令,一個是mysql命令
為啥不能用拷貝數(shù)據(jù)目錄的方式備份
有的同學會使用直接拷貝數(shù)據(jù)目錄的方式備份,我也測試了一下,實際證明這種方式是不正確的.我用tar命令把數(shù)據(jù)目錄整個打包搬走,然后刪除整個數(shù)據(jù)目錄,再搬回來.
因為我把mysql的那幾張用戶表啥的都刪了,mysql會進行重新初始化
我把數(shù)據(jù)文件再搬回來,然后進mysql看看,結果是這樣的,告訴我user表不存在了,這張表是innodb引擎的,所以不能使用這種方式,幸虧我有前面的邏輯備份,從新導一下,數(shù)據(jù)又回來了.
使用第三方軟件percona-xtrabackup實現(xiàn)物理備份
可以實現(xiàn)物理備份的軟件與很多,mysql也有企業(yè)版?zhèn)浞莨ぞ?但是貌似是收費的,percona-xtrabackup這個開源軟件可以很好的實現(xiàn)全量備份和增量備份.
前往這個地址下載rpm包,里面可以選擇版本,我最開始選的最新版2.4.6,結果報這個錯誤:Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0, or upgrade to InnoDB plugin.然后從新下了個2.0.0版是可以的.
https://www.percona.com/downloads/XtraBackup/
#下載rpm wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel6/x86_64/percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm #安裝rpm rpm -i percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm #安裝需要的依賴 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-MD5 rsync libev numactl
開始備份了
當前數(shù)據(jù):
1. 我先把所有數(shù)據(jù)全量備份一次,后面那個目錄是備份保存的目錄,執(zhí)行完成后出現(xiàn)innobackupex: completed OK!代表成功,生成的備份文件2017-02-24_17-47-55
2. 添加幾條新數(shù)據(jù)進去,現(xiàn)在的數(shù)據(jù)情況
insert into user values(null,'shihan4'); insert into user values(null,'shihan5');
3. 增量備份一次,就多了一個參數(shù)--incremental , 增量備份生成的文件是 2017-02-24_17-51-32 , 數(shù)據(jù)的大小也是不一樣的
4. 此時發(fā)生災變,我把數(shù)據(jù)目錄給刪了!rm -rf /var/lib/mysql/* ,mysql已經連不上了
5. 抓緊恢復數(shù)據(jù) , 準備全量備份文件 , 合并增量備份文件 , 執(zhí)行恢復
#準備全量備份文件 innobackupex --apply-log --redo-only /home/shihan1/mysql/backups/2017-02-24_17-47-55/ #合并增量備份文件,注意看目錄名 #如果有多次增量備份,就多次執(zhí)行 innobackupex --apply-log --redo-only 增量目錄 --incremental-dir 增量目錄 innobackupex --apply-log --redo-only /home/shihan1/mysql/backups/2017-02-24_17-47-55/ --incremental-dir /home/shihan1/ mysql/backups/2017-02-24_17-51-32/ #執(zhí)行恢復 innobackupex --copy-back /home/shihan1/mysql/backups/2017-02-24_17-47-55
6. 數(shù)據(jù)已經回來了,重新修改一下數(shù)據(jù)文件的屬組和屬主chown mysql:mysql -R /var/lib/mysql/* , 重啟一下mysql ,數(shù)據(jù)全部恢復
下一篇定時執(zhí)行備份腳本
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用FileZilla從Linux系統(tǒng)下載文件的方法
最近做項目,遇到這樣的需求,要求將Linux系統(tǒng)的的某個文件夾下載到我Windows系統(tǒng)某個文件夾里,怎么實現(xiàn)這個功能呢?下面腳本之家小編給大家?guī)砹耸褂肍ileZilla從Linux系統(tǒng)下載文件的方法,感興趣的朋友一起看看吧2018-07-07戴爾Dell?R630配置raid?安裝centos系統(tǒng)
這篇文章主要介紹了戴爾R630服務器配置raid后安裝centos7.9的方法,需要的朋友可以參考下2024-03-03linux系統(tǒng)下部署項目訪問報404錯誤的解決方法
這篇文章主要為大家詳細介紹了linux系統(tǒng)下部署項目訪問報404錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12