MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程
表復(fù)制
mysql拷貝表操作我們會(huì)常常用到,下面就為您詳細(xì)介紹幾種mysql拷貝表的方式,希望對(duì)您學(xué)習(xí)mysql拷貝表方面能夠有所幫助。
假如我們有以下這樣一個(gè)表:
id username password ----------------------------------- 1 admin ************* 2 sameer ************* 3 stewart *************
CREATE TABLE IF NOT EXISTS `admin` ( `id` int(6) unsigned NOT NULL auto_increment, `username` varchar(50) NOT NULL default '', `password` varchar(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
1. 下面這個(gè)語句會(huì)拷貝表結(jié)構(gòu)到新表newadmin中。 (不會(huì)拷貝表中的數(shù)據(jù))
CREATE TABLE newadmin LIKE admin
2. 下面這個(gè)語句會(huì)拷貝數(shù)據(jù)到新表中。 注意:這個(gè)語句其實(shí)只是把select語句的結(jié)果建一個(gè)表。所以newadmin這個(gè)表不會(huì)有主鍵,索引。
CREATE TABLE newadmin AS ( SELECT * FROM admin )
3. 如果你要真正的復(fù)制一個(gè)表??梢杂孟旅娴恼Z句。
CREATE TABLE newadmin LIKE admin; INSERT INTO newadmin SELECT * FROM admin;
4. 我們可以操作不同的數(shù)據(jù)庫(kù)。
CREATE TABLE newadmin LIKE shop.admin; CREATE TABLE newshop.newadmin LIKE shop.admin;
5. 我們也可以拷貝一個(gè)表中其中的一些字段。
CREATE TABLE newadmin AS ( SELECT username, password FROM admin )
6. 我們也可以講新建的表的字段改名。
CREATE TABLE newadmin AS ( SELECT id, username AS uname, password AS pass FROM admin )
7. 我們也可以拷貝一部分?jǐn)?shù)據(jù)。
CREATE TABLE newadmin AS ( SELECT * FROM admin WHERE LEFT(username,1) = 's' )
8. 我們也可以在創(chuàng)建表的同時(shí)定義表中的字段信息。
CREATE TABLE newadmin ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ) AS ( SELECT * FROM admin )
MySQL大表備份
這里所說的大表是超過4G以上的表,我目前見到過最大為60多G的單表,對(duì)于這種表每天一個(gè)全備可以說是一件很痛苦的事。
那么有沒有辦法,可以實(shí)現(xiàn)一個(gè)全備加增量的備份呢。
答案當(dāng)然是有的。
在常規(guī)環(huán)境直可以用全備加binlog一同保存。
這種環(huán)境大多可以用一個(gè)Slave上進(jìn)行備份操作。
思路:
先停止Slave的同步,刷新buffer,對(duì)于Innodb 如果想直接拷貝還需要把innodb_max_dirty_pages_pct這個(gè)值置為零,然后在執(zhí)行一次flush tables;
就可以cp了。如果是Dump出來可以這這樣做。
這個(gè)方案目前來看也是比較完美的,但一個(gè)并發(fā)力度大的應(yīng)用一天的Binlog有可能能達(dá)到50G-60G,這樣的系統(tǒng)開Binlog可以說是對(duì)系統(tǒng)的IO性能及整體性能都有早影響。
另一種方案就是基于表的上數(shù)據(jù)的羅輯變化進(jìn)行備份。
主體思想:全備加邏輯備份。
邏輯備份:當(dāng)有數(shù)據(jù)插入時(shí),利用觸發(fā)器同時(shí)寫入另一個(gè)表,當(dāng)數(shù)據(jù)更新時(shí),我們同時(shí)記錄一下,更新后的數(shù)據(jù)情況到另一個(gè)表。
當(dāng)有刪除操作時(shí),只需要記錄一下,刪除的主建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;
對(duì)于這個(gè)表我們需要建一個(gè)記錄有新數(shù)據(jù)變化的表為:
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)
建立相應(yīng)的觸發(fā)程器
記錄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里的數(shù)據(jù):
進(jìn)行:
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;
現(xiàn)在要實(shí)現(xiàn)增量備份:
取出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
這樣利用這些邏輯的備份加是完畢備份恢復(fù)到當(dāng)前恢復(fù)點(diǎn)就很容易了。這里不演示。
這個(gè)操作最好用一個(gè)程序完成,當(dāng)取完羅輯備份后,做一個(gè)標(biāo)記點(diǎn)去清楚備份完的數(shù)據(jù),以保證,邏輯記錄表里的數(shù)據(jù)量比較少是正確的。
- MySQL中復(fù)制表結(jié)構(gòu)及其數(shù)據(jù)的5種方式
- mysql 復(fù)制記錄實(shí)現(xiàn)代碼
- mysql大表復(fù)制的具體實(shí)現(xiàn)
- mysql復(fù)制表的幾種常用方式
- MySQL復(fù)制表常用的四種方式小結(jié)
- MySQL級(jí)聯(lián)復(fù)制下如何進(jìn)行大表的字段擴(kuò)容
- mysql復(fù)制表的幾種常用方式總結(jié)
- mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫分離
- MySQL 復(fù)制表的方法
- MySQL復(fù)制表的三種方式(小結(jié))
- Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析
- Mysql將一個(gè)表中的某一列數(shù)據(jù)復(fù)制到另一個(gè)表中某一列里的方法
- MySQL不同表之前的字段復(fù)制
- Mysql數(shù)據(jù)表中的蠕蟲復(fù)制使用方法
- MySQL 復(fù)制表詳解及實(shí)例代碼
- MySQL查詢結(jié)果復(fù)制到新表的方法(更新、插入)
- mysql 復(fù)制表結(jié)構(gòu)和數(shù)據(jù)實(shí)例代碼
- MySQL中復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到新表中的操作教程
- mysql數(shù)據(jù)庫(kù)批量復(fù)制單條數(shù)據(jù)記錄
相關(guān)文章
Django restframework 框架認(rèn)證、權(quán)限、限流用法示例
這篇文章主要介紹了Django restframework 框架認(rèn)證、權(quán)限、限流用法,結(jié)合實(shí)例形式詳細(xì)分析了Djangorestframework 框架認(rèn)證、權(quán)限、限流的具體使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12python安裝oracle擴(kuò)展及數(shù)據(jù)庫(kù)連接方法
這篇文章主要介紹了python安裝oracle擴(kuò)展及數(shù)據(jù)庫(kù)連接方法,較為詳細(xì)的分析了Python下載oracle擴(kuò)展及Windows、Linux環(huán)境下的安裝步驟、操作技巧及注意事項(xiàng),需要的朋友可以參考下2017-02-02Python?Pandas實(shí)現(xiàn)將字符串格式轉(zhuǎn)為日期時(shí)間格式
日期和時(shí)間數(shù)據(jù)在數(shù)據(jù)分析和處理中起著關(guān)鍵作用,本文將詳細(xì)介紹如何使用Pandas將字符串格式的日期時(shí)間數(shù)據(jù)轉(zhuǎn)換為日期時(shí)間格式,需要的可以參考下2024-01-01python?數(shù)據(jù)保存為npy和npz格式并讀取的完整代碼
這篇文章主要介紹了python?數(shù)據(jù)保存為npy和npz格式并讀取,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07python 實(shí)現(xiàn)讀取csv數(shù)據(jù),分類求和 再寫進(jìn) csv
這篇文章主要介紹了python 實(shí)現(xiàn)讀取csv數(shù)據(jù),分類求和 再寫進(jìn) csv,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python爬蟲之驗(yàn)證碼篇3-滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)
本篇涉及到的驗(yàn)證碼為滑動(dòng)驗(yàn)證碼,不同于極驗(yàn)證,本驗(yàn)證碼難度略低,需要的將滑塊拖動(dòng)到矩形區(qū)域右側(cè)即可完成。對(duì)python爬蟲滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)感興趣的朋友跟隨小編一起看看吧2019-04-04python進(jìn)程池Pool中apply方法與apply_async方法的區(qū)別
這篇文章主要介紹了python進(jìn)程池Pool中apply方法與apply_async方法的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python繪制分形圖案探索無限細(xì)節(jié)和奇妙之美
本文將介紹如何使用Python繪制各種分形圖案,包括分形樹、科赫曲線、曼德博集合等。通過本文讀者可以了解分形圖案的基本概念和構(gòu)造方法,并學(xué)會(huì)使用Python繪制出各種精美的分形圖案。本文還提供了具體的代碼示例和實(shí)踐案例,幫助讀者更好地理解分形圖案的奇妙之美2023-04-04