mysql 備份優化 Mysql資料庫優化備份恢復

2021-10-19 17:15:25 字數 2918 閱讀 3844

資料庫空間清理

刪除操作會帶來一些資料碎片,正是這些碎片在占用硬碟空間

mysql的 information_schema 資料庫中的tables 表記錄了mysql資料庫中每個表占用的空間、表記錄的行數,更新時間,說明等,這個表主要字段如下:

table_schema : 資料庫名

table_name:表名

engine:所使用的儲存引擎

tables_rows:記錄數,即表的行數

data_length:資料大小

index_length:索引大小

create_time:建立時間

update_time:最近更新時間

data_free:該引數與mysql碎片有關,如果是共享表空間,該欄位表示共享表空間的大小而非資料的大小。只有使用獨佔表空間時,該字段才表示該錶的剩餘空間;

說明:當mysql從列表中刪除一行內容,該段空間就會被留空。在一段時間內執行大量刪除操作後,往往會使碎片空間變得比儲存列表內容所使用的空間更大。

通俗的講:data_free欄位即為多佔的物理空間,通過『show table status』可以檢視指定表的data_free欄位,對應的值就是多占用的物理空間,drop表重建或是重新匯入可以釋放這部分空間。

1.檢視資料庫的表結構

use information_schema;

select table_name,table_rows from tables where table_schema = 'school' order by table_rows desc;

select sum(table_rows) from tables where table_schema = 'school';

select table_name,table_rows from tables where table_schema = 'school' order by table_rows desc limit 100;

select*from --查詢say表

order by id desc --按id列大小降序排列

limit 100,15 --從查詢的結果中取出一條資料,也就是從第100條開始取出15條資料

2.查詢表佔的空間大小

select table_name, (data_length+index_length)/1048576, table_rows from information_schema.tables where table_schema='dbname' and table_name='tablename(你的表名)';

開啟mysql命令列,輸入資料庫密碼,進入要操作的資料庫(命令列是:use databasename;),然後執行optimize table tablename;

生產案例:釋放表空間

思路1:

資料不刪除:備份表,drop表,匯入備份的表到資料庫;

show table status like 'oldtb%';  -->重點關注data_free欄位,對應的值就是多占用的物理空間,即碎片空間

mysqldump -uroot -p123456  mydb oldtb >/mnt/oldtb.sql  -->匯出可以恢復系統空間的**。

drop table oldtb;                        -->drop舊表釋放表空間

source /mnt/oldtb.sql;                -->匯出備份的表到資料庫。

show table status like 'oldtb%';  -->對比恢復前後的狀態,重點關注data_free欄位

該操作通過多次單錶操作,多次對錶進行備份和恢復,從而釋放了碎片空間,適用於不允許停機的業務。

如果系統業務允許在一段時間內停止服務,可以備份整個資料庫,然後清空,重建mysql資料根目錄,然後恢復整個資料庫。

思路2 :

刪除部分舊資料:適用於可以刪除部分舊資料的場景

create table if not exists `newtb` like `course` ;  -->新建newtb表,表結構同舊表

insert into newtb select * from oldtb where time > '***' and time<='***';

-->備份表的新資料,可以按時間段備份最近乙個月或半個月

drop table oldtb;                                        -->drop舊表釋放表空間

alter tables newtb rename to oldtb;           -->重新命名新錶「newdtb」

思路3:直接優化表:optimize table 表名;

select table_name,data_free,engine from information_schema.tables where table_schema='mydb';

-->檢視庫中各表data_free值,單位是位元組,data_free/1024/1024/1024即為理論上釋放後可以恢復空間g。

show table status like 'oldtb';                  -->單個表的data_free大小

mysql> optimize table  hellodb.students;

-->顯示不支援,實際上已進行重建和分析,空間已經**

資料庫備份

1、備份命令

格式:cmd 下 mysqldump -h主機名 -p埠 -u使用者名稱 -p密碼 --database 資料庫名 > d:\檔名.sql

例如: mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database cmdb > /data/backup/cmdb.sql;

2.恢復資料

use 資料庫;

source d:\mysql.sql

mysql備份優化 MySQL備份流程及優化

1.flush table with read lock 的認識 flush table with read lock 簡稱 ftwrl 有哪些問題 例如讓dba頭大的long query,ftwrl需要等待所有的表沒有引用後關閉所有表,long query 導致ftwrl無法執行成功。這也是經常備...

Xtrabackup定時備份mysql資料庫指令碼

定時備份mysql資料庫 指令碼內容 bin bash 備份計畫任務 每天凌晨1 30一次全量備份 每天間隔1小時一次增量備份 30 1 backup.sh full 00 backup.sh inc 恢復資料步驟 1 檢視備份日誌,找到全量備份和增量備份的關係 注意增量備份的順序 cat 2 全量...

linux shell指令碼備份mysql資料庫

bin sh 備份資料庫 mysql 使用者名稱密碼 mysql user root mysql pass root backup dir data backup mysql data dir data backup dbdata 查詢mysql中所有資料庫名字 sql string select ...