1. 程式人生 > >電商之梳理mysql相關知識---資料庫

電商之梳理mysql相關知識---資料庫

MySQL資料庫 編輯
MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言–結構化查詢語言(SQL)進行資料庫管理。
中文名 MySQL資料庫 類 型開放原始碼的關係型 說 明資料庫管理系統 標 志 sakila
目錄
1 簡介
2 歷史
3 常用命令
4 資料庫匯入
5 備份與恢復
簡介編輯
MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言–結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有字首“my”已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標誌的名字叫“sakila”,它是由MySQL AB的創始人從使用者在“海豚命名”的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都瞭解到這個資料庫。它的歷史也富有傳奇性。
歷史編輯
MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB記憶體的計算機上執行。過了不久,又將此工具,使用C語言重寫,移植到Unix平臺,當時,它只是一個很底層的面向報表的儲存引擎。這個工具叫做Unireg。
可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的程式碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些程式碼持續寫到20年後,而Monty卻做到了。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支援,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的程式碼,將它整合到自己的儲存引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支援。
1996年,MySQL 1.0釋出,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1釋出了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進位制版本。一個月後,Linux版本出現了。
緊接下來的兩年裡,MySQL依次移植到各個平臺下。它釋出時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品繫結在一起釋出。如果想一起釋出,就必須使用特殊許可,意味著要花銀子。當然,商業支援也是需要花銀子的。其它的,隨使用者怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關係)。
MySQL3.22應該是一個標誌性的版本,提供了基本的SQL支援。
MySQL關係型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多執行緒機制提供完全的多執行緒執行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等程式語言的程式設計介面(APIs),支援多種欄位型別並且提供了完整的操作符支援查詢中的SELECT和WHERE操作。
MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語“股份公司”的意思)。 僱了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支援事務處理,所以,MySQL從此開始支援事務處理了。
2000年4月,MySQL對舊的儲存引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能整合他們的儲存引擎InnoDB,這個引擎同樣支援事務處理,還支援行級鎖。
如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。
MySQL與InnoDB的正式結合版本是4.0。
到了MySQL5.0,2003年12月,開始有View,儲存過程之類的東東,當然,其間, bug也挺多。
在2008年1月16號 MySQL被Sun公司收購。
最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。
據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。
時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
常用命令編輯
1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2:2、建立一個數據庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所建立的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:檢視現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5:建立一個數據庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示錶的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values (”hyq”,”M”);
8:用文字方式將資料裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
9:匯入.sql檔案命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中資料
mysql>update MYTABLE set sex=”f” where name=’hyq’;
全域性管理許可權對應解釋:
FILE: 在MySQL伺服器上讀寫檔案。
PROCESS: 顯示或殺死屬於其它使用者的服務執行緒。
RELOAD: 過載訪問控制表,重新整理日誌等。
SHUTDOWN: 關閉MySQL服務。
資料庫/資料表/資料列許可權:
ALTER: 修改已存在的資料表(例如增加/刪除列)和索引。
CREATE: 建立新的資料庫或資料表。
DELETE: 刪除表的記錄。
DROP: 刪除資料表或資料庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜尋表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登入–其它什麼也不允許做。
資料庫匯入編輯
MySQL資料庫的匯入,有兩種方法:
1) 先匯出資料庫SQL指令碼,再匯入;
2) 直接拷貝資料庫目錄和檔案。
在不同作業系統或MySQL版本情況下,直接拷貝檔案的方法可能會有不相容的情況發生。
所以一般推薦用SQL指令碼形式匯入。下面分別介紹兩種方法。
2. 方法一 SQL指令碼形式
操作步驟如下:
2.1. 匯出SQL指令碼
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqldump命令列,匯出SQL指令碼。
2.1.1 用phpMyAdmin工具
匯出選項中,選擇匯出“結構”和“資料”,不要新增“DROP DATABASE”和“DROP TABLE”選項。
選中“另存為檔案”選項,如果資料比較多,可以選中“gzipped”選項。
將匯出的SQL檔案儲存下來。
2.1.2 用mysqldump命令列
命令格式
mysqldump -u 使用者名稱 -p 資料庫名 > 資料庫名.sql
範例:
mysqldump -u root -p abc > abc.sql
(匯出資料庫abc到abc.sql檔案)
提示輸入密碼時,輸入該資料庫使用者名稱的密碼。
2.2. 建立空的資料庫
通過主控介面/控制面板,建立一個數據庫。假設資料庫名為abc,資料庫全權使用者為abc_f。
2.3. 將SQL指令碼匯入執行
同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令列。
2.3.1 用phpMyAdmin工具
從控制面板,選擇建立的空資料庫,點“管理”,進入管理工具頁面。
在”SQL”選單中,瀏覽選擇剛才匯出的SQL檔案,點選“執行”以上載並執行。
注意:phpMyAdmin對上載的檔案大小有限制,php本身對上載檔案大小也有限制,如果原始sql檔案
比較大,可以先用gzip對它進行壓縮,對於sql檔案這樣的文字檔案,可獲得1:5或更高的壓縮率。
gzip使用方法:

gzip xxxxx.sql

得到
xxxxx.sql.gz檔案。
提示輸入密碼時,輸入該資料庫使用者名稱的密碼。
3 直接拷貝
如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和作業系統之間可能不相容,要慎用。
3.1 準備原始檔案
用tar打包為一個檔案
3.2 建立空資料庫
3.3 解壓
在臨時目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓後的資料庫檔案拷貝到相關目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對於FreeBSD:
cp * /var/db/mysql/mydb/
3.5 許可權設定
將拷貝過去的檔案的屬主改為mysql:mysql,許可權改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql轉換mysql的方法
1.導表結構
使用MySQL生成create指令碼的方法。找到生成要匯出的指令碼,按MySQL的語法修改一下到MySQL資料庫中建立該表的列結構什麼的。
2.導表資料
在MSSQL端使用bcp匯出文字檔案:
bcp “Select * FROM dbname.dbo.tablename;” queryout tablename.txt -c -Slocalhost\db2005 -Usa
其中””中是要匯出的sql語句,-c指定使用\t進行欄位分隔,使用\n進行記錄分隔,-S指定資料庫伺服器及例項,-U指定使用者名稱,-P指定密碼.
在MySQL端使用mysqlimport 匯入文字檔案到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定使用者名稱,-p指定密碼,databasename指定資料庫名稱,表名與檔名相同
備份與恢復編輯
MySQL備份恢復資料的一般步驟
備份一個數據庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
  如果,你在mysqldump實用程式中使用–lock-tables選項則不必使用如上SQL語句。
2、匯出資料庫中表的結構和資料
shell>mysqldump –opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的資料改變為恢復資料準備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqldump –lock-tables –opt db_name>db_name.sql; mysqladmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
  在更新繁忙的站點,可能有備份後的更新資料沒有記錄在新的日誌中。
  現在恢復上面備份的資料庫
1、對涉及的表使用寫鎖
mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的資料
shell>mysql db_name < db_name.sql
3、恢復更新日誌的內容
shell>mysql –one-database db_name < hostname.nnn
假設需要使用的日誌名字為hostname.nnn
4、啟用新的更新日誌
shell>mysqladmin flush-logs
5、解除表的寫鎖
mysql>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份資料的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。