日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库备份总结_MySQL数据库备份总结

發布時間:2023/12/4 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库备份总结_MySQL数据库备份总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個企業的正常運行,數據的完整性是最關鍵的;所以我們需要在工作中要很熟練的掌握數據的備份與恢復方法;下面是對Mysql數據庫備份的三種方法總結,希望對大家會有所幫助

備份開始前的工作環境準備:

1、創建用于保存二進制日志文件的目錄

#?mkdir?/mybinlog

#?chown?mysql.mysql?/mybinlog

2、修改配置文件

#?vim?/etc/my.cnf

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

innodb_file_per_table=1啟用innoDB表

datadir=?/mydata/data????指定數據庫的目錄

3、為備份數據庫創建存放點

#?mkdir?/mybackup

#?chown?-R?mysql.mysql?/mybackup

4、啟動mysql服務器

#?service?mysqld?start

5、插入需要備份的數據庫

#?mysql

一、使用mysqldump工具完成完全備份+增量備份基于mysqldump通常就是完整備份+二進制日志來進行恢復數據

1.1、mysqldump用來溫備份,首先需要為所有庫加讀鎖,并且滾動一下二進制日志,記錄當前二進制文件位置

#?mysqldump?--all-databases?--lock-all-tables?--routines?--triggers--master-data=2

--flush-logs>/mybackup/alldatabase.sql

解釋各個選項的意義:

--all-databases?備份所有數據庫

--lock-all-tables?為所有表加鎖

--routines?存儲過程與存儲函數

--triggers?觸發器

--master-data=2以change?master?to的方式記錄位置,但默認為被注釋

--flush-logs??執行日志滾動

1.2、備份二進制日志

#?cp?/mybinlog/mysql-bin.000001?/mybackup/alldatabase.000001

1.3、模擬數據庫意外損壞,利用完全備份實現數據庫的恢復

#?rm?-rf?/mydata/data/*

#?rm?-rf?/mybinlog/*

1.4、初始化mysql并啟動服務器

#?cd?/usr/local/mysql/

#?./scripts/mysql_install_db?--user=mysql--datadir=/mydata/data

1.5、刪除二進制日志,啟動服務

#?rm?-rf?/mybinlog/*

#?netstat?-tnlp?查看啟動的mysql進程號

tcp????????0??????0?0.0.0.0:3306???????????0.0.0.0:*???????????LISTEN??????2523/mysql

#?kill?2523??(注意,如果在備份之前mysql服務是開啟的,重啟是不成功的,需要把這個進程先kill掉)

#?service?mysqld?restart

1.6、恢復到備份狀態,導入備份的數據庫文件:

#?mysql

2、模擬往students表中添加數據,添加完成后不小心將表刪除了,我們要恢復到刪除之前的狀態,并且新加的數據還要存在

2.1、往students表中添加數據

mysql>use?jiaowu;

mysql>insert?into?students?(Name,Age,Gender)?values?('hadoop',22,'M');

2.2、模擬一下,不小心將表刪除了

mysql>drop?tables?students;

2.3、查看一下二進制日志文件的位置

mysql>show?master?status;

+------------------+----------+--------------+------------------+

|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|

+------------------+----------+--------------+------------------+

|?mysql-bin.000002?|???520351?|??????????????|??????????????????|

+------------------+----------+--------------+------------------+

2.4、先恢復完整數據(恢復過程不要記錄在日志中)

mysql>set?globalsql_log_bin=0;

#?mysql?

2.5、查看刪除表時的記錄位置

#?mysqlbinlog?/mybinlog/mysql-bin.000002??內容如下:

#?at?520084

#130501?16:44:08?server?id?1 end_log_pos?520212?Query?thread_id=2exec_time=0error_code=0

use?jiaowu/*!*/;

SET?TIMESTAMP=1367397848/*!*/;

insert?into?students?(Name,Age,Gender)?values?('hadoop',22,'M')

/*!*/;

#?at?520212

#130501?16:44:08?server?id?1??end_log_pos?520239????Xid=308

COMMIT/*!*/;

#?at?520239 刪除命令在這個時刻開始執行的

#130501?16:45:37?server?id?1?end_log_pos?520351?Query thread_id=2exec_time=0error_code=0

SET?TIMESTAMP=1367397937/*!*/;

DROP?TABLE?`students`?/*?generated?by?server?*/

