程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL源碼包在Linux上安裝和配置

MySQL源碼包在Linux上安裝和配置

編輯:關於MYSQL數據庫
作者:龐勁松 工作單位:廣東省Linux公共服務技術支持中心 1.1 MySQL簡介
MySQL服務概述
MySQL是當前開源數據庫中最受歡迎SQL數據庫管理系統,它由MySQL AB開發、發布和支持。MySQL AB是一家基於MySQL開發人員的商業公司,它是一家使用了一種成功的商業模式來結合開源價值和方法論的第二代開源公司。MySQL是MySQL AB的注冊商標。
MySQL是一個快速的、多線程、多用戶和健壯的SQL數據庫服務器。MySQL服務器支持關鍵任務、重負載生產系統的使用,也可以將它嵌入到一個大配置(mass-deployed)的軟件中去。
許可費用方面,MySQL的普及很大程度上源於它的寬松,除了略顯不尋常的許可費用。MySQL的價格隨平台和安裝方式變化。MySQL的Windows版本(NT和9X)在任何情況下都不免費,而任何Unix變種(包括Linux)的MySQL如果由用戶自己或系統管理員而不是第三方安裝則是免費的,第三方安裝則必須付許可費。1.2 MySQL服務安裝與配置
這裡將以MySQL源碼包在RedHat AS4上安裝配置來進行講解,在其他操作系統上的源碼包安裝都與此類似。
1.2.1 獲取MySQL
目前MySQL的最新穩定發行版本是5.0.33,可以在其官方下載地址 http://dev.mysql.com/downloads/MySQL/5.0.Html下載到。
注意:要找到頁面最下方的源碼包(Source downloads)Tarball (tar.gz)
在這個頁面我們還可以看到許多其他為特定操作系統版本編譯好的MySQL安裝包,可以針對特定操作系統無需安裝直接運行。1.2.2 安裝准備工作
首先要檢查操作系統是否安裝了所需要的軟件包,因為這裡安裝的的是源碼包因此要確認是否操作系統是否安裝了C語言編譯環境(gcc, libgcc等)
在命令行下以root身份查看是否正確安裝gcc
[root@as4 /]# rpm -aq|grep gcc
gcc-objc-3.4.3-9.EL4
compat-libgcc-296-2.96-132.7.2
compat-gcc-32-c++-3.2.3-47.3
libgcc-3.4.3-9.EL4
gcc-3.4.3-9.EL4此外,還要防止操作系統原有的MySQL包對新安裝的MySQL造成影響,因此不要讓系統自帶的MySQL影響到新安裝的MySQL,首先要卸載系統自帶的MySQL(注意:一般來說RedHat的發行版中帶的MySQL都不是最新版本)。我們可以通過以下步驟卸載系統自帶的MySQL。
1)[root@as4 /]# rpm -aq|grep MySQL
  MySQL-4.1.12-3.RHEL4.1
