mysql網路資料庫
一、啟動mysql服務
(1) rpm方式安裝的mysql
-設置自動啟動
#ntsysv --level 3
-手工啟動
#service mysqld start
(2) 編譯安裝的mysql
-設置自動啟動
#vi /etc/rc.d/rc.local
.......
/usr/local/mysql/bin/mysqld_safe&
........
-手工啟動
#/usr/local/mysql/bin/mysqld_safe&
查看文章
mysql伺服器(一)2009-06-15 11:18mysql伺服器
一. 認識和安裝mysql
1. 認識mysql
(1) mysql是一種網路資料庫伺服器產品
(2) mysql是開源的免費的
(3) mysql是關系型資料庫管理系統,支持SQL.
(4) mysql無溢出漏洞
(5) mysql提供豐富的API
(6) mysql提供豐富的數據類型
(7) mysql具較強的移值性
2. 安裝mysql軟體
(1) rpm安裝方式
#rpm -ivh perl-CGI....
perl-DBI....
perl-DBD-MySQL.....
mysq-....
mysql-server....
mysql-devel.....
(2) 編譯安裝方式
#groupadd mysql
#useradd -g mysql mysql
#tar -xzvf mysql-4.1.19.tar.gz
#cd mysql-4.1.19
#./configure --prefix=/usr/local/mysql
#make
#make install
#cp support-files/my-medium.cnf /etc/my.cnf
#cd /usr/local/mysql
#bin/mysql_install_db --user=mysql
#chown -R root .
#chown -R mysql var
#chgrp -R mysql .
3. 啟動mysql服務
(1) rpm方式安裝的mysql
-設置自動啟動
#ntsysv --level 3
-手工啟動
#service mysqld start
(2) 編譯安裝的mysql
-設置自動啟動
#vi /etc/rc.d/rc.local
.......
/usr/local/mysql/bin/mysqld_safe&
........
-手工啟動
#/usr/local/mysql/bin/mysqld_safe&
二、mysql的管理
1. 如何連接mysql伺服器
(1) Linux客戶機
#mysql [-h伺服器地址] [-u用戶名] [-p口令] [資料庫名]
實例:
#mysql
mysql>
#mysql -h192.168.3.1 -uadmin -plinux
mysql>
(2) Windows客戶機
-利用第三方mysql客戶端軟體
-利用瀏覽器連接(伺服器必須安裝web管理平台,如:phpmyadmin/webmin)
注:webmin的安裝方法
#tar -xzvf webmin-1.25.tar.gz
#cd webmin-1.25
#./setup.sh
2. 資料庫管理
(1) 認識mysql的資料庫
-mysql伺服器默認建立兩個資料庫,分別是mysql和test;其中mysql是系統資料庫;test是學習資料庫
-mysql伺服器上的每個資料庫都會在相應路徑中建立與庫同名的目錄
-每個資料庫可包含若干張表,每張表由*.frm、*.MYD和*.MYI文件構成
(2) 創建資料庫
#mysql
mysql>create database 資料庫名;
實例:
mysql>create database dbinfo;
(3) 查看伺服器上已創建的資料庫
#mysql
mysql>show databases;
(4) 打開資料庫
#mysql
mysql>use 資料庫名;
實例:
mysql>use db1;
(5) 刪除資料庫
#mysql
mysql>drop database 資料庫名;
實例:
mysql>drop database dbinfo;
3. 數據表的管理
(1) mysql提供的數據類型
-數字型
TINYINT 1位元組
SMALLINT 2位元組
MEDIUMINT 3B
INT 4B
BIGINT 8B
FLOAT[(M,D)] 4B
DOUBEL[(M,D)] 8B
DECIMAL(M,D)
-字元串型
char(M)
varchar(M)
tinytext
text
mediumtext
longtext
enum('..',...)
set(....)
-日期時間型
date
datetime
time
(2) 創建表
#mysql
mysql>use 資料庫;
mysql>create table 表名 (
列名 數據類型 屬性/約束;
.......
.....
) 表選項;
列屬性/約束:
null/not null 是否允許為null
default 值 定義列的默認值
primary key 定義主鍵
check 表達式 定義列的取值范圍
REFERENCES 表名(列名) 定義外部鍵
表選項:
TYPE=HEAP/ISAM/MYISAM/INNOBDB/BDB/MERGE //定義數據表引擎類型
實例:
mysql>use db1
mysql>create table users (
->id varchar(10) primary key,
->name varchar(20) not null,
->password varchar(30) not null) TYPE=MYISAM;
(3) 查看資料庫中已建立的表
#mysql
mysql>use 資料庫;
mysql>show tables;
(4) 查看錶的結構
#mysql
mysql>use 資料庫;
mysql>describe 表名;
(5) 修改表的結構
#mysql
mysql>use 資料庫;
mysql>alter table 表名
add 列定義 //添加列
|drop 列名 //刪除列
|add index 索引名 (列名) //添加索引
|drop index 索引名 //刪除索引
|modify 列定義 //修改列的定義
|add primary key (列名) //添加主鍵
|drop primary key //刪除主鍵
|rename 新表名 //修改表名稱
實例:mysql>alter table users add memo text;
(6) 向表中插入數據
#mysql
mysql>insert into 表名[(列名,...n)] values (值,...)
實例:
mysql>insert into users values ('0001','user1','linux','system admin');
(7) 查看錶中數據
#mysql
mysql>select 列名 [as 別名] [,...n]|*|表達式
->from 表名[,...n]
->[where 條件表達式]
->[order by 列名]
->[group by 列名]
->[having 條件表達式]
實例:
mysql>select * from users;
mysql>select user,password from users;
mysql>select user,password from users where name='user1';
mysql>select * from users order by id desc;
mysql>select 性別, count(*) as 人數 from 學生 group by 性別;
(8) 刪除表中數據
#mysql
mysql>delete from 表名 [where 條件表達式];
實例:
mysql>delete from users;
mysql>delete from users where name='user1';
(9) 修改表中數據
#mysql
mysql>update 表名 set 列名=值 [where 條件表達式];
實例:
mysql>update users set password='132' where name='user1';
(10) 刪除表
#mysql
mysql>drop table 表名;
實例:
mysql>drop table users;
B. 濡備綍瑙e喅灞鍩熺綉鍐卪ysql鏁版嵁搴撹繛鎺ユ參_MySQL
閫氳繃鍐呯綉榪炲彟澶栦竴鍙版満鍣ㄧ殑mysql鏈嶅姟錛 紜鍙戠幇閫熷害N鎱錛 絳変簡澶х害鍑犲嶮縐掓墠絳夊埌鎻愮ず杈撳叆瀵嗙爜銆 浣嗘槸ping mysql鎵鍦ㄦ湇鍔″櫒鍗村緢蹇錛 鎯沖埌寰堜箙涔嬪墠鏈夎繃綾諱技鐨勭粡楠岋紝 telnet絳変竴浜涙湇鍔″湪榪炴帴璇鋒眰鐨勬椂鍊欙紝浼氬仛涓浜涘弽鍚戝煙鍚嶈В鏋愶紙濡傛灉鍙嶅悜瑙f瀽涓嶉『鐣咃紝 浼拌″氨浼氬歡榪熷緢澶氾紝 緇欎漢鐨勬劅瑙夋槸榪炴帴閫熷害N鎱錛侊級
鍦ㄧ綉涓婃悳緔浜嗕笅瑙e喅鍔炴硶錛 鍙戠幇鏈変袱縐嶏細
涓. 涓よ竟鏈哄櫒閰嶇疆鐨剅esolve.conf涓嶄竴鏍鳳紝 鎶妑esolve.conf閰嶇疆鎴愰熷害姣旇緝蹇鐨凞NS灝監K
浜. 鎶妋ysql閰嶇疆涓鐨凞NS鍙嶅悜瑙f瀽鍏蟲帀錛 涔烵K
鎴戠敤鐨勬槸絎涓縐嶅姙娉曪紝 淇鏀箁esolve.conf閰嶇疆鍚庯紝 閫熷害灝變笂鏉ヤ簡錛
闄勪竴錛 鎽樿嚜http://gcoder.blogbus.com/logs/31907502.html
涓ゅ彴鍦ㄥ悓涓緗戞電殑鏈哄櫒, 榪炴帴鍚屼竴涓鏁版嵁搴撴湇鍔″櫒, 涓鍙扮殑閫熷害鏄鍙︿竴鍙扮殑100鍊, 鏁版嵁搴撲富鏈烘槸鍩熷悕琛ㄧず鐨. 鎬庝箞閮芥兂涓嶆槑鐧?
鍚庢潵鏌ョ湅涓ゅ彴鏈哄櫒鐨 /etc/resolv.conf, 鍙戠幇閰嶇疆涓嶄竴鏍, 鏀規垚閫熷害蹇鐨勯偅鍙版満鍣ㄧ殑閰嶇疆, 閫熷害閭d笂灝變笂鏉ヤ簡.
鍩熷悕瑙f瀽涔熷彲浠ュ艱嚧緗戠粶紼嬪簭鎱, 鍙堜竴鏀惰幏. 鍙﹀, mysql榪樻湁DNS鍙嶅悜瑙f瀽鐨勯棶棰, 涔熷彲鑳藉艱嚧閫熷害鎱, 鍙浠ュ湪mysql鐨勯厤緗鏂囦歡涓, 鎶奃NS鍙嶅悜瑙f瀽鍏蟲帀.
闄勪簩錛 鎽樿嚜
褰撹繙紼嬭塊棶mysql鏃訛紝mysql浼氳В鏋愬煙鍚嶏紝浼氬艱嚧璁塊棶閫熷害寰堟參錛屽姞涓婁笅闈㈣繖涓閰嶇疆鍙瑙e喅姝ら棶棰
# 紱佹mysql鍋氬煙鍚嶈В鏋
[mysqld]
skip-name-resolve
PHP榪滅▼榪炴帴MYSQL閫熷害鎱,鏈夋椂榪滅▼榪炴帴鍒癕YSQL鐢ㄦ椂4-20縐掍笉絳,鏈鍦拌繛鎺MYSQL姝e父,鍑虹幇榪欑嶉棶棰樼殑涓昏佸師鍥犳槸,榛樿ゅ畨瑁呯殑MYSQL寮鍚浜咲NS鐨勫弽鍚戣В鏋,鍦∕Y.INI(WINDOWS緋葷粺涓)鎴朚Y.CNF(UNIX鎴朙INUX緋葷粺涓)鏂囦歡鐨刐mysqld]涓嬪姞鍏skip-name-resolve榪欎竴鍙ャ
浣嗘槸錛岃繖鏍蜂細寮曡搗涓涓闂棰橈細榪炴帴mysql鏃訛紝涓嶈兘浣跨敤 localhost榪炴帴浜嗭紝鑰屾槸瑕佷嬌鐢↖P鍦板潃鐨勶紱濡傛灉鏄鎸塴ocalhost瀵圭敤鎴瘋祴鏉冮檺鐨勮瘽錛岀敤鎴風櫥褰曟潈闄愪篃瑕佷慨鏀逛竴涓嬬殑銆
榪炴帴mysql閫熷害鎱㈢殑瑙e喅鏂規硶.
2鍙版湇鍔″櫒錛屼竴鍙拌窇iis+php錛屼竴鍙拌窇mysql錛屽拰浠ュ線涓鏍烽厤緗濂界幆澧冿紝嫻嬭瘯欏甸潰涓鍒嘜K
璺戝簲鐢ㄧ殑鏃跺欏彂鐜皃hp璁塊棶mysql閫熷害寰堟參錛岃繖縐嶆儏鍐靛湪浠ュ墠浠庢湭鍙戠幇榪囷紝鉶界劧2鍙版湇鍔″櫒騫墮潪鍦ㄥ悓涓緗戞典腑錛屼絾鏄痯ing鏁板煎熀鏈涓婇兘鍦1,2ms涔嬮棿錛宼cp榪炴帴搴旇ヤ笉鏄闂棰樺叧鍋ワ紝google浠ュ悗鎵懼埌絳旀堬紝鍦╩y.ini鏂囦歡鐨刐mysqld]閮ㄥ垎鍔犲叆:skip-name-resolve錛屼繚瀛樻枃浠訛紝閲嶅惎mysql錛屼竴鍒嘜K鍟︼紝閫熷害璞¢炰竴鏍蜂簡
鏂扮増鏈鐨刴ysql閰嶇疆璧鋒潵涓嶈薄浠ュ墠鐨勯偅涓鍌葷摐鍖栦簡錛岃繖涓闂棰樻姌鑵句簡鎴戜竴涓婂崍鐨勬椂闂達紝鏅氫笂鍥炴潵鎬葷畻鏄瑙e喅浜嗭紝鍢垮樋錛屽張瀛﹀埌涓浜涗笢瑗褲
Windows 2003涓嬬殑MySQL 5鏈嶅姟鍣錛屾湰鏈鴻繛鎺ュ埌MySQL鏈嶅姟闈炲父蹇錛屽矓鍩熺綉鍐呮湁涓ゅ彴Linux鏈哄櫒錛屾湁涓鍙拌繛鎺ュ緢蹇錛屽彟澶栦竴鍙拌緭鍏ュ瘑鐮佸悗瑕佺瓑濂藉嚑縐掗挓鎵嶈兘榪炰笂銆
瑙e喅鍔炴硶錛
鍦∕ySQL鏈嶅姟鍣ㄧ殑閰嶇疆涓澧炲姞涓涓濡備笅閰嶇疆鍚庨熷害椋炲揩銆
[mysqld]
skip-name-resolve
闄勫綍錛( How MySQL uses DNS )
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn't support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with --skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with --skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with --skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don't want to allow connections over TCP/IP, you can do this by starting mysqld with --skip-networking.
PHP榪滅▼榪炴帴MYSQL閫熷害鎱,鏈夋椂榪滅▼榪炴帴鍒癕YSQL鐢ㄦ椂4-20縐掍笉絳,鏈鍦拌繛鎺MYSQL姝e父,鍑虹幇榪欑嶉棶棰樼殑涓昏佸師鍥犳槸,榛樿ゅ畨瑁呯殑MYSQL寮鍚浜咲NS鐨勫弽鍚戣В鏋,鍦∕Y.INI(WINDOWS緋葷粺涓)鎴朚Y.CNF(UNIX鎴朙INUX緋葷粺涓)鏂囦歡鐨刐mysqld]涓嬪姞鍏skip-name-resolve榪欎竴鍙ャ
MYSQL榪滅▼榪炴帴閫熷害鎱㈢殑瑙e喅鏂規硶
鍦ㄥ矓鍩熺綉鍐呰繛鎺ュ叾浠栨満鍣ㄧ殑MYSQL,鍙戠幇閫熷害鎱㈢殑寰,涓嶇煡閬撲粈涔堝師鍥,鎬繪湁鍑犵掔殑寤惰繜.
鍚庢潵鍦ㄧ綉涓婂彂鐜拌В鍐蟲柟娉,my.ini閲岄潰娣誨姞
[mysqld]
skip-name-resolve
skip-grant-tables
榪欐牱閫熷害灝卞揩浜!
skip-name-resolve
閫夐」灝辮兘紱佺敤DNS瑙f瀽錛岃繛鎺ラ熷害浼氬揩寰堝氥備笉榪囷紝榪欐牱鐨勮瘽灝變笉鑳藉湪MySQL鐨勬巿鏉冭〃涓浣跨敤涓繪満鍚嶄簡鑰屽彧鑳界敤ip鏍煎紡銆
鑻ヤ嬌鐢╛skip-grant-tables緋葷粺灝嗗逛換浣曠敤鎴風殑璁塊棶涓嶅仛浠諱綍璁塊棶鎺у埗錛屼絾鍙浠ョ敤 mysqladmin flush-privileges鎴杕ysqladmin reload鏉ュ紑鍚璁塊棶鎺у埗;榛樿ゆ儏鍐墊槸show databases璇鍙ュ規墍鏈夌敤鎴峰紑鏀撅紝濡傛灉mysql鏈嶅姟鍣ㄦ病鏈夊紑榪滅▼甯愭埛錛屽氨鍦╩y.ini閲岄潰鍔犱笂skip-grant-tables
C. 為何mySQL被廣泛地應用在Internet上的中小型網站中
MySQL是一個小型關系型資料庫管理系統,開發者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。MySQL的官方網站的網址是:www.mysql.com
1.使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統
3.為多種編程語言提供了API。這些編程語言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
4.支持多線程,充分利用CPU資源
5.優化的SQL查詢演算法,有效地提高查詢速度
6.既能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名
7.提供TCP/IP、ODBC和JDBC等多種資料庫連接途徑
8.提供用於管理、檢查、優化資料庫操作的管理工具
9.可以處理擁有上千萬條記錄的大型資料庫
MySQL的應用
與其他的大型資料庫例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規模小、功能有限(MySQL Cluster的功能和效率都相對比較差)等,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有餘,而且由於MySQL是開放源碼軟體,因此可以大大降低總體擁有成本。
目前Internet上流行的網站構架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統,Apache作為Web伺服器,MySQL作為資料庫,PHP作為伺服器端腳本解釋器。由於這四個軟體都是遵循GPL的開放源碼軟體,因此使用這種方式不用花一分錢就可以建立起一個穩定、免費的網站系統。
MySQL管理
可以使用命令行工具管理MySQL資料庫(命令mysql 和 mysqladmin),也可以從MySQL的網站下載圖形管理工具MySQL Administrator和MySQL Query Browser。
phpMyAdmin是由php寫成的MySQL資料庫系統管理程式,讓管理者可用Web介面管理MySQL資料庫。
phpMyBackupPro也是由PHP寫成的,可以透過Web介面創建和管理資料庫。它可以創建偽cronjobs,可以用來自動在某個時間或周期備份MySQL 資料庫。
另外,還有其他的GUI管理工具,例如早先的mysql-front 以及 ems mysql manager,navicat,phpmyadmin等等
Mysql存儲引擎
MyISAM Mysql的默認資料庫,最為常用。擁有較高的插入,查詢速度,但不支持事務
InnoDB 事務型資料庫的首選引擎,支持ACID事務,支持行級鎖定
BDB 源自Berkeley DB,事務型資料庫的另一種選擇,支持COMMIT和ROLLBACK等其他事務特性
Memory 所有數據置於內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會佔用和數據量成正比的內存空間。並且其內容會在Mysql重新啟動時丟失
Merge 將一定數量的MyISAM表聯合而成一個整體,在超大規模數據存儲時很有用
Archive 非常適合存儲大量的獨立的,作為歷史記錄的數據。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支持相對較差
Federated 將不同的Mysql伺服器聯合起來,邏輯上組成一個完整的資料庫。非常適合分布式應用
Cluster/NDB 高冗餘的存儲引擎,用多台數據機器聯合提供服務以提高整體性能和安全性。適合數據量大,安全和性能要求高的應用
CSV 邏輯上由逗號分割數據的存儲引擎
BlackHole 黑洞引擎,寫入的任何數據都會消失,一般用於記錄binlog做復制的中繼
另外,Mysql的存儲引擎介面定義良好。有興趣的開發者通過閱讀文檔編寫自己的存儲引擎。
Mysql最常見的應用架構
單點(Single),適合小規模應用
復制(Replication),適合中小規模應用
集群(Cluster),適合大規模應用
D. Mysql資料庫的安全配置、實用技巧
1、前言
MySQL 是完全網路化的跨平台關系型資料庫系統,同時是具有客戶機/伺服器體系結構的分布式資料庫管理系統。它具有功能強、使用簡便、管理方便、運行速度快、安全可靠性強等優點,用戶可利用許多語言編寫訪問MySQL 資料庫的程序,特別是與PHP更是黃金組合,運用十分廣泛。
由於MySQL是多平台的資料庫,它的默認配置要考慮各種情況下都能適用,所以在我們自己的使用環境下應該進行進一步的安全加固。作為一個MySQL的系統管理員,我們有責任維護MySQL資料庫系統的數據安全性和完整性。
MySQL資料庫的安全配置必須從兩個方面入手,系統內部安全和外部網路安全,另外我們還將簡單介紹編程時要注意的一些問題以及一些小竅門。
2、系統內部安全
首先簡單介紹一下MySQL資料庫目錄結構。MySQL安裝好,運行了mysql_db_install腳本以後就會建立數據目錄和姿手初始化資料庫。如果我們用MySQL源碼包安裝,而且安裝目錄是/usr/local/mysql,那麼數據目錄一般會是/usr/local/mysql/var。資料庫系統由一系列資料庫組成,每個資料庫包含一系列資料庫表。MySQL是用資料庫名在數據目錄建立建立一個資料庫目錄,各資料庫表分別以資料庫表名作為文件名,擴展名分別為MYD、MYI、frm的三個文件放到資料庫目錄中。
MySQL的授權表給資料庫的訪問提供了靈活的許可權控制,但是如果本地用戶擁有對庫文件的讀許可權的話,攻擊者只需把資料庫目錄打包拷走,謹哪然後拷到自己本機的數據目錄下就祥冊碼能訪問竊取的資料庫。所以MySQL所在的主機的安全性是最首要的問題,如果主機不安全,被攻擊者控制,那麼MySQL的安全性也無從談起。其次就是數據目錄和數據文件的安全性,也就是許可權設置問題。
從MySQL主站一些老的binary發行版來看,3.21.xx版本中數據目錄的屬性是775,這樣非常危險,任何本地用戶都可以讀數據目錄,所以資料庫文件很不安全。3.22.xx版本中數據目錄的屬性是770,這種屬性也有些危險,本地的同組用戶既能讀也能寫,所以數據文件也不安全。3.23.xx版本數據目錄的屬性是700,這樣就比較好,只有啟動資料庫的用戶可以讀寫資料庫文件,保證了本地數據文件的安全。
如果啟動MySQL資料庫的用戶是mysql,那麼象如下的目錄和文件的是安全的,請注意數據目錄及下面的屬性:
shellls -l /usr/local/mysql
total 40
drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin
drwxrwxr-x 3 root root 4096 Feb 27 20:07 include
drwxrwxr-x 2 root root 4096 Feb 27 20:07 info drwxrwxr-x 3 root root 4096 Feb 27 20:07 lib drwxrwxr-x 2 root root 4096 Feb 27 20:07 libexec drwxrwxr-x 3 root root 4096 Feb 27 20:07 man drwxrwxr-x 6 root root 4096 Feb 27 20:07 mysql-test drwxrwxr-x 3 root root 4096 Feb 27 20:07 share drwxrwxr-x 7 root root 4096 Feb 27 20:07 sql-bench drwx------ 4 mysql mysql 4096 Feb 27 20:07 var
shellls -l /usr/local/mysql/var
total 8
drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql
drwx------ 2 mysql mysql 4096 Feb 27 20:08 test
shellls -l /usr/local/mysql/var/mysql
total 104
-rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI
-rw------- 1 mysql mysql 8778 Feb 27 20:08 columns_priv.frm
-rw------- 1 mysql mysql 302 Feb 27 20:08 db.MYD
-rw------- 1 mysql mysql 3072 Feb 27 20:08 db.MYI
-rw------- 1 mysql mysql 8982 Feb 27 20:08 db.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 func.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 func.MYI
-rw------- 1 mysql mysql 8641 Feb 27 20:08 func.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 host.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 host.MYI
-rw------- 1 mysql mysql 8958 Feb 27 20:08 host.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 tables_priv.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 tables_priv.MYI
-rw------- 1 mysql mysql 8877 Feb 27 20:08 tables_priv.frm
-rw------- 1 mysql mysql 428 Feb 27 20:08 user.MYD
-rw------- 1 mysql mysql 2048 Feb 27 20:08 user.MYI
-rw------- 1 mysql mysql 9148 Feb 27 20:08 user.frm
如果這些文件的屬主及屬性不是這樣,請用以下兩個命令修正之:
shellchown -R mysql.mysql /usr/local/mysql/var
shellchmod -R go-rwx /usr/local/mysql/var
E. 什麼是MySql資料庫
MySQL資料庫:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
資料庫簡介:
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資料庫歷史:
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的發展前景是非常光明的!
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資料庫導入方法:
MySQL資料庫的導入,有兩種方法:
1) 先導出資料庫SQL腳本,再導入;
2) 直接拷貝資料庫目錄和文件。
在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。
所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導出SQL腳本
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。
2.1.1 用phpMyAdmin工具
導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。
選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。
將導出的SQL文件保存下來。
2.1.2 用mysqlmp命令行
命令格式
mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql
範例:
mysqlmp -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 -Slocalhostdb2005 -Usa
其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.
在MySQL端使用mysqlimport 導入文本文件到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同
MySQL備份與恢復:
MySQL備份恢復數據的一般步驟
備份一個資料庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出資料庫中表的結構和數據
shell>mysqlmp --opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqlmp --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;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。
MySQL資料庫優化:
選擇InnoDB作為存儲引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。
注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批量數據導入
在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。
一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。
優化InnoDB磁碟I/O
增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。
MySQL的內存分配
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。
日常維護
定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。
其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。
定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。