真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

備份

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括秀山土家族苗族網(wǎng)站建設(shè)、秀山土家族苗族網(wǎng)站制作、秀山土家族苗族網(wǎng)頁制作以及秀山土家族苗族網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,秀山土家族苗族網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到秀山土家族苗族省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

MySQL服務(wù)實(shí)例運(yùn)行期間,意外的停電,硬盤損壞,還有一些誤操作、服務(wù)器宕機(jī)等情況。這個(gè)時(shí)候如何確保數(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ì)好各種數(shù)據(jù)文件以及日志文件的存放位置,以方便能夠快速備份。另外備份的時(shí)候最好能夠備份到其他的機(jī)器上。

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

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

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

數(shù)據(jù)庫的復(fù)制實(shí)際上是通過二進(jìn)制日志預(yù)防數(shù)據(jù)丟失的,數(shù)據(jù)復(fù)制可以實(shí)現(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í)候再以指定分隔符切割數(shù)據(jù)導(dǎo)入即可。

2、物理備份:

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

冷備份、溫備份、熱備份

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

1、冷備份:

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

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

完全備份、增量備份

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

1、完全備份:

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

2、增量備份:

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

3、熱備份:

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

 

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

1、備份命令mysqldump格式

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

首先創(chuàng)建一個(gè)數(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

備份單個(gè)MySQL數(shù)據(jù)庫到opt下。(后面出現(xiàn)的warning是因?yàn)槲野衙艽a寫在了-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.

 

多個(gè)數(shù)據(jù)庫同時(shí)備份(備份了mood和自帶的mysql兩個(gè)數(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的高效運(yùn)行是很重要的,索引可以大大提高M(jìn)ySQL的檢索速度。

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

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

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

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

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

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

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

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

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

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

修改表結(jié)構(gòu)(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
創(chuàng)建表的時(shí)候直接指定
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)建表的時(shí)候直接指定
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):該語句添加一個(gè)主鍵,這意味著索引值必須是唯一的,且不能為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 ,用于全文索引。

以下實(shí)例為在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

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

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

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

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;

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

顯示索引信息

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

嘗試以下實(shí)例:

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

新聞名稱:MySQL基操---各類備份與索引詳解
鏈接URL:http://weahome.cn/article/jcehgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部