MySQLclIEnt10-3.23.58-4.RHEL4.1…
2) [root@as4 ]# rpm -e MySQL-4.1.12-3.RHEL4.1…1.2.3 開始安裝
把獲得的MySQL源碼包MySQL-5.0.33.tar.gz復制到/opt目錄下開始解壓
[root@as4 /]# cd /opt/
[root@as4 opt]# tar zxvf ./MySQL-5.0.33.tar.gz
為MySQL創建獨立用戶,一般來說這種獨立運行的數據庫都要創建一個獨立的系統用戶,有些數據庫是必須要獨立系統用戶的。
[root@as4 /]# useradd mysql -d /opt/MySQL-5.0. 33
[root@as4 /]# chown -R mysql.mysql /opt/MySQL-5.0. 33
創建2個重要目錄(數據和連接)
數據目錄用於存放MySQL的所有數據,而連接目錄是存放MySQL運行時的socket文件
[root@as4 /]# su C mysql 先切換到MySQL用戶
[MySQL@as4 ~]$ mkdir ./data
[MySQL@as4 ~]$ mkdir ./tmp開始預編譯
[mysql@as4 ~]$ ./configure --prefix=/opt/mysql-5.0.33 --localstatedir=/opt/mysql-5.0.33/data --with-unix-socket-path=/opt/mysql-5.0.33/tmp/mysql.sock --with-mysqld-user=MySQL --enable-large-files --with-big-tables --with-charset=utf8 --with-extra-charsets=latin1,latin2,latin5,latin7,gb2312,gbk
--prefix參數是指定MySQL的安裝目錄
--localstatedir是指定MySQL數據的存放目錄
--with-unix-socket-path是指定socket文件的存放路徑
--with-MySQLd-user是指定使用用戶
可以用configure Chelp查看可以使用的所有參數開始編譯
[MySQL@as4 ~]$ make
此過程相對來說會比較長,當然也跟機器的硬件配置有關開始安裝
[MySQL@as4 ~]$ make install
此步驟完成後MySQL軟件就安裝到系統了,安裝過程與Windows下的安裝有些不同,由於是源碼包安裝,因此很多參數都是要手工設置的安裝完的重要設置
進行初始化數據操作
[mysql@as4~]$ ./scripts/mysql_install_db --datadir=/opt/MySQL-5.0.33/data此步驟創建2個系統初始數據庫:mysql和test1.3 管理MySQL
在運行數據庫系統時, MySQL的使用相當簡單,且進行MySQL安裝和使用所需的工作也很少。MySQL的簡單性可能就是它極為普及的原因,尤其是在非程序員人群中的普及。當然,它對於訓練有素的計算機專業人員也是有幫助的,但肯定不是對運行一個成功的MySQL安裝程序的需求。
如果有管理其他數據庫系統的經驗,將會發現:運行MySQL的安裝程序在某些方面是類似的,您的經驗也是用得著的。但是MySQL的管理有自己獨特的需求,本書的這個部分將幫助您熟悉這些內容。管理職責概述MySQL數據庫系統由幾部分組成。您應該熟悉這些組成部分的內容和每個部分的目的。這需要您了解所管理系統的特征以及幫助您進行管理的可用工具。如果您花時間去了解了要監督的內容,工作將會變得非常容易。為此,您應當使自己熟悉MySQL的以下幾個方面:
MySQL服務器。服務器MySQL執行數據庫和表的所有操作。safe_MySQLd 是一個相關的程序,它用於啟動服務器、監控服務器和重新啟動服務器。
MySQL客戶機和實用程序。有幾個MySQL程序,可用來幫助您與服務器進行通信和執行管理的任務。其中最重要的幾個是:
MySQL,一個交互式程序,允許將SQL 語句發布到服務器上並浏覽其結果。
MySQLadmin,一個管理程序,允許執行諸如關閉服務器以及創建或刪除數據庫的工作。如果服務器運行不正常,還可以用MySQLadmin 來檢查服務器的狀態。
isamchk 和my i s a m c h k,這些實用程序幫助您完成表的分析和優化,以及在表損壞時進行崩潰恢復。
MySQLdump,一個工具,用於備份數據庫或將數據庫拷貝到另一個服務器中。
服務器的語言,SQL。有些管理職責只能用mysqladmin 的命令行實用程序來完成,但是,如果還能用服務器自己的語言來同服務器進行對話,那就更好了。沒有任何替代品能夠參與並與服務器直接通信。可通過使用mysql客戶機程序發布能夠檢驗授權表的SQL 查詢來做到這一點。如果MySQL版本還未引入GRANT 語句,則需要使用MySQL首先設置每個用戶的權限。
如果不知道SQL 的任何內容,至少必須對SQL要有基本的了解。缺乏對SQL 的熟悉只會帶來困惑,而在學習SQL 上所花費的時間將會得到成倍的回報。真正掌握SQL 要花費一些時間,但掌握基本技能則很快。
MySQL數據目錄。數據目錄是服務器存儲其數據庫和狀態文件的所在。了解數據目錄的結構及內容是很重要的,您可以知道服務器是怎樣使用文件系統來表現數據庫和表的,以及像日志這樣的文件的存放位置和其內容。還應該了解在文件系統中管理磁盤空間分配的選項,當發現放置數據目錄的文件系統過滿時可以進行調整。常規管理常規管理主要指處理mysqld、MySQL服務器和提供給用戶的訪問服務器的操作。在履行該職責時,下列的任務是最重要的:
服務器的啟動和關閉。應該能夠從命令行中手工啟動和終止服務器,並且在系統啟動和關閉時知道怎樣進行自動啟動和關閉。如果服務器崩潰了或啟動不正常的話,了解怎樣使服務器再次運行也是重要的。
用戶賬號維護。應該了解MySQL用戶和UNIX 或Windows 用戶之間的區別。應該知道怎樣通過指定哪些用戶可以連接到服務器和從哪裡進行連接來建立MySQL用戶賬號。還應該給新的用戶建議合適的連接參數,以使他們成功地連接到服務器。弄清應怎樣建立賬號不是用戶們的工作。
日志文件維護。應該了解可以維護的日志文件的類型,以及在何時和怎樣完成日志文件的維護。日志的循環和終止對於防止日志填滿文件系統是必要的。
數據庫備份和拷貝。數據庫備份對服務器系統的崩潰是至關重要的。應該能夠將數據庫恢復到崩潰時的狀態,以便盡可能地減少數據的丟失。請注意,數據庫備份與常規的系統備份不同,例如,可通過使用UNIX 的dump 程序來進行。與數據庫表相對應的文件在系統備份發生時隨服務器活動而變化,因此恢復那些文件將使您的表內部不一致。MySQLdump 程序將產生對恢復數據庫更有用的備份文件,並允許在不關閉服務器的狀態下創建備份。
如果決定在更快的主機上運行數據庫,或者想復制數據庫,則需要拷貝其內容到另一台機器上。如果需要的話,應該了解進行這項操作的過程。數據庫文件是依賴於系統的,因此您不能只拷貝這些文件。
服務器優化。用戶想要服務器以最佳狀態運行。提高服務器運行性能的最簡單方法?**郝蚋嗟哪诖婊蚴勾排趟俣雀臁5牽庵種苯亓說鋇募際醪⒉荒艽娑苑衿鞴ぷ鞯牧私狻SΩ昧私庥嘔衿鞑僮魉玫牟問約叭绾謂庑┎問τ迷谀幕肪持小T谀承┱鏡阒校蠖嗍檠際羌焖鳌6诹硪恍┱鏡悖迦牒透虜僮髡季葑龐攀啤Q≡穸閱男┎問行薷慕艿秸鏡悴檠撓跋臁?br />多服務器。在某些環境中運行多服務器是有用的。如果保留當前的成品安裝程序在適當的位置,或者為不同的用戶組提供較好的保密性(後者與ISP 尤其相關),則可以測試新的MySQL版本。對於這些情形,您應該了解怎樣建立多個同時發生的安裝。
MySQL更新。由於新的MySQL版本頻繁出現,應該知道怎樣始終跟上這些版本以便利用故障修復和新的特性。需要了解不進行版本升級的理由,並且掌握怎樣在穩定版本和開發者版本之間進行選擇。
1.3.1 啟動MySQL
[mysql@as4 /]$ ./bin/MySQLd_safe --no-defaults &
1) --no-defaults 參數是不使用默認值,默認設置的數據庫文件是存放在/var目錄下
2)&是後台運行
1.3.2 停止MySQL
[mysql@as4 ~]$ MySQLadmin shutdown -u root Cp
-u 是指定用戶
-p 是指定密碼在本機命令行下進入MySQL
mysql@as4 ~]$ MySQL
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.33
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
MySQL>
1.3.3 MySQL用戶管理
MySQL安裝好後默認的管理員帳號也是root(與OS的帳號名一樣),而密碼是空,但是只能從本機訪問,該默認帳號可以被刪除和修改。一、新增MySQL用戶
格式:grant select on 數據庫.* to 用戶名@登錄主機 identifIEd by "密碼"
例1、增加一個用戶test1密碼為abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MySQL,然後鍵入以下命令:
grant select,insert,update,delete on *.* to test1@"%" IdentifIEd by "abc";
但例1增加的用戶是十分危險的,如果某人知道test1的密碼,那麼他就可以在internet上的任何一台電腦上登錄這台MySQL數據庫並對數據可以為所欲為了,解決辦法見例1。
例1、增加一個用戶test2密碼為abc,使其只可以在localhost上登錄,並可以對數據庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MySQL數據庫所在的那台主機),這樣用戶即使用知道test2的密碼,也無法從internet上直接訪問數據庫,只能通過MySQL主機上的web頁來訪問了。
grant select,insert,update,delete on mydb.* to test2@localhost identifIEd by "abc";
如果你不想test2有密碼,可以再打一個命令將密碼消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identifIEd by "";
二、修改MySQL用戶的方法,這裡講兩種方法
1) 以root登陸後直接用SQL語句修改系統庫MySQL中的user表
[mysql@as4 mysql]$ mysql -u root Cp(在命令行下用root身份進入MySQL)
mysql> use MySQL; (選擇系統數據庫)
mysql> update user set password=password('654321') where user='root' (將root用戶的密碼改成654321,注意要加函數passWord(),因為MySQL中密碼是采用MD5算法進行加密的,如果不用該函數密碼將以明文存儲,這樣在登陸的時候系統把654321用MD5算法一計算後就跟表user中存出的654321密碼不一致了,這樣你就登陸不了了)
mysql> flush privileges; (提交你的修改請求)2) 直接在bash shell命令行下用MySQLadmin這個命令修改
[mysql@as4 mysql]$ MySQLadmin -u root -p654321 passWord 123456
(將來root用戶的密碼從654321修改為123456)
添加一個遠程管理MySQL的用戶
[mysql@as4 ~]$ MySQL
mysql> grant all privileges on *.* to mysql@'192.168.0.0/255.255.0.0' identifIEd by 'MySQL';
MySQL> \q
以上命令可以添加一個可以從192.168.0.0/16IP段訪問MySQL服務器上所有數據庫的用戶,其中帳號是mysql,口令是MySQL三、常用命令行操作
1 顯示命令
1)顯示數據庫列表。
show databases;
剛開始時才兩個數據庫:mysql和test。mysql庫很重要它裡面有MySQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。
2)顯示庫中的數據表:
  use MySQL;   //打開庫,學過FOXBASE的一定不會陌生吧
  show tables;
