溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL基操---各類備份與索引詳解

發(fā)布時間:2020-07-12 16:31:02 來源:網(wǎng)絡(luò) 閱讀:6163 作者:一介余民 欄目:MySQL數(shù)據(jù)庫

 

備份

MySQL服務(wù)實例運行期間,意外的停電,硬盤損壞,還有一些誤操作、服務(wù)器宕機(jī)等情況。這個時候如何確保數(shù)據(jù)庫能夠最大程度地恢復(fù)到'正確'的狀態(tài)呢?

對于數(shù)據(jù)庫管理人員來說,防止數(shù)據(jù)丟失最簡單的方法就是:對原始數(shù)據(jù)定期進(jìn)行備份,創(chuàng)建數(shù)據(jù)副本。但數(shù)據(jù)與預(yù)期發(fā)生不一致情況,然后使用備份的數(shù)據(jù)恢復(fù)數(shù)據(jù)。對于MySQL來說,創(chuàng)建數(shù)據(jù)副本的常用方法有三種

創(chuàng)建數(shù)據(jù)副本的方法

1、數(shù)據(jù)備份:

由MySQL日志系統(tǒng)前一篇博客我們知道數(shù)據(jù)庫的全部數(shù)據(jù)都以文件的形式,存儲在硬盤上,那我們就可以直接備份MySQL的所有數(shù)據(jù)目錄下的文件就能夠達(dá)到目的。因此在開啟MySQL服務(wù)的時候要設(shè)計好各種數(shù)據(jù)文件以及日志文件的存放位置,以方便能夠快速備份。另外備份的時候最好能夠備份到其他的機(jī)器上。

2、使用二進(jìn)制日志:

上面的【數(shù)據(jù)備份方法】屬于物理備份,粒度較粗,不能實現(xiàn)更細(xì)粒度的數(shù)據(jù)恢復(fù),特別是對于更新較為頻繁的系統(tǒng)。二進(jìn)制日志記錄了數(shù)據(jù)庫所有的更新操作,數(shù)據(jù)丟失時,可以通過完全備份進(jìn)行二進(jìn)制日志的重做,可以完成基于時間點或者操作點的恢復(fù),繼而實現(xiàn)數(shù)據(jù)庫更細(xì)粒度的恢復(fù)。

3、數(shù)據(jù)庫復(fù)制:

數(shù)據(jù)庫的復(fù)制實際上是通過二進(jìn)制日志預(yù)防數(shù)據(jù)丟失的,數(shù)據(jù)復(fù)制可以實現(xiàn)數(shù)據(jù)庫的異地備份和恢復(fù)。

邏輯備份與物理備份

按照備份后產(chǎn)生的副本文件是否可以編輯,可以將MySQL的備份方法分為邏輯備份和物理備份

1、邏輯備份:

使用邏輯備份是,數(shù)據(jù)庫管理員通常可以直接查看和編輯副本文件中的內(nèi)容。邏輯備份中產(chǎn)生的副本通常喲兩種情況。情形一:副本是SQL文件,該SQL文件中有crete table 和大量的inert 語句。情形二、副本是指定分隔符的文件,導(dǎo)入數(shù)據(jù)庫的時候再以指定分隔符切割數(shù)據(jù)導(dǎo)入即可。

2、物理備份:

物理備份產(chǎn)生的數(shù)據(jù)副本都是二進(jìn)制文件,常常不可編輯,例如數(shù)據(jù)庫的二進(jìn)制日志。

冷備份、溫備份、熱備份

數(shù)據(jù)備份期間,按照是否需要停止MySQL服務(wù)實例,可以將MySQL的數(shù)據(jù)恢復(fù)分為:冷備份、溫備份、熱備份。

1、冷備份:

冷備份是指停止MySQL服務(wù)的運行后在進(jìn)行數(shù)據(jù)備份,這種備份方法非常簡單,但是在服務(wù)繁忙的系統(tǒng)中,并不允許這樣做。

2、溫備份: 溫備份介于熱備份與冷備份之間,溫備份允許MySQL服務(wù)實例繼續(xù)運行,備份數(shù)據(jù)期間,溫備份借助讀鎖機(jī)制保證備份期間,沒有新的數(shù)據(jù)寫入。

完全備份、增量備份

按照副本文件的缺失程度可以將數(shù)據(jù)備份分為完全備份以及增量備份。

1、完全備份:

完全備份是一個完整的數(shù)據(jù)備份,僅僅依靠該副本文件就可以將數(shù)據(jù)庫恢復(fù)到某個正確的狀態(tài)。如果不借助熱備份工具,完全備份可能需要停止MySQL服務(wù)。此時MySQL將無法提供服務(wù),在真實的業(yè)務(wù)場景中,很少真正使用完全備份。

2、增量備份:

增量備份是指在完全備份的基礎(chǔ)上,對更新的數(shù)據(jù)進(jìn)行備份,恢復(fù)時需要借助完全備份產(chǎn)生的副本文件,目前,MySQL還沒有提供真正的增量備份工具。數(shù)據(jù)庫管理人員可以使用熱備份工具模擬實現(xiàn)增量備份,也可以通過重新執(zhí)行二進(jìn)制日志中的更新語句模擬實現(xiàn)增量備份。

3、熱備份:

熱備份是指不需要停止MySQL服務(wù)實例運行,備份數(shù)據(jù)的方法。如果數(shù)據(jù)庫的更新操作較為頻繁,在數(shù)據(jù)備份期間,備份過的數(shù)據(jù)可能早已發(fā)生變化,因此熱備份的實現(xiàn)方式較為復(fù)雜。

 

一、備份常用操作基本命令。

1、備份命令mysqldump格式

   格式:mysqldump -h主機(jī)名  -P端口 -u用戶名 -p密碼 –database 數(shù)據(jù)庫名 > 文件名.sql 

首先創(chuàng)建一個數(shù)據(jù)庫和表

mysql> create database mood;
Query OK, 1 row affected (0.00 sec)

mysql> use mood
Database changed

mysql> create table info (id int not null primary key auto_increment,name char(10) not null);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into info 
    -> (name)values('zhangsan'),('lisi');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select *from info;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+
2 rows in set (0.00 sec)

使用tar命令備份

[root@localhost opt]# tar jvcf /opt/mysql-.tar.xz /usr/local/mysql/data/
[root@localhost opt]# ls
allback.sql  back1.sql  mood.sql  mysql-2018-09-02.tar.xz  mysql-5.7.17  rh

備份單個MySQL數(shù)據(jù)庫到opt下。(后面出現(xiàn)的warning是因為我把密碼寫在了-P后面,如果不寫則進(jìn)行密碼交互)。

[root@localhost ~]# mysqldump -uroot -pabc123 mood > /opt/mood.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.




備份服務(wù)器上所有數(shù)據(jù)庫到opt下。

[root@localhost ~]# mysqldump -uroot -pabc123 --all-databases > /opt/allback.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.

 

多個數(shù)據(jù)庫同時備份(備份了mood和自帶的mysql兩個數(shù)據(jù)庫)

 


[root@localhost opt]# mysqldump -uroot -pabc123 --databases mood mysql > /opt/mood-mysql.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

備份數(shù)據(jù)庫中的表

[root@localhost opt]# mysqldump -uroot -pabc123 mood info > /opt/info.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

備份表結(jié)構(gòu)

[root@localhost opt]# mysqldump -uroot -pabc123 -d mood info > /opt/info1.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.


恢復(fù)表數(shù)據(jù)的兩種辦法

1再數(shù)據(jù)庫中執(zhí)行

mysql> use mood
Database changed

mysql> drop table info;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
Empty set (0.01 sec)

mysql> source /opt/info.sql;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_mood |
+----------------+
| info           |
+----------------+
1 row in set (0.00 sec)

2直接倒回表數(shù)據(jù)

[root@localhost opt]# mysql -uroot -pabc123 mood < /opt/info.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

不進(jìn)入數(shù)據(jù)庫使用-e直接查看數(shù)據(jù)表

[root@localhost opt]# mysql -uroot -pabc123 -e 'use mood;show tables;select *from info;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_mood |
+----------------+
| info           |
+----------------+
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+

 


 

MySQL 索引

MySQL索引的建立對于MySQL的高效運行是很重要的,索引可以大大提高M(jìn)ySQL的檢索速度。

打個比方,如果合理的設(shè)計且使用索引的MySQL是一輛蘭博基尼的話,那么沒有設(shè)計和使用索引的MySQL就是一個人力三輪車。

索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。

創(chuàng)建索引時,你需要確保該索引是應(yīng)用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。

實際上,索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄。

上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進(jìn)行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。

建立索引會占用磁盤空間的索引文件。

普通索引
創(chuàng)建索引

這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:


CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR類型,length可以小于字段實際長度;如果是BLOB和TEXT類型,必須指定 length。


修改表結(jié)構(gòu)(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
創(chuàng)建表的時候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);
刪除索引的語法
DROP INDEX [indexName] ON mytable;
唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:

創(chuàng)建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表結(jié)構(gòu)
ALTER table mytable ADD UNIQUE [indexName] (username(length))
創(chuàng)建表的時候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
);
使用ALTER 命令添加和刪除索引

有四種方式來添加數(shù)據(jù)表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創(chuàng)建索引的值必須是唯一的(除了NULL外,NULL可能會出現(xiàn)多次)。

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現(xiàn)多次。

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT ,用于全文索引。

以下實例為在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你還可以在 ALTER 命令中使用 DROP 子句來刪除索引。嘗試以下實例刪除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;
使用 ALTER 命令添加和刪除主鍵

主鍵只能作用于一個列上,添加主鍵索引時,你需要確保該主鍵默認(rèn)不為空(NOT NULL)。實例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可以使用 ALTER 命令刪除主鍵:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

刪除主鍵時只需指定PRIMARY KEY,但在刪除索引時,你必須知道索引名。

顯示索引信息

你可以使用 SHOW INDEX 命令來列出表中的相關(guān)的索引信息??梢酝ㄟ^添加 \G 來格式化輸出信息。

嘗試以下實例:

mysql> SHOW INDEX FROM table_name; \G
........


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI