close

MySQL 指令、語法及管理

這是一份筆記,專門紀錄 towns 在操作時需要的語法、指令或操作方式,還有更多的資料分散在茫茫網海中等待大家的發覺,感謝每一位大大無私的奉獻
教學網站:http://www.hmes.kh.edu.tw/~jona/redhat/mysqlphp/mysqlsyntax.htm
官方語法說明:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html

============================================================================================
 

1、設定管理帳號:(mysql在安裝後,會建立一個root帳號,不過,沒有密碼)
mysqladmin -u root password abc123 <==
設定root帳號,密碼為abc123
============================================================================================

2、列出mysql現行環境
mysqladmin variables -u root -p <==
使用指令
mysql>show variables; <==
使用mysql語法
============================================================================================

3、登入資料庫
mysql -u root -p towns <==
使用root帳號,登入towns資料庫
mysql -h localhost -u root -p towns <==
使用root帳號登入本機端的towns資料庫, 做網路管理時,-h很重要
============================================================================================

4、建立資料庫
4.1 mysql -u root -p <==
使用root登入mysql
4.2
打入root密碼
4.3 create database towns; <==
使用mysql語法,新增towns這個資料庫,一定要加
4.4 mysqladmin -u root create cacti -p <==
也可以用指令建立資料庫
============================================================================================

5、刪除資料庫
5.1 mysql -u root -p <==
使用root登入mysql
5.2
打入root密碼
5.3 drop database towns; <==
使用mysql語法,刪除towns這個資料庫,一定要加
============================================================================================

6、列出現有資料庫
6.1 mysql -u root -p <==
使用root登入mysql
6.2
打入root密碼
6.3 show databases;
6.4 mysql -e "show databases; " -p <==
用指令顯示資料庫
6.5
------------------------------------------------------------------------------------------------------------------------------------
6.1 mysqlshow -u root -p <==
使用root登入mysql,並列出所有的資料庫
6.2 mysqlshow -u root -p towns <==
使用root登入mysql,並列towns資料庫中的資料表
6.3 mysqlshow -u root -p towns towns <==
使用root登入mysql,指定towns資料庫,並列出towns資料表
資料來源:http://tsuozoe.pixnet.net/blog/post/21283890
============================================================================================

7、匯入資料庫
7.1
需先建立資料庫(如4),可以看一下,dump下來的語法中,是否有下CREATE DATABASE,有就不用建了
7.2 mysql -u root -p abc <'/home/towns/abc/abc.sql' <==
abc.sql匯入abc資料庫中
============================================================================================

8、匯出資料庫
8.1
資料庫需存在
8.2 mysqldump -u root -p abc >'/home/towns/abc/abc.sql' <==
abc資料庫匯出到abc.sql檔案
8.3 mysqldump -u root -p -d abc > '/home/towns/abc/abc.sql' <==
abc資料庫的結構匯出到abc.sql檔案 
============================================================================================