3)顯示數據表的結構:
  describe 表名;
4)顯示表中的記錄:
select * from 表名;
2 創建/刪除命令
1) 建庫:
create database 庫名;
2) 建表:
  use 庫名;
  create table 表名 (字段設定列表);
3) 刪庫和刪表:
drop database 庫名;
drop table 表名;
4) 將表中記錄清空:
delete from 表名;3 一個建庫和建表以及插入數據的實例
drop database if exists book; //如果存在book庫則刪除
create database book;   //建立庫book
use book;     //打開庫book
create table storybook   //建立表storybook
(
id int(3) auto_increment not null primary key,
name char(10) not null,
author varchar(50) default '張三',
public_date date
);         //建表結束
//以下為插入字段  
insert into storybook values('','MySQL數據庫優化','李四','2006-12-15');
insert into storybook values('','精通PostgreSQL數據庫','王五','2006-09-11'); 注:在建表中
(1)將id設為長度為3的數字字段:int(3)並讓它每個記錄自動加一:auto_increment並不能為空:not null而且讓他成為主字段primary key
(2)將name設為長度為10的字符字段
(3)將author設為長度50的字符字段,而且缺省值為張三。varchar和char有什麼區別呢,簡單說,varchar是不固定長度的字符串,char?**潭ǔざ鵲淖址?br />(4)將public_date設為日期字段。
如果在mysql提示符鍵入上面的命令也可以,但不方便調試。可以將以上命令原樣寫入一個文本文件中假設為book.sql,然後復制到/tmp下,並在命令行狀態進入目錄MySQL/bin,然後鍵入以下命令:
  MySQL Cu root -p密碼 < /tmp/book.sql
