【轉】Centos下MySQL使用總結

來源:http://www.centoscn.com/CentOS/Intermediate/2013/0817/1334.html

時間:2013-08-17 17:00 來源:quanpower  做者:本站  舉報  點擊:24857次

1、MySQL安裝

   

 Centos下安裝mysql 請點開:http://www.centoscn.com/CentosServer/sql/2013/0817/1285.htmlphp

 

2、MySQL的幾個重要目錄

 

    MySQL安裝完成後不象SQL Server默認安裝在一個目錄,它的數據庫文件、配置文件和命令文件分別在不一樣的目錄,瞭解這些目錄很是重要,尤爲對於Linux的初學者,由於 Linux自己的目錄結構就比較複雜,若是搞不清楚MySQL的安裝目錄那就無從談起深刻學習。  html

下面就介紹一下這幾個目錄。  mysql

2.一、數據庫目錄  

/var/lib/mysql/   web

2.二、配置文件  

/usr/share/mysql(mysql.server命令及配置文件)  sql

2.三、相關命令  

/usr/bin(mysqladmin mysqldump等命令)   數據庫

2.四、啓動腳本  

/etc/rc.d/init.d/(啓動腳本文件mysql的目錄)centos

 

3、登陸MySQL 

 

3.一、鏈接本機MySQL

    例1:鏈接到本機上的MYSQL。服務器

        首先在打開DOS窗口,而後進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車後提示你輸密碼,若是剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車便可進入到MYSQL中了,MYSQL的提示符 是:mysql>。socket

3.二、鏈接遠程MySQL

    例2:鏈接到遠程主機上的MYSQL。假設遠程主機的IP爲:110.110.110.110,用戶名爲root,密碼爲abcd123。則鍵入如下命令:ide

        mysql -h110.110.110.110 -uroot -pabcd123

        (注:u與root能夠不用加空格,其它也同樣)

3.三、退出MYSQL

命令: exit (回車)。


4、修改登陸密碼  

   

    MySQL默認沒有密碼,安裝完畢增長密碼的重要性是不言而喻的。

格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

4.一、首次改密碼

例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,而後鍵入如下命令:

        mysqladmin -uroot -password ab12

        注:由於開始時root沒有密碼,因此-p舊密碼一項就能夠省略了。

4.二、再次改密碼

例2:再將root的密碼改成djg345。

        mysqladmin -uroot -pab12 password djg345


5、增長用戶

    

    (注意:和上面不一樣,下面的由於是MySQL環境中的命令,因此後面都帶一個分號做爲命令結束符)

        格式:grant select on 數據庫.* to 用戶名@登陸主機 identified by \"密碼\"

        例一、增長一個用戶test1密碼爲abc,讓他能夠在任何主機上登陸,並對全部數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MySQL,而後鍵入如下命令:

        grant select,insert,update,
        delete on *.* to test1@\"%\" Identified by \"abc\";

        但例1增長的用戶是十分危險的,你想如某我的知道test1的密碼,那麼他就能夠在internet上的任何一臺電腦上登陸你的MySQL數據庫並對你的數據能夠隨心所欲了,解決辦法見例2。

        例二、增長一個用戶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,

在登陸時用以下命令:  mysql -u user_1 -p -h 192.168.113.50 (-h後跟的是要登陸主機的ip地址) 

 

6、啓動與中止  

 

6.一、啓動  

MySQL安裝完成後啓動文件mysql在/etc/init.d目錄下,在須要啓動時運行下面命令便可。  

[root@test1 init.d]# /etc/init.d/mysql start   

6.二、中止  

/usr/bin/mysqladmin -u root -p shutdown   

6.三、自動啓動  

6.3.一、察看mysql是否在自動啓動列表中  

[root@test1 local]# /sbin/chkconfig –list   

6.3.二、把MySQL添加到你係統的啓動服務組裏面去  

[root@test1 local]# /sbin/chkconfig – add mysql   

6.3.三、把MySQL從啓動服務組裏面刪除。  

[root@test1 local]# /sbin/chkconfig – del mysql

 

7、更改MySQL目錄  

 

    MySQL默認的數據文件存儲目錄爲/var/lib/mysql。

假如要把目錄移到/home/data下須要進行下面幾步:  

7.一、home目錄下創建data目錄  

cd /home   mkdir data   

7.二、把MySQL服務進程停掉:   

mysqladmin -u root -p shutdown   

7.三、把/var/lib/mysql整個目錄移到/home/data   

mv /var/lib/mysql /home/data/   

這樣就把MySQL的數據文件移動到了/home/data/mysql下  

7.四、找到my.cnf配置文件  

若是/etc/目錄下沒有my.cnf配置文件,請到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個到/etc/並更名爲my.cnf)中。

命令以下:  

[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf   

7.五、編輯MySQL的配置文件/etc/my.cnf   

爲保證MySQL可以正常工做,須要指明mysql.sock文件的產生位置。

修改socket=/var/lib/mysql/mysql.sock一行中等號右邊的值爲:/home/mysql/mysql.sock 。

操做以下:  

vi  my.cnf   

(用vi工具編輯my.cnf文件,找到下列數據修改之)   

# The MySQL server     [mysqld]    

port   = 3306    

#socket  = /var/lib/mysql/mysql.sock(原內容,爲了更穩妥用「#」註釋此行)   

socket  = /home/data/mysql/mysql.sock   (加上此行)  

7.六、修改MySQL啓動腳本/etc/rc.d/init.d/mysql   

最後,須要修改MySQL啓動腳本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等號右邊的路徑改爲你如今的實際存放路徑:home/data/mysql。  

[root@test1 etc]# vi /etc/rc.d/init.d/mysql   

#datadir=/var/lib/mysql    (註釋此行)  

datadir=/home/data/mysql   (加上此行)  

7.七、從新啓動MySQL服務  

/etc/rc.d/init.d/mysql start   

或用reboot命令重啓Linux   

若是工做正常移動就成功了,不然對照前面的7步再檢查一下。  

 

8、MySQL的經常使用操做  

 

注意:MySQL中每一個命令後都要以分號;結尾。 

8.一、MySQL經常使用操做命令 

8.1.一、顯示數據庫列表:

        show databases;

        剛開始時才兩個數據庫:mysql和test。MySQL庫很重要它裏面有MYSQL的系統信息,咱們改密碼和新增用戶,實際上就是用這個庫進行操做。

8.1.二、顯示庫中的數據表:

        use mysql; //打開庫,學過FOXBASE的必定不會陌生吧

        show tables;

8.1.三、顯示數據表的結構:

        describe 表名;

8.1.四、建庫:

        create database 庫名;

8.1.五、建表:

        use 庫名;

        create table 表名 (字段設定列表);

8.1.六、刪庫和刪表:

        drop database 庫名;

        drop table 表名;

8.1.七、將表中記錄清空:

        delete from 表名;

8.1.八、顯示錶中的記錄:

        select * from 表名;

8.1.九、增長記錄  

例如:增長几條相關紀錄。  

mysql> insert into name values('','張三','男','1971-10-01');   

mysql> insert into name values('','白雲','女','1972-05-20');   

可用select命令來驗證結果。  

mysql> select * from name;   

+----+------+------+------------+   

| id | xm  | xb  | csny    |   

+----+------+------+------------+   

| 1 | 張三 | 男  | 1971-10-01 |   

| 2 | 白雲 | 女  | 1972-05-20 |   

+----+------+------+------------+   

8.1.十、修改紀錄  

例如:將張三的出生年月改成1971-01-10   

mysql> update name set csny='1971-01-10' where xm='張三';   

8.1.十一、刪除紀錄  

例如:刪除張三的紀錄。  

mysql> delete from name where xm='張三';   


8.二、一個建庫和建表以及插入數據的實例

        drop database if exists school; //若是存在SCHOOL則刪除

        create database school; //創建庫SCHOOL

        use school; //打開庫SCHOOL

        create table teacher //創建表TEACHER

        (

        id int(3) auto_increment not null primary key,

        name char(10) not null,

        address varchar(50) default ’深圳’,

        year date

        ); //建表結束

        //如下爲插入字段

        insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);

        insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);

        注:在建表中(1)將ID設爲長度爲3的數字字段:int(3)並讓它每一個記錄自動加一:auto_increment並不能爲空:not null並且讓他成爲主字段primary key(2)將NAME設爲長度爲10的字符字段(3)將ADDRESS設爲長度50的字符字段,並且缺省值爲深圳。varchar和char有什麼區別 呢,只有等之後的文章再說了。(4)將YEAR設爲日期字段。

        若是你在MySQL提示符鍵入上面的命令也能夠,但不方便調試。你能夠將以上命令原樣寫入一個文本文件中假設爲school.sql,而後複製到c:\\下,並在DOS狀態進入目錄\\mysql\\bin,而後鍵入如下命令:

        mysql -uroot -p密碼 < c:\\school.sql

        若是成功,空出一行無任何顯示;若有錯誤,會有提示。(以上命令已經調試,你只要將//的註釋去掉便可使用)。


 

九 、修改數據庫結構

 

9.一、字段操做

9.1.一、增長字段

alter table dbname add column <字段名><字段選項>

9.1.二、修改字段

alter table dbname change <舊字段名> <新字段名><選項>

9.1.三、刪除字段

alter table dbname drop column <字段名>

 

10、數據導出

 

    數據導出主要有如下幾種方法:

  使用select into outfile "filename"語句

  使用mysqldump實用程序

10.一、使用select into outfile "filename"語句

能夠在mysql的命令行下或在php程序中執行它。我下面以在mysql命令行下爲 例。在php中使用時,將其改爲相應的查詢進行處理便可。不過在使用這個命令時,要求用戶擁有file的權限。如咱們有一個庫爲phptest,其中有一 個表爲driver。如今要把driver卸成文件。執行命令:

  mysql> use phptest;

  Database Changed

  mysql> select * from driver into outfile "a.txt";

  Query OK, 22 rows affected (0.05 sec)

上面就能夠完成將表driver從數據庫中卸到a.txt文件中。注意文件名要加單引 號。那麼這個文件在哪呢?在mysql目錄下有一個data目錄,它便是數據庫文件所放的地方。每一個庫在單獨佔一個子目錄,因此phptest的目錄爲 c:\mysql\data\phptest(注意:個人mysql安裝在c:\mysql下)。好,如今咱們進去,a.txt就是它。打開這個文件,可 能是:

  1 Mika Hakinnen 1

  2 David Coulthard 1

  3 Michael Schumacher 2

  4 Rubens Barrichello 2

  ...

可能還有不少記錄。每一個字段之間是用製表符分開的(\t)。那麼咱們能夠修改輸出文件 名的目錄,以便放在指定的位置。如"a.txt"能夠改爲"./a.txt"或"/a.txt"。其中"./a.txt"放在c:\mysql\data 目錄下了,而"/a.txt"文件則放在c:\目錄下了。因此select命令認爲的當前目錄是數據庫的存放目錄,這裏是c:\mysql\data。

使用select命令還能夠指定卸出文件時,字段之間的分隔字符,轉義字符,包括字符,及記錄行分隔字符。列在下面:

  FIELDS

  TERMINATED BY "\t"

  [OPTIONALLY] ENCLOSED BY ""

  ESCAPED BY ""

  LINES

  TERMINATED BY "\n"

 

  TERMINATED 表示字段分隔

 

  [OPTIONALLY] ENCLOSED 表示字段用什麼字符包括起來,若是使用了OPTIONALLY則只有CHAR和VERCHAR被包括ESCAPED 表示當須要轉義時用什麼做爲轉義字符LINES TERMINATED 表示每行記錄之間用什麼分隔上面列的是缺省值,並且這些項都是可選的,不選則使用缺省值。能夠根據須要進行修改。給出一個例子以下:

  mysql> select * from driver into outfile "a.txt" fields terminated by ","

  enclosed by """;

  Query OK, 22 rows affected (0.06 sec)

結果可能以下:

  "1","Mika","Hakinnen","1"

  "2","David","Coulthard","1"

  "3","Michael","Schumacher","2"

  "4","Rubens","Barrichello","2"

  ...

能夠看到每一個字段都用","進行了分隔,且每一個字段都用"""包括了起來。注意,行記錄分隔符能夠是一個字符串,請你們自行測試。不過,若是輸出文件在指定目錄下若是存在的話就會報錯,先刪除再測試便可。

10.二、使用mysqldump實用程序

從上面的select方法能夠看出,輸出的文件只有數據,而沒有表結構。並且,一次只 能處理一個表,要處理多個表則不是很容易的。不過能夠將select命令寫入一個sql 文件(複製文本應該是很容易的吧),而後在命令行下執行便可:mysql 庫名先來個最簡單的吧:

mysqldump phptest > a.sql

可能結果以下:

  # MySQL dump 7.1

  #

  # Host: localhost Database: phptest

  #--------------------------------------------------------

  # Server version 3.22.32-shareware-debug

  #

  # Table structure for table "driver"

  #

  CREATE TABLE driver (

  drv_id int(11) DEFAULT "0" NOT NULL auto_increment,

  drv_forename varchar(15) DEFAULT "" NOT NULL,

  drv_surname varchar(25) DEFAULT "" NOT NULL,

  drv_team int(11) DEFAULT "0" NOT NULL,

  PRIMARY KEY (drv_id)

  );

  #

  # Dumping data for table "driver"

  #

 

  INSERT INTO driver VALUES (1,"Mika","Hakinnen",1);

  INSERT INTO driver VALUES (2,"David","Coulthard",1);

  INSERT INTO driver VALUES (3,"Michael","Schumacher",2);

  INSERT INTO driver VALUES (4,"Rubens","Barrichello",2);

  ...

 

  若是有多表,則分別列在下面。能夠看到這個文件是一個完整的sql文件,若是要將 其導入到其它的數據庫中能夠經過命令行方式,很方便:mysql phptest < a.sql。若是將數據從本地傳到服務器上,則能夠將這個文件上傳,而後在服務器經過命令行方式裝入數據。

若是隻想卸出建表指令,則命令以下:

  mysqldump -d phptest > a.sql

若是隻想卸出插入數據的sql命令,而不須要建表命令,則命令以下:

  mysqldump -t phptest > a.sql

那麼若是我只想要數據,而不想要什麼sql命令時,應該如何操做呢?

  mysqldump -T./ phptest driver

其中,只有指定了-T參數才能夠卸出純文本文件,表示卸出數據的目錄,./表示當前目 錄,即與mysqldump同一目錄。若是不指定driver表,則將卸出整個數據庫的數據。每一個表會生成兩個文件,一個爲.sql文件,包含建表執行。 另外一個爲.txt文件,只包含數據,且沒有sql指令。

對卸出的數據文件,也能夠同select方法同樣,指定字段分隔符,包括字符,轉義字段,行記錄分隔符。參數列在下面:

  --fields-terminated-by= 字段分隔符

  --fields-enclosed-by= 字段包括符

  --fields-optionally-enclosed-by= 字段包括符,只用在CHAR和VERCHAR字段上

  --fields-escaped-by= 轉義字符

  --lines-terminated-by= 行記錄分隔符

我想你們應該明白這些參數的意思了吧。一個例子以下:

  mysqldump -T./ --fields-terminated-by=, --fields-enclosed-by=" phptest driver

輸出結果爲:

  "1","Mika","Hakinnen","1"

  "2","David","Coulthard","1"

  "3","Michael","Schumacher","2"

  "4","Rubens","Barrichello","2"

  ...

請注意字符的使用。

10.三、小結

以上爲使用select和mysqldump實用程序來卸出文本的方法。select適合利用程序進行處理,而mysqldump則爲手工操做,同時提供強大的導出功能,而且能夠處理整個庫,或庫中指定的多表。你們能夠根據需求自行決定使用。

同時還有一些方法,如直接數據庫文件拷貝也能夠,可是移動後的數據庫系統與原系統應一致才行。這裏就再也不提了。

 

11、數據導入

 

同導出相相似,導入也有兩種方法:

  使用LOAD DATA INFILE "filename"命令

  使用mysqlimport實用程序

  使用sql文件

因爲前兩個處理與導出處理類似,只不過是它們的逆操做,故只給出幾種命令使用的例子,再也不解釋了,你們能夠自行查閱手冊。

11.一、使用load命令:

  load data infile "driver.txt" into table driver fields terminated by ","

  enclosed by """;

11.二、使用mysqlimport實用程序:

  mysqlimport --fields-terminated-by=, --fields-enclosed-by=" phptest driver.txt

11.三、使用SQL文件

    則可使用由mysqldump導出的sql文件,在命令行下執行mysql庫名。

首先要聲明一點,大部分狀況下,修改MySQL是須要有mysql裏的root權限的,因此通常用戶沒法更改密碼,除非請求管理員。

方法一

使用phpmyadmin,這是最簡單的了,修改mysql庫的user表,不過別忘了使用PASSWORD函數。

方法二

使用mysqladmin,這是前面聲明的一個特例。

mysqladmin -u root -p password mypasswd

輸入這個命令後,須要輸入root的原密碼,而後root的密碼將改成 mypasswd。把命令裏的root改成你的用戶名,你就能夠改你本身的密碼了。固然若是你的mysqladmin鏈接不上mysql server,或者你沒有辦法執行mysqladmin,那麼這種方法就是無效的。並且mysqladmin沒法把密碼清空。

下面的方法都在mysql提示符下使用,且必須有mysql的root權限:

方法三

  mysql> INSERT INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

確切地說這是在增長一個用戶,用戶名爲jeffrey,密碼爲biscuit。在《mysql中文使用手冊》裏有這個例子,因此我也就寫出來了。注意要使用PASSWORD函數,而後還要使用FLUSH PRIVILEGES。

方法四

和方法三同樣,只是使用了REPLACE語句

  mysql> REPLACE INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

方法五

使用SET PASSWORD語句,

mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

擬也必須使用PASSWORD()函數,可是不須要使用FLUSH PRIVILEGES。

方法六

使用GRANT ... IDENTIFIED BY語句

mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';

這裏PASSWORD()函數是沒必要要的,也不須要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix口令加密的一樣方法施行口令加密。

MySQL 忘記口令的解決辦法

若是 MySQL 正在運行,首先殺之: killall -TERM mysqld。

啓動 MySQL :bin/safe_mysqld --skip-grant-tables &就能夠不須要密碼就進入 MySQL 了。而後就是

  >use mysql

  >update user set password=password("new_pass") where user="root";

  >flush privileges;

從新殺 MySQL ,用正常方法啓動 MySQL 。



12、備份與恢復  

12.一、備份  

例如:將上例建立的aaa庫備份到文件back_aaa中  

[root@test1 root]# cd /home/data/mysql (進入到庫目錄,本例庫已由val/lib/mysql轉到/home/data/mysql,見上述第七部份內容)   

[root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa   

12.二、恢復  

[root@test mysql]# mysql -u root -p ccc < back_aaa

 

十3、mysqladmin 公用程式的使用

 

mysqladmin 公用程式可用來維護 MySQL 比較通常性的工做(新增、刪除資料庫、設定使用者密碼及中止 MySQL 等等),詳細的說明可使用 mysqladmin --help 來查看。(以本文的安裝爲例 mysqladmin 位於 /usr/local/mysql/bin/mysqladmin)。

新增資料庫 dbtest

# /usr/local/mysql/bin/mysqladmin -u root -p create dbtest

Enter password:

Database "dbtest" created.

刪除資料庫

# /usr/local/mysql/bin/mysqladmin -u root -p drop dbtest

Enter password:

Dropping the database is potentially a very bad thing to do.

Any data stored in the database will be destroyed.

 

Do you really want to drop the 'dbtest' database [y/N]

y

Database "dbtest" dropped

設定使用者密碼(將 maa 的密碼改成 7654321,mysqladmin 會先詢問 maa 的原密碼)

# /usr/local/mysql/bin/mysqladmin -u maa -p password 7654321

Enter password:

#

中止 MySQL 服務

# ./mysqladmin -u root -p shutdown

Enter password:

注意,shutdown MySQL 後,必須由做業系統的 root 賬號執行下列指令才能啓動 MySQL:

/usr/local/mysql/share/mysql/mysql.server start

修改MYSQL的默認編碼

MySQL的默認編碼是Latin1,不支持中文,那麼如何修改MySQL的默認編碼呢,下面以UTF-8爲例來講明須要注意的是,要修改的地方很是多,相應的修改方法也不少。下面是一種最簡單最完全的方法:Windows系統  一、停止MySQL服務  二、在MySQL的安裝目錄下找到my.ini,若是沒有就把my-medium.ini複製爲一個my.ini便可  三、打開my.ini之後,在[client]和[mysqld]下面均加上default-character-set=utf8,保存並關閉  四、啓動MySQL服務
相關文章
相關標籤/搜索