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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 大表 备份_MySQL大表备份的简单方法

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

MySQL大表備份是一個我們常見的問題,下面就為您介紹一個MySQL大表備份的簡單方法,希望對您學習MySQL大表備份方面能有所幫助。

這里所說的大表是超過4G以上的表,我目前見到過最大為60多G的單表,對于這種表每天一個全備可以說是一件很痛苦的事。

那么有沒有辦法,可以實現一個全備加增量的備份呢。

答案當然是有的。

在常規環境直可以用全備加binlog一同保存。

這種環境大多可以用一個Slave上進行備份操作。

思路:

先停止Slave的同步,刷新buffer,對于Innodb 如果想直接拷貝還需要把innodb_max_dirty_pages_pct這個值置為零,然后在執行一次flush tables;

就可以cp了。如果是Dump出來可以這這樣做。

這個方案目前來看也是比較完美的,但一個并發力度大的應用一天的Binlog有可能能達到50G-60G,這樣的系統開Binlog可以說是對系統的IO性能及整體性能都有早影響。

另一種方案就是基于表的上數據的羅輯變化進行備份。

主體思想:全備加邏輯備份。

邏輯備份:當有數據插入時,利用觸發器同時寫入另一個表,當數據更新時,我們同時記錄一下,更新后的數據情況到另一個表。

當有刪除操作時,只需要記錄一下,刪除的主建ID就行。

例子:

要備份的表:

CREATE?TABLE?`wubx`?(??`id`?int(11)?NOT?NULL?auto_increment,

`user_id`?int(11)?NOT?NULL?default?‘0‘,

`friend_id`?int(11)?NOT?NULL?default?‘0‘,

`dir_id`?int(11)?NOT?NULL?default?‘0‘,

`created`?int(11)?NOT?NULL?default?‘0‘,

UNIQUE?KEY?`id`?(`id`))?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;

對于這個表我們需要建一個記錄有新數據變化的表為:

mysql>?create?table?wubx_ii?like?wubx;

Query?OK,?0?rows?affected?(0.00?sec)

mysql>?create?table?wubx_uu?like?wubx;

Query?OK,?0?rows?affected?(0.00?sec)

mysql>?create?table?wubx_dd?(?id?int(11));

Query?OK,?0?rows?affected?(0.00?sec)

建立相應的觸發程器

記錄insert的操作:

delimiter?//

create?trigger?wubx_ii?after?insert?on?wubx?for?each?row?begin?insert?into?wubx_ii?set?id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created;?end//

記錄update的操作:

create?trigger?wubx_uu?after?update?on?wubx?for?each?row?begin?replace?into?wubx_uu?set?id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created;?end//

記錄刪除的操作:

create?trigger?wubx_dd?after?delete?on?wubx?for?each?row?begin?insert?into?wubx_dd?values(old.id);?end//

delimiter?;

操作:

先備份原始表wubx里的數據:

進行:

insert?into?wubx?values(”,1,10,1,1198464252);

insert?into?wubx?values(”,1,11,1,1198464252);

insert?into?wubx?values(”,1,2,1,1198464252);

insert?into?wubx?values(”,2,10,1,1198464252);

insert?into?wubx?values(”,2,12,1,1198464252);

insert?into?wubx?values(”,3,12,1,1198464252);

update?wubx?set?dir_id=5?where?user_id=3;

update?wubx?set?dir_id=4?where?user_id=3;

delete?from?wubx?where?user_id=2?and?friend_id=12;

現在要實現增量備份:

取出insert的操作:

mysql?-e?”?select?concat(‘replace?into?wubx?set?id=’,id,’,user_id=’,user_id,’,friend_id=’,friend_id,’,dir_id=’,dir_id,’,created=’,created,’;‘)?from?wubx_ii;”>>backup_ii.sql

取出update的操作:

mysql?-e?”?select?concat(‘update?wubx?set?user_id=’,user_id,’,friend_id=’,friend_id,’,dir_id=’,dir_id,’,created=’,created,’?where?id=’,id,’;‘)?from?wubx_uu;”>>backup_uu.sql

取出delete的操作:

mysql?-e?“select?concat(‘delete?from?wubx?where?id=’,id,’;‘)?from?wubx_dd”>>backup_dd.sql

這樣利用這些邏輯的備份加是完畢備份恢復到當前恢復點就很容易了。這里不演示。

這個操作最好用一個程序完成,當取完羅輯備份后,做一個標記點去清楚備份完的數據,以保證,邏輯記錄表里的數據量比較少是正確的。

原文:http://www.cnblogs.com/java-rookie/p/3927030.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql 大表 备份_MySQL大表备份的简单方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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