如果成功,空出一行無任何顯示;如有錯誤,會有提示。4 將文本數據轉到數據庫中
1) 文本數據應符合的格式:字段數據之間用tab鍵隔開,null值用n來代替.
例:
5 Linux基礎教程 王五 2006-12-21
6 Linux中級教材 張三 2006-12-11
2) 數據傳入命令
use book;  
SELECT   *   FROM storybook   INTO   OUTFILE   '/tmp/myfile_name';  
恢復的方法:  
USE   book;  
LOAD   DATA   INFILE   '/tmp/myfile_name '   INTO   TABLE   book;
  注:該導出/導入方法僅僅是操作表中的數據,並且導出表的導入表的字段個數和類型必須完全一樣。四、導出/導入數據
除了用mysqldump來導出MySQL數據,還可以用 SQL 語法進行備份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者備份二進制日志(binlog),還可以是直接拷貝數據文件和相關的配置文件。MyISAM 表是保存成文件的形式,因此相對比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個數據文件 ibdata1 中(也可能是多個文件,或者是獨立的表空間文件),相對來說比較不好備份,開源的方案可以是拷貝數據文件、備份 binlog,或者用 MySQLdump。
1) 導出
mysqldump 是采用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。
現在來講一下 MySQLdump 的一些主要參數:
--compatible=name
它告訴 MySQLdump,導出的數據將和哪種數據庫或哪個舊版本的 MySQL 服務器相兼容。值可以為 ansi、mysql323、MySQL40、postgresql、Oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_fIEld_options 等,要使用幾個值,用逗號將它們隔開。當然了,它並不保證能完全兼容,而是盡量兼容。 --complete-insert,-c
導出的數據采用包含字段名的完整 INSERT 方式,也就是把所有的值都寫在一行。這麼做能提高插入效率,但是可能會受到 max_allowed_packet 參數的影響而導致插入失敗。因此,需要謹慎使用該參數,至少我不推薦。 --default-character-set=charset
指定導出數據時采用何種字符集,如果數據表不是采用默認的 latin1 字符集的話,那麼導出時必須指定該選項,否則再次導入數據後將產生亂碼問題。--disable-keys
告訴 MySQLdump 在 INSERT 語句的開頭和結尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度,因為它是在插入完所有數據後才重建索引的。該選項只適合 MyISAM 表。--extended-insert = true|false
默認情況下,MySQLdump 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設定它的值為 false 即可。 --hex-blob
使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用本選項。影響到的字段類型有 BINARY、VARBINARY、BLOB。--lock-all-tables,-x
在開始導出之前,提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉 --single-transaction 和 --lock-tables 選項。--lock-tables
它和 --lock-all-tables 類似,不過是鎖定當前導出的數據表,而不是一下子鎖定全部庫下的表。本選項只適用於 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項。--no-create-info,-t
只導出數據,而不添加 CREATE TABLE 語句。--no-data,-d
不導出任何數據,只導出數據庫表結構。--opt
這只是一個快捷選項,等同於同時添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqldump 很快的導出數據,並且導出的數據能很快導回。該選項默認開啟,但可以用 --skip-opt 禁用。注意,如果運行 MySQLdump 沒有指定 --quick 或 --opt 選項,則會將整個結果集放在內存中。如果導出大數據庫的話可能會出現問題。--quick,-q
該選項在導出大表時很有用,它強制 MySQLdump 從服務器查詢取得記錄直接輸出而不是取得所有記錄後將它們緩存到內存中。--routines,-R
導出存儲過程以及自定義函數。--single-transaction
該選項在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會使任何掛起的事務隱含提交。
要想導出大表的話,應結合使用 --quick 選項。 --triggers
同時導出觸發器。該選項默認啟用,用 --skip-triggers 禁用它。其他參數詳情請參考手冊,通常使用以下 SQL 來備份 MyISAM 表:/usr/local/mysql/bin/MySQLdump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql
使用以下 SQL 來備份 Innodb 表:/usr/local/mysql/bin/MySQLdump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
另外,如果想要實現在線備份,還可以使用 --master-data 參數來實現,如下:/usr/local/mysql/bin/MySQLdump -umyuser -pmypasswd \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name > db_name.sql
它只是在一開始的瞬間請求鎖表,然後就刷新binlog了,而後在導出的文件中加入CHANGE MASTER 語句來指定當前備份的binlog位置,如果要把這個文件恢復到slave裡去,就可以采用這種方法來做。2)導入
用MySQLdump 備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數據導入。
直接用 MySQL 客戶端
例如:
/usr/local/mysql/bin/MySQL -umyuser -pmypasswd db_name < db_name.sql用 SOURCE 語法
其實這不是標准的 SQL 語法,而是 MySQL 客戶端提供的功能,例如:SOURCE /tmp/db_name.sql;
這裡需要指定文件的絕對路徑,並且必須是 MySQLd 運行用戶(例如 nobody)有權限讀取的文件。3)SQL 語法備份
(1)備份
BACKUP TABLE 語法其實和 MySQLhotcopy 的工作原理差不多,都是鎖表,然後拷貝數據文件。它能實現在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結構文件和數據文件,不同時拷貝索引文件,因此恢復時比較慢。
例子:BACK TABLE tbl_name TO '/tmp/db_name/';
注意,必須要有 FILE 權限才能執行本SQL,並且目錄 /tmp/db_name/ 必須能被 MySQLd 用戶可寫,導出的文件不能覆蓋已經存在的文件,以避免安全問題。 SELECT INTO OUTFILE 則是把數據導出來成為普通的文本文件,可以自定義字段間隔的方式,方便處理這些數據。
例子:SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注意,必須要有 FILE 權限才能執行本SQL,並且文件 /tmp/db_name/tbl_name.txt 必須能被 MySQLd 用戶可寫,導出的文件不能覆蓋已經存在的文件,以避免安全問題。 (2)恢復
用 BACKUP TABLE 方法備份出來的文件,可以運行 RESTORE TABLE 語句來恢復數據表。
例子:RESTORE TABLE FROM '/tmp/db_name/';
權限要求類似上面所述。用 SELECT INTO OUTFILE 方法備份出來的文件,可以運行 LOAD DATA INFILE 語句來恢復數據表。
例子:LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
權限要求類似上面所述。倒入數據之前,數據表要已經存在才行。如果擔心數據會發生重復,可以增加 REPLACE 關鍵字來替換已有記錄或者用 IGNORE 關鍵字來忽略他們。
4)簡易導入導出方法
(1)導出數據庫:(命令在MySQL/bin目錄下)
MySQLdump --opt book>book.bak //沒有設置密碼的時候
MySQLdump -u root Cp123456 --opt book > book.bak //密碼被設置為123456的時候
MySQLdump --opt book storybook magazine > /tmp/book.storybook.magazine.sql
注釋:將數據庫book中的storybook表和magazine表備份到/tmp/book.storybook.magazine.sql文件,book.storybook.magazine.sql是一個文本文件,文件名任取,打開看看會有新發現。
備份的另外一種方法:(要有操作相應文件的權限。)   (2)從導出文件導入數據:
  導入數據表
