久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL如何實現備份與恢復

136次閱讀
沒有評論

共計 2875 個字符,預計需要花費 8 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 MySQL 如何實現備份與恢復,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

實驗環境:RHEL5.8 ,SElinux 關閉,MySQL 是 tar 包初始化安裝版本 5.5.28

一. 測試環境準備

1.1 mysql 的安裝就不說了,見 http://www.linuxidc.com/Linux/2012-04/58990.htm

1.2 編緝 /etc/my.cnf 把二進制日志存放目錄改到其它非數據目錄,innodb 每表一文件

建立一目錄用于存放二進制日志

mkdir /mybinlog

chown mysql:mysql /mybinlog

修改 my.cnf

vim /etc/my.cnf

log-bin=/mybinlog/mysql-bin ## 二進制日志目錄及文件名前綴

innodb_file_per_table = 1 ## 啟用 InnoDB 表每表一文件,默認所有庫使用一個表空間

啟動 mysqld

service mysqld start

1.3 創建一個測試庫與測試表

mysql create database laoguang;

mysql use laoguang;

mysql create table linux (id tinyint auto_increment primary key,name char(10));

mysql insert into linux (name) values (apache),(nginx),(php

1.4 創建用于存放備份的目錄

mkdir /myback

chown -R mysql:mysql /myback

二, 用 mysqldump 實現備份

2.1 mysqldump 用來溫備,所以我們得為所有庫加讀鎖, 并且滾動一下二進制日志,并記錄當前二進制文件位置

mysqldump –all-databases –lock-all-tables –routines –triggers –master-data=2 \

–flush-logs /myback/2012-12-3.19-23.full.sql

–all-tables 備份所有庫

–lock-all-tables 為所有表加讀鎖

–routinge 存儲過程與函數

–triggers 觸發器

–master-data=2 在備份文件中記錄當前二進制日志的位置,并且為注釋的,1 是不注釋掉在主從復制中才有意義

–flush-logs 日志滾動一次

查看有沒有備份成功,有沒有啟用新二進制的日志,查看備份的文件中有沒有記錄完整備份后二進制的位置

備份二進制日志

cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001

2.2 模擬數據庫意外損壞,測試完整恢復

rm -rf /data/mydata/*

rm -rf

/mybinlog/*

初始化 mysql 并啟動 mysql

cd /usr/local/mysql

./scripts/mysql_install_db –user=mysql–datadir=/data/mydata

rm -rf /mybinlog/* ## 因為我們不是全新初始化的,可能會有報錯的二進制日志,我們不需要

service mysqld start ## 啟動時會重新生成新的二進制日志的

 恢復到備份狀態, 備份前先關閉對恢復過程的二進制日志記錄,因為記錄恢復語句是毫無意義的 

mysql set global sql_log_bin=0;

mysql /myback/2012-12-3.19-23.full.sql ## 如果有賬號密碼記的 -u - h 哦

打開記錄并查看恢復狀況

mysql set global sql_log_bin=1;

mysql show databases;

打開二進制記錄并查看恢復狀況

mysql set global sql_log_bin=1;

mysql show databases;

2.3 模擬一種場景,我往 linux 表中新添加了數據,然后不小心將這個表刪了,我們要恢復到刪除之前的狀態,并且新加的數據還存在。

2.3.1 新增數據

mysql use laoguang;

mysql insert into linux (name) values (haddop), (mysql

mysql drop table linux;

mysql show master status; ## 查看當前所在二進制日志中的位置

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000001 | 9005 | | |

+——————+———-+————–+——————+

我們先恢復完整數據,再恢復完整備份后到刪除之前的數據,對應二進制日志就是完整備份后的二進制日志位置到刪除表之前的位置

2.3.2 先恢復完整備份,同樣恢復過程不要記錄日志

mysql set global sql_log_bin=0;

mysql /myback/2012-12-3.19-23.full.sql

2.3.3 查看刪除表時的記錄位置

mysqlbinlog /mybinlog/mysql-bin.000001

# at 8893

#121202 14:14:07 server id 1 end_log_pos 9005 Query thread_id=5exec_time=0error_code=0

SET TIMESTAMP=1354428847/*!*/;

DROP TABLE `linux` /* generated by server */

/*!*/;

DELIMITER ;

# End of log file

2.3.4 由上圖可知刪除是在 8893 時做的,將二進制文件中完整備份到刪除表之前的記錄導出

mysqlbinlog –stop-position=8893 /mybinlog/mysql-bin.000001 /tmp/change.sql

–start-position 指定從哪開始導出二進制日志

–stop-position 指定到哪結束

–start-datetime 從哪個時間開始格式如 2005-12-25 11:25:56

–stop-datetime 到哪個時間結束

由于這個二進制日志是我們完整恢復后才啟用的,所以我們直接從頭開始即可,如果你的二進制日志很多,請查看完整備份中記錄的備份時的位置,從那開始到刪除之前即可

將這段二進制記錄應用到 mysql 的庫中

mysql /tmp/change.sql

進入數據庫查看數據有沒有恢復

mysql select * from linux;

看完了這篇文章,相信你對“MySQL 如何實現備份與恢復”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計2875字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 左权县| 红桥区| 浮梁县| 肥乡县| 浦北县| 陆河县| 曲麻莱县| 曲阳县| 公安县| 饶平县| 江北区| 杭州市| 绥阳县| 民乐县| 沛县| 宁陕县| 金门县| 名山县| 嘉禾县| 伊金霍洛旗| 永吉县| 五华县| 汽车| 开鲁县| 旬阳县| 海林市| 佛冈县| 蕲春县| 华容县| 社旗县| 彝良县| 三亚市| 凌源市| 金昌市| 宁陕县| 吉水县| 新巴尔虎左旗| 瑞昌市| 黑水县| 绥化市| 海阳市|