/*!*/;

DELIMITER?;

#?End?of?log?file

2.5、將二進制文件中完整備份到刪除表之前的記錄導出

#?mysqlbinlog--stop-position=520239/mybinlog/mysql-bin.000002>/root/change.sql

解釋:

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

--stop-position?指定到哪結束

--start-datetime?從哪個時間開始

--stop-datetime?到哪個時間結束

2.6、將改變的數據庫日志導入到mysql庫中

#?mysql

2.7、見證奇跡的時刻數據庫恢復成功,并且插入的數據也還原回來了

mysql>select?Name,Age,Gender?from?students?whereName='hadoop';

+--------+------+--------+

|?Name???|?Age??|?Gender?|

+--------+------+--------+

|?hadoop?|???22?|?M??????|

+--------+------+--------+

二、select命令也能完成邏輯備份比mysqldump更節約空間,速度更快,但比mysqldump用起來要麻煩,并且備份出來的數據都是純文本信息,沒有額外的開銷空間,適合備份某張表模擬備份一張表

1、備份出來,保存在某個目錄下,但需要注意的是,這個目錄下的文件的具有權限,當登錄到mysql時需要具有執行的權限

mysql>select?*?into?outfile?'/tmp/tutor.txt'?from?tutors;

保存為.txt格式:因為它是純文本格式的,保存的是表格式的信息,如下所示:

#?cat?/tmp/tutor.txt

1???HongQigong??M???93

2???HuangYaoshi?M???63

3???Miejueshitai????F???72

4???OuYangfeng??M???76

5???YiDeng??M???90

6???YuCanghai???M???56

7???Jinlunfawang????M???67

8???HuYidao?M???42

9???NingZhongze?F???49

2、恢復數據庫需要創建一個空表,模仿原來的表創建

mysql>create?table?tutor?like?tutors;

把原來的表刪除了

mysql>drop?tutors;

mysql>load?data?infile?'/tmp/tutor.txt'?into?table?tutor;

驗證:

mysql>select?*?from?tutor;

+-----+--------------+--------+------+

|?TID?|?Tname????????|?Gender?|?Age??|

+-----+--------------+--------+------+

|???1?|?HongQigong???|?M??????|???93?|

|???2?|?HuangYaoshi??|?M??????|???63?|

|???3?|?Miejueshitai?|?F??????|???72?|

|???4?|?OuYangfeng???|?M??????|???76?|

|???5?|?YiDeng???????|?M??????|???90?|

|???6?|?YuCanghai????|?M??????|???56?|

|???7?|?Jinlunfawang?|?M??????|???67?|

|???8?|?HuYidao??????|?M??????|???42?|

|???9?|?NingZhongze??|?F??????|???49?|

+-----+--------------+--------+------+

當然用select也可以把表中符合條件的語句備份出來,這里不再做演示了,很簡單。

這種方法適合于某長表的備份,但不會記錄到二進制日志中

三、利用LVM快照從物理角度實現幾乎熱備的完全備份,配合二進制日志備份實現增量備份,進而實現數據庫的備份。用lvm的快照來備份速度是非常快的,而且幾乎熱備,恢復也很快速,操作也簡單,完整恢復后再將相應二進制恢復即可。前提:

1、數據文件要在邏輯卷上

2、此邏輯卷所在卷組必須有足夠空間使用快照卷

3、數據文件和事務日志要在同一個邏輯卷上

步驟:

1、啟動事務

mysql>start?transaction;

模擬啟動事務時能否施加鎖

mysql>insert?into?tutor?(Tname)?values?('stu001');

2、打開會話,施加讀鎖,鎖定所有表,此時別人是不能執行命令的(不能往數據庫中插入數據)

mysql>flush?tables?with?read?lock;

mysql>flush?logs;

查看一下二進制日志的位置:

mysql>show?master?status;

+------------------+----------+--------------+------------------+

|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|

+------------------+----------+--------------+------------------+

|?mysql-bin.000003?|??????107?|??????????????|??????????????????|

+------------------+----------+--------------+------------------+注意:執行表鎖定時,一定不要退出

3、通過另一個終端,保存二進制日志文件及相關信息位置

創建備份路徑

#?mkdir?/backup/

#?mysql?-e?'show?master?status\G'?>/backup/master-`date?+%F`.info

如數據庫有用戶名和密碼要加?-u?-p

4、創建快照卷

#?lvcreate?-L?50M?-s?-p?r?-n?mydata-snap?/dev/myvg/mydata

5、釋放鎖

mysql>unlock?tables;

插入兩行數據:

mysql>setsql_log_bin=1;

mysql>insert?into?tutor?(Tname)?values?('stu002');

mysql>insert?into?tutor?(Tname)?values?('stu003');

查看二進制日志文件的位置

mysql>show?master?status;

+------------------+----------+--------------+------------------+

|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|

+------------------+----------+--------------+------------------+

|?mysql-bin.000003?|??????573?|??????????????|??????????????????|

+------------------+----------+--------------+------------------+

6、掛載快照卷,備份

#?mount?/dev/myvg/mydata-snap?/mnt/?-o?ro

查看:

#?ls?/mnt/

data??lost+found

創建備份目錄

#?mkdir?/backup/full-backup-`date?+%F`

#?cp?/mnt/data/*?/backup/full-backup-2013-05-06/?-a

7、卸載/mnt,刪除快照卷

#?umount?/mnt/

#?lvremove?--force?/dev/myvg/mydata-snap

8、增量備份二進制日志

首先刪除二進制日志文件,對我們沒有太大用處

#?rm?-rf?/backup/full-backup-2013-05-06/mysql-bin.*?-f

現在模擬數據庫被格式化

格式化之前先把二進制日志備份出來

#?mysqlbinlog???/mydata/data/mysql-bin.000003>/backup/`date?+%F`.sql

關閉mysql服務器

#?service?mysqld?stop

#?rm?-rf?/mydata/data/*

#?cp?/backup/full-backup-2013-05-06/*?/mydata/data/?-a

mysql>use?jiaowu;

Database?changed

mysql>select?*?from?tutor;

+-----+--------------+--------+------+

|?TID?|?Tname????????|?Gender?|?Age??|

+-----+--------------+--------+------+

|???1?|?HongQigong???|?M??????|???93?|

|???2?|?HuangYaoshi??|?M??????|???63?|

|???3?|?Miejueshitai?|?F??????|???72?|

|???4?|?OuYangfeng???|?M??????|???76?|

|???5?|?YiDeng???????|?M??????|???90?|

|???6?|?YuCanghai????|?M??????|???56?|

|???7?|?Jinlunfawang?|?M??????|???67?|

|???8?|?HuYidao??????|?M??????|???42?|

|???9?|?NingZhongze??|?F??????|???49?|

+-----+--------------+--------+------+

將二進制日志文件導入

mysql>source?/backup/2013-05-05.sql

mysql>select?*?from?tutor;

+-----+--------------+--------+------+

|?TID?|?Tname????????|?Gender?|?Age??|

+-----+--------------+--------+------+

|???1?|?HongQigong???|?M??????|???93?|

|???2?|?HuangYaoshi??|?M??????|???63?|

|???3?|?Miejueshitai?|?F??????|???72?|

|???4?|?OuYangfeng???|?M??????|???76?|

|???5?|?YiDeng???????|?M??????|???90?|

|???6?|?YuCanghai????|?M??????|???56?|

|???7?|?Jinlunfawang?|?M??????|???67?|

|???8?|?HuYidao??????|?M??????|???42?|

|???9?|?NingZhongze??|?F??????|???49?|

|??10?|?stu001???????|?M??????|?NULL?|

|??11?|?stu002???????|?M??????|?NULL?|

|??12?|?stu003???????|?M??????|?NULL?|

+-----+--------------+--------+------+

mysql>setsql_log_bin=1;

mysql>show?master?status;

+------------------+----------+--------------+------------------+

|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|

+------------------+----------+--------------+------------------+

|?mysql-bin.000003?|??????107?|??????????????|??????????????????|

+------------------+----------+--------------+------------------+

恢復到了還原前的狀態

這就是邏輯卷實現的一次完全備份

如果在完整備份后MySQL出現故障,與mysqldump一樣,先恢復上次的完整備份,再利用二進制日志恢復,找到完整備份時的二進制位置,把從那時到故障前的日志用mysqlbinlog導出來,然后導入到MySQL中就可以了。

總結

以上是生活随笔為你收集整理的mysql数据库备份总结_MySQL数据库备份总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。