MySQL>source book.storybook.magazine.sql;
  導入數據庫
shell> MySQLadmin -h localhost -u root -p123 create target_db_name
shell> MySQL -h localhost -u root -p123 target_db_name < 文件名注釋:將數據庫book備份到book.bak文件,book.bak是一個文本文件,文件名任取,打開看看會有新發現。5)備份/恢復數據表
(1)備份
[mysql@as4 ~]$ MySQLdump -u root -p --opt test storybook > /tmp/my1.bak此命令是以root身份把test數據庫中的storybook表結構和記錄備份到/tmp/my1.bak(2)恢復
[mysql@as4 ~]$ MySQL -u root -p test < /tmp/my1.bak把剛才備份的storybook表結構和記錄文件my1.bak恢復到test數據庫中,表名還是storybook注:如果恢復的時候是先將庫中的表刪除,然後在把表文件復制成表,存入數據庫
1.3.4 開機自動啟動MySQL方法
一、加到開機自動執行文件中
[root@as4 /]# vi /etc/rc.d/rc.local
添加一行
su - mysql -c "/opt/mysql-5.0.33/bin/MySQLd_safe --no-defaults &"
先切換成mysql用戶身份,然後在啟動MySQL服務。二、把MySQL作為系統的一個服務
先編輯一個mysql服務文件MySQL5
把MySQL5文件復制到/etc/rc.d/init.d/,並增加可執行權限。
[root@as4 /]# chmod 755 /etc/init.d/MySQL5
把MySQL5添加到服務列表
[root@as4 /]# chkconfig --add MySQL5
然後選擇讓MySQL5在開機的時候自動啟動
[root@as4 /]# chkconfig --level 3 mysql5 onMySQL作為系統服務的啟動腳本
[root@as4 ~]# vi /etc/init.d/MySQL5
#!/bin/bash
#
# Startup script for the MySQL 5.0.33 Server
#
# chkconfig: - 92 27
# description: MySQL Server.# processname: MySQL5
export MYSQL_BASE=/opt/MySQL-5.0.33
PROFILEDIR=/var/run/MySQLstart(){
  if [ -f $PROFILEDIR/MySQL_PID ]; then
  echo "MySQL Server has been Running!!"
else
  if [ -f $MYSQL_BASE/bin/MySQLd_safe ]; then
    su - mysql -c "$MYSQL_BASE/bin/mysqld_safe --defaults-file=$MySQL_BASE/my.cnf >/dev/null 2>&1 &"
    sleep 3
    head -n 1 $MYSQL_BASE/data/as4.pid >$PROFILEDIR/MySQL_PID
    echo "Startting MySQL"
  else
    echo "MySQL File Not Founds"
  fi
fi
}
stop() {
if [ -f $PROFILEDIR/MySQL_PID ]; then
  # Stop the MySQL Server 5.0.33
  su - mysql -c "rm -f $PROFILEDIR/MYSQL_PID;$MYSQL_BASE/bin/mysqladmin shutdown -u root -S $MYSQL_BASE/tmp/MySQL.sock;"
  echo "Stopping MySQL"
else
  echo "Not Running MySQL"
fi
}restart() {
if [ -f $PROFILEDIR/MySQL_PID ]; then
  # Restart the MySQL Server
  stop
  start
else
  echo "Not Running MySQL"
fi
}
case "$1" in
  'start')
    # Start the MySQL Server 5.0.33
    start
    ;;
  'stop')
  # Stop the MySQL Server 5.0.33
  stop
  ;;
  'restart')
  # Restart the MySQL Server 5.0.33
  restart
  ;;
  *)
  echo "Usage; `basename $0` {start|stop|restart}" 1>&2
  exit 1
  ;;