9、新增使用者(需先登入mysql server
9.1
使用grant新增
 9.1.1 grant all on abc.* to towns identified by 'abc123' with grant option;
 
建立towns使用者具有abc完整的管理權,密碼為abc123
 9.1.2 grant all on abc.* to towns@localhost identified by 'abc123' with grant option;
 
建立本機端towns使用者具有abc完整的管理權,密碼為abc123
 9.1.3 grant all on *.* to towns@localhost identified by 'abc123' with grant option;
 
建立本機端towns使用者具有所有資料庫完整的管理權,密碼為abc123
 9.1.3.1 grant all on *.* to towns@localhost identified by 'abc123';
 
與上面的方法相同,獨缺允許特權
9.2
使用INSERT
9.3 CREATE USER
--------------------------------------------------------------------------------------------
9.4
變更密碼
9.4.1 grant all on *.* to towns@localhost identified by '123abc' with grant option;
towns使用者的密碼,由abc123變成123abc
9.4.2 SET PASSWORD FOR 'root'@'localhost.localdomain' = PASSWORD( '*******' )
      SET PASSWORD FOR 'root'@'localhost' = PASSWORD( '*******' )
============================================================================================

10、刪除使用者
10.1 DELETE FROM mysql.user WHERE User='towns' ;
刪除使用者towns
10.2 DROP USER test@localhost;
============================================================================================

11、登入資料庫帳號、密碼常見檔案位置
============================================================================================

12、更新資料庫資料(在做任何更動後,建議要使用這指令)
12.1 flush privileges;
============================================================================================

13、在作業系統中,檢查權限之命令
13.1 mysqlaccess localhost user mysql -U root -P abc123 <==
檢查user帳號的權限
13.2 mysqlaccess localhost towns abc123 -U root -P abc123 <==
檢查towns帳號的權限
13.3 mysqlaccess localhost towns -U root -P <==
檢查towns帳號的權限,會要求打入root 密碼
============================================================================================

14、權限管理
14.1 grant SELECT,INSERT,UPDATE on abc.* to towns@localhost identified by 'abc123';
開放三種權限(SELECT,INSERT,UPDAT)給towns(本機端)
14.2
開放多個資料庫(abc1testabc)給一個帳號(towns)管理,需一條一條加
grant all on abc1.* to towns@localhost identified by 'abc123';
grant all on test.* to towns@localhost identified by 'abc123';
grant all on abc.* to towns@localhost identified by 'abc123';
--------------------------------------------------------------------------------------------
14.3
權限
資料庫(DateBase),十五種權限:
ALL PRIVILEGES
ALTERCREATEDELETEDROPFILEINDEXINSERTPROCESSREFERENCESRELOADSELECTSHUTDOWNUPDATEUSAGE

資料表(Table),八種權限:
SELECT
INSERTUPDATEDELETECREATEDROPINDEXALTER 

資料欄(column),三種權限:
SELECT INSERT UPDATE

修改權限
14.4 REVOKE
權限 ON 資料庫(或資料表TABLE) TO user@host IDENTIFIED BY '密碼';
============================================================================================

GRANT ALL PRIVILEGES ON `abc` . * TO abc@% WITH GRANT OPTION ;
DROP USER towns@';
DROP USER test@localhost';
---------------------------------------------------------------------------------------------
CREATE USER test@localhost IDENTIFIED BY '********';

GRANT USAGE ON * . * TO test@localhost IDENTIFIED BY '********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

SET PASSWORD FOR root@localhost = PASSWORD( '*********' ) <==在資料庫中修改密碼方式

===============================================================================================
16.
忘記root密碼處理方式
Linux

1.
使用root登入
2.
停止mysql服務(for redhad base
service mysqld stop
3.
使用mysqld_safe指令
mysqld_safe --skip-grant-tables &
此時,會開啟一個安全模式,並停住

4.開新的ssh,用root登入系統
5.
使用mysql帳號登入mysql
6.
變更mysqlroot密碼
update user set password = password('abc123') where user = 'root';
7.
離開mysql
8.
重新啟動mysql
9.
使用root新密碼登入mysql
-----------------------------------------------------------------------------------------------

Windows:
1.
用系統管理員登陸系統。
2.
停止MySQL的服務。
3.
進入命令視窗,然後進入MySQL的安裝目錄,比如我的安裝目錄是c:\mysql,進入C:\mysql\bin
4.
跳過許可權檢查啟動MySQL
c:\mysql\bin>mysqld-nt --skip-grant-tables 
5.
重新打開一個視窗,進入c:\mysql\bin目錄,設置root的新密碼
c:\mysql\bin>mysqladmin -u root flush-privileges password "198651"
c:\mysql\bin>mysqladmin -u root -p shutdown
newpassword替換為你要用的root的密碼,第二個命令會提示你輸入新密碼,重複第一個命令輸入的
密碼。
6.
停止MySQL Server,用正常模式啟動Mysql

7
.你可以用新的密碼連結到Mysql了。
命令:
net mysql start
啟動MYSQL
net stop mysql
停止MYSQL

下面以在Windows系統上為例,linux上將步驟 4 mysqld-nt換為safe_mysqld即可
1
、停止mysql5服務:
net stop mysql5
2
、開一個DOS視窗執行:
http://www.mscto.com
c:\mysql\bin>mysqld-nt --skip-grant-tables &
3
、再開一個DOS視窗執行:
c:\mysql\bin>mysql mysql
> update user set password = password('123456') where user = 'root';
root
密碼即為設置為123456
4
、啟動mysql5服務:
net start mysql5

相關資料:http://www.mscto.com/MySQL/20080731665.html

===============================================================================================
17.
顯示目前mysql連線的threads狀態
mysql>show processlist; <==
使用mysql語法
mysqladmin processlist -u root -p <==
使用指令

===============================================================================================
18.
列出MySQL目前的狀態
mysql> show status; <==
使用mysql語法
mysqladmin status -u root -p <==
使用指令(結果不同)
 
===============================================================================================
19.
列出mysql的使用者
SELECT User FROM mysql.user Order by User;

帳號管理
mysql
中,帳號可設為僅本機使用、僅網路使用、兩者皆可,與mysql安全性有關
mysql>grant all on *.* to towns@localhost identified by 'abc123' with grant option;
利用語法建立towns可以管理所有資料庫、只能本機連線,擁有最大權限
mysql>grant all on *.* to towns@localhost identified by 'abc123';
利用語法建立towns可以管理所有資料庫、只能本機連線,少了grant權限,其他都有
mysql>grant all on *.* to towns@ identified by 'abc123' with grant option;
利用語法建立towns可以管理所有資料庫、能外部及本機連線,擁有最大權限
mysql>grant all on *.* to towns identified by 'abc123' with grant option;
利用語法建立towns可以管理所有資料庫、能外部及本機連線,擁有最大權限

towns@locahost <==只能本機連線
towns@192.168.8.176 <==
只能192.168.8.176連線,用於限制帳號連線IP
towns@127.0.0.1 <==
只能本機連線
towns@locahost.localdomain <==
只能本機連線
towns@ <==
不限制連線來源,危險的設定,不過local不能連
towns    <==
不限制連線來源,危險的設定

註:使用 towns@ towns mysql5 以上的版本會發生仍無法遠端連線,因為 mysql5 以上的版本多加了兩個特別的帳號,@localhost @[hostname],這兩組帳號在我們設定帳號時,如果沒有給尾巴,會自動加上去,造成帳號不論local 或 遠端都無法連入

  19.1. mysql -e "GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'test' ; "
  
利用指令來新增帳號

===============================================================================================
20.
資料庫匯出管理
 1.
更換資料庫
登入mysql後,選用某個資料庫
mysql> use test; <==
連入test資料庫

 2 .顯示資料庫的資料表(需先選好資料庫,才能show tables
mysql> show tables;
mysql -e "use test; show tables; " -p <==
直接使用指令下SQL語法,並使用root登入(沒設user預設為root

 3. 顯示特定資料表中的欄位
mysql> describe table_name;

參考資料:http://www.xspace.idv.tw/bo_blog/read.php?32

===============================================================================================
21.
免密碼登入mysql資料庫(用於資料庫定期備份等……
 1.vim ~/.my.cnf
   [client]
   password=YOUR_MYSQL_PASSWORD
 2.chmod 600 ~/.my.cnf
設定完成後,直接使用mysql -u [user],就可以登入了
資料來源:http://plog.longwin.com.tw/my_note-unix/2009/04/09/mysql-login-backup-script-no-password-2009


22. 關於帳號問題:當建立最大權限帳號後,該帳號無法本機登入
 1.
安裝後系統自動產生的帳號,兩個空白(@localhost@localhost.localdomain)及三個root root@localhostroot@127.0.0.1root@localhost.localdomain)帳號
 2.
此時 root 帳號可以本機登入,不可遠端登入
 3.
建立 towns 帳號後(建立最大權限帳號),towns 只能遠端登入,無法本機登入
 4.
建立 towns@localhost 帳號,towns 可以本機登入
兩個空白帳號為安全性帳號,當我們使用towns登入時,沒寫完整帳號,會自動帶入@localhost,導致最大權限帳號無法本機登入,將兩個空白帳號刪除後,最大權限帳號(towns),就可以本機登入了。而這兩個空白帳號 towns 是透過第三方軟體,才刪除的


23. mysql 連線數設定
Linux
系統:my.cnf 檔中預設並無此參數,需手動加入
設定 /etc/my.cnf
max_connections=100 <==
連線上限100
max_user_connections=15 <==
使用者連線上限15
也可以設定單一帳號最大連線數,登入mysql後使用語法修改
grant all on *.* to towns with MAX_USER_CONNECTIONS 15 ; <== towns
帳號最大連線數為15

windows 系統:在安裝設定時configuration Wizard即有詢問Concurrent Conections,自定值可到1400
設定 C:\Program Files\MySQL\MySQL Server 5.1\my.ini
max_connections=2037 <==
連線上限 2037

資料來源:
http://ssorc.tw/rewrite.php/read-639.html 
http://kiki.longwin.com.tw/?p=16


 24. 使用phpmyadmin 設計資料庫
教學:http://sofree.cc/phpmyadmin-mysql/


 25. 改變mysql 預設參數
需修改 /etc/my.cnf
1:變更預設封包大小(max_allowed_packet
[mysqld] 下面加入一行
max_allowed_packet = 20M
存檔後,重新啟重mysql
使用mysqladmin variables -u root -p 確認 預設封包值是否已變更

2:變更資料庫預設語(character_set_server),這個只有mysql 4 才須要改
character_set_server = utf8
存檔後,重新啟重mysql
使用mysqladmin variables -u root -p 確認character_set_server character_set_database 是否變為 utf8
註:不同的下指令方式得到不同的結果
towns
使用 mysqladmin variables -u root -p 出現了以下五個值皆改為UTF8
character_set_client
character_set_connection
character_set_database
character_set_results
character_set_server

towns 登入資料庫後(mysql -u root -p),再使用 show variables;,得到以下結果
character_set_client  ==> latin1
character_set_connection  ==> latin1
character_set_database ==> utf8
character_set_results ==> latin1
character_set_server ==> utf8


 26. 資料庫編碼轉換問題
這個問題只會出現在 mysql 4版中
使用指令 SET NAMES utf8;character_set_clientcharacter_set_connectioncharacter_set_results改為 UTF8,這個是臨時性的修改
相關資料:感謝前輩說明 http://chiouss0817.wordpress.com/2006/05/15/internal-charset-conversion-of-mysql/


27. 免密碼登入mysql
這個在備份時很好用
    vim /home/towns/.my.cnf <==
建立或編輯.my.cnf

        [client]                                       <== 加入這兩行,[ ]中是打下密碼
        password= [mysql password] 

    chmod 600 ~/.my.cnf <==調整檔案權限

相關資料:http://blog.longwin.com.tw/2009/04/mysql-login-backup-script-no-password-2009/


28. mysql 效能觀察與調整
 

相關資料:
http://forum.slime.com.tw/thread208416.html
http://portable.easylife.tw/2074
http://blog.xuite.net/huenlil/note/5877606

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 hsiung03 的頭像
    hsiung03

    hsiung.博格 ERP軟體

    hsiung03 發表在 痞客邦 留言(0) 人氣()