MySql定期備份資料到歷史表的解決方案

2021-09-26 14:38:03 字數 2194 閱讀 4497

前言

網際網路專案最大不瓶頸還是在於資料庫,80%的資料請求只針對20%的資料;特別是電商專案,體現的更為明顯,大量的資料請求,即使mysql在一主多從,讀寫分離,使用了elasticsearch、memcached、redis、mongodb等等後,在海量使用者請求的情況下,資料庫仍然無法支撐。

需求

**資料庫的訂單資料乙個月差不多就可以產生100w資料,訂單明細表資料更多,導致訂單表的資料量一直增大,即便有索引查詢已經慢。

解決方案

1、自動遷移程式定期遷移資料

優點;穩定,

缺點;難維護,並且頻繁的對訂單表移除歷史資料和對歷史表插入會導致大量的索引更新,這些操作會導致binglog增加,主從複製變慢,延遲加大

2、通過改表名生成歷史表,並生成乙個新的表來儲存資料

優點;速度快,高效,產生的binglog少,不影響主從複製

缺點;分表相比單錶來說,讀取資料麻煩

表複製

drop procedure if exists p_backupdatatable;  -- 刪除之前的儲存過程

create procedure `p_backupdatatable`(`copy_tablename` varchar(255))

begin

if exists (select * from information_schema.statistics where table_name = copy_tablename ) then

set @oldtable = concat(copy_tablename,"_",date_format(now(), '%y%m%d'));

if not exists (select * from information_schema.statistics where table_name = @oldtable ) then

set @beginnum=(select ifnull(auto_increment,0) as a from information_schema.tables where table_schema='datatablename' and table_name=copy_tablename limit 1);

set @newtable=concat("new_",copy_tablename);

call p_statement(concat("drop table if exists ",@newtable,";"));

call p_statement(concat("create table ",@newtable," like ",copy_tablename,";"));

call p_statement(concat("alter table ",@newtable," auto_increment=",@beginnum,";"));

call p_statement(concat("rename table ",copy_tablename," to ",@oldtable,",",@newtable," to ",copy_tablename,";"));

else

select '備份表已存在' as message;

end if;

else

select '複製的表不存在' as message;

end if;

end;

drop procedure if exists p_statement;

create procedure p_statement(in dynamic_statement text)

begin

set @dynamic_statement := dynamic_statement;

prepare prepared_statement from @dynamic_statement; -- 預編譯一條sql語句,並命名為prepared_statement

execute prepared_statement;-- 執行預編譯sql

deallocate prepare prepared_statement;-- 要解除分配生成的預準備語句 prepare

end ;

call p_backupdatatable('tbale_name');   -- 執行儲存過程

mysql備份資料 mysql 備份資料

1 備份命令 格式 mysqldump h主機名 p埠 u使用者名稱 p密碼 dbname tbname 檔名.sql 如果tbname不填,就是單個資料據的所有表 例如 mysqldump h 192.168.1.100 p 3306 uroot ppassword database cmdb d...

定期備份資料庫資料

場景 整庫備份,用exp方式,按周迴圈,備份檔案存在oracle下的db backup目錄,周一備份到成dbbackup 1.dmp,周二 dbbackup 2.dmp,週三 dbbackup 3.dmp,周四 dbbackup 4.dmp,周五 dbbackup 5.dmp,週六 dbbackup...

oracle定期備份資料庫

近期經常遇到oracle備份與還原的問題,總是做些重複的工作,想想有沒有一勞永逸的辦法呢?沒有做不到的,只有想不到的。先前總是用指令碼執行備份與還原工作,即exp與imp命令操作符。並且重複的在dos視窗中敲打命令,所以寫了乙個bat檔案,然後又將其加入到作業系統中的作業排程即計畫任務中,讓作業系統...