esac
exit 0查看 MySQL是否已經運行
1) 用netstat命令查看
[root@as4 ~]# netstat -nplt | grep MySQL
tcp 0   0 0.0.0.0:3306   0.0.0.0:*     LISTEN     3773/MySQLd
MySQL默認監聽端口是3306
2) 查看系統進程
[root@as4 ~]# ps aux|grep mysql1.3.5 MySQL安全
MySQL管理員有責任保證數據庫內容的安全性,使得這些數據記錄只能被那些正確授權的用戶訪問,這涉及到數據庫系統的內部安全性和外部安全性。
內部安全性關心的是文件系統級的問題,即,防止MySQL數據目錄(DATADIR)被在服務器主機有賬號的人(合法或竊取的)進行攻擊。如果數據目錄內容的權限過分授予,使得每個人均能簡單地替代對應於那些數據庫表的文件,那麼確保控制客戶通過網絡訪問的授權表設置正確,對此毫無意義。
外部安全性關心的是從外部通過網絡連接服務器的客戶的問題,即,保護MySQL服務器免受來自通過網絡對服務器的連接的攻擊。你必須設置MySQL授權表(grant table),使得他們不允許訪問服務器管理的數據庫內容,除非提供有效的用戶名和口令。
當運行MySQL安裝程序時,確保用戶所存儲的數據的安全性是很重要的。MySQL管理員有責任控制對數據目錄和服務器的訪問,並應了解以下的問題:
文件系統的安全性。UNIX 機器可能會使幾個用戶賬號成為宿主賬號,而這些賬號都沒有與MySQL相關的管理職責。確保這些賬號沒有對數據目錄的訪問是重要的。因為這樣可以防止它們通過拷貝數據庫表或移動數據庫表,或者通過能夠讀取包含敏感信息的日志文件來損壞文件系統級的數據。您應該知道如何建立MySQL服務器的UNIX用戶賬號,如何建立該用戶所擁有的數據目錄,以及如何啟動服務器以便利用該用戶的權限運行。
服務器的安全性。必須了解MySQL的安全系統是怎樣進行工作的,以便在建立用戶賬號時授予適當的權限。通過網絡連接到服務器的用戶只允許做他們應該做的事情。您不要由於對安全系統的錯誤理解,將超級用戶的訪問權授予匿名用戶
1.3.6 MySQL常用SQL語句
一、表的三種基本操作:插入記錄、刪除記錄、更新記錄、 這個和sql server是一樣的,你在SQL SERVER裡面怎麼操作,在MySQL裡面就怎麼操作!沒什麼大區別,當然小區別還是有的。比如;insert命令,SQL Server2000 一次只能插入一條記錄,MySQL可以插入多條記錄。
Insert into 表 (字段表列表) values(字段值),(字段值)……
刪除,更新和其他數據庫沒有什麼區別,不再累述。1、刪除數據庫:DROP DATABASE 數據庫名
2、刪除表:   DROP TABLE   表名
3、表改名:   RENAME TABLE 舊表中 TO 新表名 數據庫不能改名,但也不是絕對不能改,但改不好會造成裡面的數據無法正常讀出。
4、庫改名: 常用方法是把新庫創建出來,然後把舊庫裡的數據導入進去。二、查詢: 這是SQL中的一大塊
SELECT 查詢:此命令和其他數據庫的沒有什麼大差別,關鍵是大家要熟練運用各種運算符,數學運算符比較簡單,重點在於字符型運算符LIKE、關系運算符和邏輯運算符
如:查找姓王的記錄:SELECT * FROM YUANGONG WHERE 姓名 like '王%';
查找姓名中有五的記錄:SELECT * FROM YUANGONG WHERE 姓名 like '%王%';
查找以王結尾的記錄:SELECT * FROM YUANGONG WHERE 姓名 like '%王';
其中linit是SQL Server沒有的。
例如:顯示第三條到第七條記錄
select * from 表名 limit 2,5;
通配符   描述   示例
%   通配零個或多個任意字符  
_(下劃線)   通配任意一個字符  
不再含有 [ ] 不同於SQL Server
注意:如果用like發現結果不正確,有可能是編碼的問題三、記錄排序
利用order by 對記錄進行排序
格式:select 字段名列表 from 表名 [where 條件] order by 排序字段1 [asc ] [desc] [排序字段2……]
如:按年齡對yuangong表進行升序排列
Select * from yuangong order by 年齡 asc 或 select * from yuangong order by 年齡
如:按年齡對yuangong表進行降序排列
Select * from yuangong order by 年齡 desc
對員工表先按性別升序排列,性別相同的再按年齡從大到小排序
Select * from 員工表   order by   性別 asc,年齡 desc 四、聚集函數:
最大值:max()     最小值 min()   平均值avg()
求和:   sum()     匯總: count ()如:求每個部門的基本工資平均值
select 部門,avg(基本工資) as 部門基本工資 from 員工表 group by 部門顯示平均基本工資大於3000的部門
Select 部門,avg(基本工資) from 員工表 group 部門 where avg(基本工資)>3000
此句錯誤。SQL規定在分組中使用條件不能用 WHERE 而是用 having
Select 部門,avg(基本工資) from 員工表 group by 部門 having avg(基本工資)>3000
五、多表查詢:
一個數據庫中的多個表,存在一定的聯系,怎麼樣正常的顯示這麼表的信息?
現在有三個表:
yg
Name sex age
宋洋 男   20
馬冬旭 女   40 gs
Name   title     date       單位
宋洋   AD詳解 2006-11-10   清華大學
馬冬旭 Linux   2005-01-01   人民大學dz
單位       地址
清華大學   五道口
人民大學   黃莊
第一種方法稱為:交叉連接,在SQL Server中又稱為笛卡爾乘積
但是要注意的默認生成的記錄總數是兩表記錄之積
select * from yg,gs;
select * from yg,gs where yg.name=gs.name;
這才是我們想要的記錄
第二種方法是用join連接:
內連接
select * from yg join gs on yg.name=gs.name
左外連接
右外連接
但沒有全外連接
六、聯合:
除了連接,MySQL4.0以上的版本還支持UNION運算符,它用來把多個select查詢號的輸出連接成一個單獨的結果集。大多數情況下,這個運算符用來把查詢產生的結果集添加到不同的表,同時創建包括所有結果的一個單獨表。比如面試的時候問你,有兩個表,字段信息一樣,讓你用一條語句把兩個表的信息組合為一個單獨的表!
為了說明UNION運算符的使用方法,我們舉一個例子:現在有兩個表,分別存放的是男同學信息和女同學信息,如果用一個語句將所有同學的信息顯示出來!
MySQL> select * from nan;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聰留 |   80 |
| 費優優 |   81 |
| 曲權   |   82 |
+--------+-------+
3 rows in set (0.00 sec)   MySQL> select * from nv;
+------+-------+
| name | score |
+------+-------+
| 彭紅 |   80 |
| 費紅 |   81 |
| 曲紅 |   82 |
+------+-------+
3 rows in set (0.00 sec)MySQL> select * from nan union select * from nv;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聰留 |   80 |
| 費優優 |   81 |
| 曲權   |   82 |
| 彭紅   |   80 |
| 費紅   |   81 |
| 曲紅   |   82 |
+--------+-------+
6 rows in set (0.00 sec)
那如果有三個表怎麼辦?也是一樣的操作。但注意的是如果兩個表的某條記錄信息完全一致,則只顯示為一條;如果想顯示全部記錄則在union後 加 all
MySQL> select * from nan union all select * from nv;
如果想把顯示的信息保存到一個表中怎麼辦?
MySQL> create table 表名 select 語句;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved