1. 程式人生 > >MySQL初始化以及客戶端工具的使用

MySQL初始化以及客戶端工具的使用

sock 詳細信息 linux form 關系型 orm ctr create 主機名

                      MySQL初始化以及客戶端工具的使用

                                            作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

一.什麽是關系型數據庫   關系型數據庫通常是把所有的數據都組織成二維關系。之所以稱為關系型數據庫是因為他把數據組織在一個有字段和記錄組成的二維關系表當中。並且在這個關系表之外提供了很多輔助性的工具以完成關系表中的關系的維持及數據訪問等功能。   我們知道如果將數據存儲為字符形式的時候有文本對象和二進制大對象。二進制大對象不會直接存儲在數據庫中,而是放在服務器的某一個路徑上,而在數據庫存儲的知識該數據的指針。比如,存取一張高清壁紙,它不會將這個圖片的內容直接寫入數據庫,而是將這個圖片的絕對路徑存放在數據庫中的某一個字段內。這種關系我們稱之為面向對象的關系型數據庫。(RDBMS)。而現在很多關系型數據庫還支持直接將xml格式的接口進行交互。
二.關系型數據庫的分支   在90年代初,關系型數據庫由Sybase,Informix,Oracle三家公司三足鼎立。這三家公司對公司的規劃不同,Sybase和Informix的規劃都是很有前瞻性的,而Oracle的目標很有精確,就是把它們的產品做好,最後Oracle不斷地進行完善,很顯然,走到最靠前的當然是Oracle。其中Sybase曾經是和Microsoft公司合作,當時處於某種原因Sybase退出和Microsoft公司的合作,最後Microsoft公司自己研發了SQL Server數據庫,Informix公司則被IBM公司收購,現在Informix只是IBM的一個子項目公司,典型的數據庫代表就是DB2。
  早期MySQL是ab公司的,最後以10美元賣給了sun公司,不幸的是sun公司被Oracle公司收購了,而Oracle慣用的伎倆就是將競爭對手買下來再打入冷宮。所以在資本主義面前談理想都是道德主義。sun公司被收購之後,MySQL也就歸Oracle公司啦。Oracle和人們預想的一樣,雖然在收購的時候承諾了5年之內不下手,但事實上在這期間MySQL以及被蹂躪了無數遍啦。所以像之前谷歌,Facebook等公司也從MySQL軟件轉向其他軟件啦。而且在RHEL7版本的默認數據庫已經將MySQL換成了MariaDB。   MySQL的原作者在sum公司被收購之後久另立門戶了,在早起的MySQL的基礎上提出了另外的一個分支叫MariaDB。事實上MariaDB在能夠兼容mysql的基礎上還整合了開源社區中的很強大的技術力量。我們知道mysql早起整合進來的存儲引擎有一個是innodb,而innodb是屬於innobase公司的,innobase公司早在2008年被Oracle收購啦。有幸的是在開源界總是不乏奇人的,比如說著名的percona公司,它是致力於mysql的優化方面已經取得了不菲成績的一個組織,這個組織在早起的改進開源的innodb基礎之上研發了增強版的innodb,命名為xtradb。如你所料,MariaDB的存儲引擎就是用的xtradb。我們可以理解為MariaDB是MySQL進化之後的一個產品。google和Facebook等著名的世界互聯網公司都很看好MariaDB並已經開始使用該軟件啦。
  其實google和Facebook還有其他的幾家公司在早起的MySQL的技術理念的不同他們也開發了另一個互聯網產品叫做webscaledb,專門為web而生的一個數據庫系統。它柔和了MySQL,MariaDB,percona和innobase四家公司的技術的產品。   在開源的數據庫產品中還有一個重要的產品叫做PostgreSQL(簡稱pgsql),事實上,早起名字叫做egresql,只是egresql在商業運作上跟Oracle競爭時完全敗下陣來。以至於它銷聲匿跡的比Informix還要早。而事實上就關系型數據庫來講,pgsql在技術上要優秀的多。不過市場決定一切,因此MySQL可能是大家接觸比較多的關系型數據庫。   指定一提的另外一個關系型數據庫叫做sqlite,它和mysql不一樣,我們知道mysql是基於c/s架構,客戶端和服務端是通過mysql協議進行通信的。而sqlite是一個簡單,工作在本地,非服務化的一個API的關系型數據庫接口(它的客戶端和服務端是一體的)。註意,sqlite僅是一個引擎,sqlite主要用在嵌入式平臺上又不得不用關系型數據庫接口的這樣的應用場景。再次強調一下,sqlite是一個非C./S架構,它純粹是一個引擎API機制,背後的數據任然存儲為文件系統上的簡單文件,不做過多解析,但完全可以支持我們的程序員使用select,insert等機制對數據完成持久化。 三.MySQL的初始化   我們知道MySQL的安裝方式有很多種,比如rpm,yum,源碼安裝,二進制方式安裝MySQL等等。但是無論哪種方式安裝的MySQL我們都需要做一個操作就是MySQL的初始化。而正確的初始化姿勢我們分為兩個操作。第一,提供配置文件;第二,刪除匿名用戶等等。 1.提供配置文件   相比之前接觸過MySQL的童鞋都知道,MySQL默認的配置文件都是以“*.cnf”結尾的文件,它是集中式的配置文件,多個應用程序共用的配置文件。當然,也可以不這樣玩,後期我會分享案例給大家。我們通過一條命令就可以查看MySQL的一些默認信息。即“[root@yinzhengjie ~]# mysql --help --verbose ”沒錯,通過這個命令我們就可以或得很多輸出:   A>.顯示mysqld程序啟動時可用的選項,通常都是長選項;   B>.顯示mysqld的配置文件中可用的服務變量;   C>.顯示使用配置文件的方式,即:第一,它依次查找每個需要查找的文件,結果是所有文件並集;第二,如果某參數在多個文件中出現多次,後讀取的最終生效。 2.重置用戶信息   大家知道在一個新安裝的服務器上有很多默認的用戶,比如root以及一些匿名用戶,他們都是沒有密碼的,這樣是很不安全的,因此我們需要刪除不必要的用戶,以及給我們需要使用的用戶設置密碼以及授權操作。 我們知道MySQL用戶名賬號由兩部分組成,即用戶名和主機名(username@host),其中“host”還可以使用通配符。如 “%”表示任意長度的任意字符,“_”表示匹配任意單個字符。 A.刪除匿名用戶
 1 mysql> select user,host,password from user;
 2 +-------------+-------------+-------------------------------------------+
 3 | user        | host        | password                                  |
 4 +-------------+-------------+-------------------------------------------+
 5 | root        | localhost   |                                           |
 6 | root        | yinzhengjie |                                           |
 7 | root        | 127.0.0.1   |                                           |
 8 |             | localhost   |                                           |
 9 |             | yinzhengjie |                                           |
10 | yinzhengjie | 10.%.%.%    | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
11 +-------------+-------------+-------------------------------------------+
12 6 rows in set (0.00 sec)
13 
14 mysql> 
15 mysql> 
16 mysql> 
17 mysql> 
18 mysql> drop user ""@localhost;
19 Query OK, 0 rows affected (0.01 sec)
20 
21 mysql> drop user ""@yinzhengjie;
22 Query OK, 0 rows affected (0.00 sec)
23 
24 mysql> select user,host,password from user;
25 +-------------+-------------+-------------------------------------------+
26 | user        | host        | password                                  |
27 +-------------+-------------+-------------------------------------------+
28 | root        | localhost   |                                           |
29 | root        | yinzhengjie |                                           |
30 | root        | 127.0.0.1   |                                           |
31 | yinzhengjie | 10.%.%.%    | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
32 +-------------+-------------+-------------------------------------------+
33 4 rows in set (0.00 sec)
34 
35 mysql> 
B.給所有的root用戶設置密碼
1 第一種方式:
2   mysql > set password for username@host = password( your_password);
3 第二種方法
4   mysql > update user set password = password(your_password) where user = root;
5   mysql > flush peivileges;
6 第三種方式:
7 [root@yinzhengjie ~]#mysqladmin -u UserName -h Hot password new_password -p
8 [root@yinzhengjie ~]#mysqladmin -u UserName -h Host -p flush-privileges
四.連入MySQL服務器 1.MySQL協議   MySQL的客戶端有很多種,不論是那種MySQL客戶端連接mysqld服務器,都是需要使用mysql protocol協議。 2.MySQL接收連接請求 本地通信:   客戶端與服務器端位於同一主機,而且還要基於127.0.0.1(localhost)地址或lo接口進行通信。Linux或是Unix操作系統則是通過Unix Sock,/tmp/mysql.scok,/var/lib/mysql/mysql.sock這些本地文件進行進程間的通信。Widows則是通過memory(共享內存) pipe(命名管道)的方式進行通信的。 遠程通信:   客戶端與服務器位於不同的主機,或在統一主機便使用非回環地址通信。而遠程通信時,通常是基於套接字通信,即TCP Socket。 3.MySQL客戶端工具   事實上MySQL的客戶端工具有很多種,可不止mysql這一種喲(只不過mysql這個客戶端時最著名的一個)。其他著名的客戶端工具還有:mysqladmin,mysqldump,mysqlcheck等等。   客戶端([client])通信的選項:     指定用戶 : -u,--user=     指定主機名 : -h, --host=     指定密碼 : -p, --password=     指定協議 : --protocol={tcp|socket|memory|pipe}     指定端口 : --port= #MySQL默認是3306端口     指定套接字 : --socket= # 例如:/tmp/mysql.sock   非客戶端類的管理工具:myisamchk(監測工具)和myisampack(打包工具)。 4.mysql命令行選項   壓縮傳輸 : -compress   字符集 : --default-character-set   顯示版本號 : -V:   顯示詳細信息 : -v:   指定ca證書 : --ssl-ca   ca證書的文件夾: --ssl-capath (一般有多個CA證書,就可以指定一個目錄)   客戶端證書 : --ssl-cert   加密方式 : --ssl-cipher   使用的私鑰 : --ssl-key   驗證服務器端證書: --ssl-verify-server-cert   指定要使用的數據庫:--database= -D   輸出結果為html格式的文檔::-H --html   輸出結果為xml格式的文檔: -X --xml:   發送命令時拒絕使用無where字句的uodate或delete命令: --safe-updates 5.mysql命令提示符   mysql>    ---->等待輸入命令   ‘>      ---->前面提供的‘未提供結束’,接下來那兩行一樣的道理。   ”>   `>   —>     ---->續航提示符   /*>      ---->註釋信息(結束就用戶"*/",比如:/*yinzhengjie*>) 6.mysql的命令行編輯快捷鍵   ctrl+w:刪除光標所在處之前的一個單詞   ctrl+u:刪除光標之前至行首的所有內容,並將其保存在緩存(buffer)當中。   ctrl+y:粘貼之前ctrl+w或ctrl+u刪除的內容   ctrl+a:移動光標至行首   ctrl+e:移動光標至行尾 五.mysqladmin工具用法詳解   mysqladmin可以讓用戶不進入mysql的交互界面,直接在命令行就可以運行SQL語句啦。命令格式:“mysqladmin [options] command [arg] [command[arg]] .....”,接下來,讓我們一起研究一下mysqladmin的用法。這個命令其實很有用,尤其是你在寫shell腳本的時候,操作數據的時候它的用法就可以大展身手了。 1.創建空數據庫
 1 [root@yinzhengjie ~]# mysqladmin create yinzhengjiedb    #創建一個叫yinzhengjiedb的數據庫。
 2 [root@yinzhengjie ~]# mysql -e show databases;‘       #我們可以用mysql的-e選項來進行驗證是否創建成功、
 3 +--------------------+
 4 | Database           |
 5 +--------------------+
 6 | information_schema |
 7 | mysql              |
 8 | test               |
 9 | yinzhengjie        |
10 | yinzhengjiedb      |
11 +--------------------+
12 [root@yinzhengjie ~]# 

2.刪除數據庫

 1 [root@yinzhengjie ~]# mysql -e show databases;
 2 +--------------------+
 3 | Database           |
 4 +--------------------+
 5 | information_schema |
 6 | mysql              |
 7 | test               |
 8 | yinzhengjie        |
 9 | yinzhengjiedb      |
10 +--------------------+
11 [root@yinzhengjie ~]# mysqladmin drop yinzhengjiedb
12 Dropping the database is potentially a very bad thing to do.
13 Any data stored in the database will be destroyed.
14 
15 Do you really want to drop the yinzhengjiedb database [y/N] y   #此處我們需要交互式輸入一個y。
16 Database "yinzhengjiedb" dropped
17 [root@yinzhengjie ~]# mysql -e show databases;
18 +--------------------+
19 | Database           |
20 +--------------------+
21 | information_schema |
22 | mysql              |
23 | test               |
24 | yinzhengjie        |
25 +--------------------+
26 [root@yinzhengjie ~]# 

MySQL初始化以及客戶端工具的使用