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

首頁 > 服務器 > Linux服務器 > 正文

PHP程序員玩轉Linux系列 備份還原MySQL

2024-09-05 23:03:44
字體:
來源:轉載
供稿:網友

前幾天有個新聞,說是gitlab的工程師把數據文件給誤刪了,搞了個大事件,很多人都去圍觀了.備份工作應該在最開始的時候就要做,否則就會失去最佳時機,為了保證我的數據是安全的,因此我要搞備份了.備份分為邏輯備份和物理備份,邏輯備份是導sql,物理備份是基于文件的,這兩種我都搞一下.

開啟binlog

首先第一件事是打開binlog日志,編輯mysql配置文件開啟一下,默認是關閉的.編輯 /etc/my.cnf ,log-bin=mysqlbinlog =號后面的是binlog日志的名字,默認生成在數據目錄里面,重啟一下mysql服務 , service mysqld restart

MySQL,備份,還原

查看mysql的數據目錄 , /var/lib/mysql ,mysqlbinlog.000001等文件就是binlog日志文件.

MySQL,備份,還原

添加一些測試數據

建數據庫,建表和插入一些記錄,用于測試,表的存儲引擎選擇innodb,因為這個引擎容易測出來問題

#建庫create database entmail charset=utf8; #建表,存儲引擎選用innodbcreate 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');

MySQL,備份,還原

小數據量使用mysqldump邏輯備份

第一想到的備份方式是使用mysqldump,導出sql語句,恢復的時候就再次導入sql語句.

針對我的數據庫,用戶名root 密碼空,我放sql文件的位置是/home/shihan1/mysql/sqls/ ,備份所有數據庫,我的導出命令是下面這句

 

復制代碼 代碼如下:
mysqldump -uroot --all-databases > /home/shihan1/mysql/sqls/all.sql

 

此時,我誤刪了數據庫entmail , drop database entmail

MySQL,備份,還原

不著急,馬上進行恢復,執行以下導入命令,數據庫立刻就回來了,注意一個是mysqldump命令,一個是mysql命令

 

復制代碼 代碼如下:
mysql -uroot < /home/shihan1/mysql/sqls/all.sql

 

為啥不能用拷貝數據目錄的方式備份

有的同學會使用直接拷貝數據目錄的方式備份,我也測試了一下,實際證明這種方式是不正確的.我用tar命令把數據目錄整個打包搬走,然后刪除整個數據目錄,再搬回來.

MySQL,備份,還原

因為我把mysql的那幾張用戶表啥的都刪了,mysql會進行重新初始化

MySQL,備份,還原

我把數據文件再搬回來,然后進mysql看看,結果是這樣的,告訴我user表不存在了,這張表是innodb引擎的,所以不能使用這種方式,幸虧我有前面的邏輯備份,從新導一下,數據又回來了.

 

復制代碼 代碼如下:
mysql -uroot < /home/shihan1/mysql/sqls/all.sql

 

MySQL,備份,還原

使用第三方軟件percona-xtrabackup實現物理備份

可以實現物理備份的軟件與很多,mysql也有企業版備份工具,但是貌似是收費的,percona-xtrabackup這個開源軟件可以很好的實現全量備份和增量備份.

前往這個地址下載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/

#下載rpmwget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel6/x86_64/percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm#安裝rpmrpm -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

開始備份了

當前數據:

MySQL,備份,還原

1. 我先把所有數據全量備份一次,后面那個目錄是備份保存的目錄,執行完成后出現innobackupex: completed OK!代表成功,生成的備份文件2017-02-24_17-47-55

 

復制代碼 代碼如下:
innobackupex --user=root /home/shihan1/mysql/backups/

 

MySQL,備份,還原

2. 添加幾條新數據進去,現在的數據情況

insert into user values(null,'shihan4');insert into user values(null,'shihan5');

MySQL,備份,還原

3. 增量備份一次,就多了一個參數--incremental , 增量備份生成的文件是 2017-02-24_17-51-32 , 數據的大小也是不一樣的

 

復制代碼 代碼如下:
innobackupex --user=root --incremental /home/shihan1/mysql/backups/

 

MySQL,備份,還原

MySQL,備份,還原

4. 此時發生災變,我把數據目錄給刪了!rm -rf /var/lib/mysql/* ,mysql已經連不上了

MySQL,備份,還原

5. 抓緊恢復數據 , 準備全量備份文件 , 合并增量備份文件 , 執行恢復

#準備全量備份文件innobackupex --apply-log --redo-only /home/shihan1/mysql/backups/2017-02-24_17-47-55/#合并增量備份文件,注意看目錄名#如果有多次增量備份,就多次執行 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/#執行恢復innobackupex --copy-back /home/shihan1/mysql/backups/2017-02-24_17-47-55

MySQL,備份,還原

6. 數據已經回來了,重新修改一下數據文件的屬組和屬主chown mysql:mysql -R /var/lib/mysql/* , 重啟一下mysql ,數據全部恢復

MySQL,備份,還原

MySQL,備份,還原

下一篇定時執行備份腳本

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗田县| 毕节市| 兰坪| 巴里| 康定县| 上蔡县| 芜湖县| 博白县| 宣汉县| 灵璧县| 宜城市| 临清市| 黑山县| 太原市| 蓬安县| 灵寿县| 中阳县| 彭阳县| 什邡市| 安新县| 西充县| 禄丰县| 乌拉特前旗| 广宗县| 仙居县| 淄博市| 叙永县| 慈利县| 广汉市| 利川市| 隆昌县| 安化县| 新建县| 吴桥县| 汶川县| 绥芬河市| 江北区| 务川| 长子县| 永和县| 桃园市|