mysql上

1、關係數據庫、非關係數據庫概念,及常用產品;

   a、 關係型數據庫歸集爲簡單的二元關係(即二維表格形式),通過結構化查詢語言SQL語句來對數據進行存取,有效的保持了數據的一致性;

    產品範例:MySQL、oracle

   b、非關係形數據庫NOsql是作爲關係型數據庫的補充;爲的是高性能、高併發、易擴展、易部署。

    範例: 典型產品:                   memchached,redis(多數據類型支持),monagdb,   
          非關係新數據庫的種類         Key-Value  典型產品memcached、redis 新浪  
          列存儲:                     Cassandre \HBase
          面向文檔數據庫:             MongoDB、CouchDB
          圖形數據庫:                 Neo4J 、InfoGird

    


    參考資料:SQL介紹 http://baike.baidu.com/view/595350.htm?fromId=34

              SQL分類 http://baike.baidu.com/view/595350.htm?fromId=34


2、MYSQL安裝方式:
   a、Yum安裝 yum install MySQL-server(適合要求不高、公司內部)
   b、門戶網站根據企業的需求把源碼包製作成rpm,搭建yum倉庫, yum install xxx -y
   c、編譯安裝MySQL:
    (MySQL5.0xx-5.1xx產品系列最常規的編譯方式,linux運維常規選擇)
     (MySQL5.5採用cmake或gmake方式編譯;(linux運維選擇)

   d、二進制免編譯安裝;
     (適合各類MySQL產品系列,直接解壓下載的安裝包,初始化即可完成MySQL的安裝啓動,專業dba的方式)
   注:建議首選5.5以上的版本,安裝數量少推薦cmake,數量多直接二進制免編譯安裝。

                                                                                   安裝見附件


3、mysql 單實例:

  a、MySQL多實例:一臺機器上開啓不同的端口,運行多個MySQL進程來提供服務;

  b、MySQL多實例關係:公用一套MySQL安裝程序,使用相同(也可以不同)的my.cnf配置文件、啓動程序、 數據文件、在提供服務時,多實例MySQL在邏輯上看來是獨自獨立的,多個實例的自身是根據配置文件對應的設定值,來取得服務器的相關硬件資源多少。   nginx、apache、redis、memcache都可以實現;
  c、優勢:節約資源,提供更多的服務 ;
     劣勢:當某個服務實例併發很高或者查詢慢時,整個實例會消耗整個主機更多的內存、cpu、磁盤io資源,導致服務器上其它的實例提供的服務質量下降;
  d、適應範圍:併發訪問不大的業務;

                                                                                   安裝見附件



4、 MySQL優雅啓動、關閉;

  a、啓動命令: /etc/init.d/mysqld start 

    (來源於 /tools/mysql-5.5.32-linux2.6-x86_64/support-files/mysql.server )
     查看端口:ss -lnt | grep 3306
  b、啓動原理:
     /etc/init.d/mysqld 調用mysqld_safe腳本,最後調用mysqld服務啓動mysql服務啓動mysql
    

    查看A:/etc/init.d/mysqld
          283  $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"                  $other_args >/dev/null 2>&1 &
 

    查看B:ps -ef | grep mysql | grep -v grep
    root      1624     1  0 14:01 tty1     00:00:00 /bin/sh /application/mysql           

        /bin/mysqld_safe --datadir=/application/mysql/data/ --pid-             file=/application/mysql/data//A.pid
  mysql     1862  1624  0 14:01 tty1     00:00:02 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data/     --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/application/mysql/data//A.err --pid-file=/application/mysql/data//A.pid --socket=/tmp/mysql.sock --port=3306


  c、關閉數據庫mysqladmin -uroot -p123456 shutdown     

          查看:/etc/init.d/mysqld

         

                if [ ! -e "$mysql_sock" ];then

                  printf "MySQL isstopped...\n"

                   exit

                else

                  printf "StopingMySQL...\n"

                 ${CmdPath}/mysqladmin -u${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown

                fi

          /etc/init.d/mysqld stop ( kill -USR `cat path/pid`)

    d、多實例啓動和關閉:
         /data/3306/mysql start
         /data/3307/mysql stop



5、mysql登錄、修改登陸提示符、及解決明文密碼泄漏:
 a、:mysql                              適用剛裝完系統無密碼情況的登錄方式,不要密碼
 b、:mysql -uroot                       剛裝完系統無密碼情況的登錄方式,不要密碼
 c、:mysql -uroot -p                    標準的dba命令行登錄命令
 d、:mysql -uroot -p'123456'            非腳本一般不這樣用,密碼明文會泄漏密碼

 e、:mysql -uroot -p -S /data/3306/mysql.sock

    #(多實例通過mysql的-S命令指定不同的sock文件登錄不同的服務中)

 f、:遠程多實例的登錄無需指定sock路徑: mysql -uroot -p -h 127.0.0.1 -P3307

 g、修改mysql登錄提示符:  prompt \u@oldboy \r:\m:\s->    #u系統用戶 r主機名  臨時的;
    永久生效:在my.cnf配置文件中【mysql】模塊下添加  :prompt=\\u@oldbo\\r:\\m:\\s->

 附:history功能解決明文密碼泄漏
    history   參數:  -c 清空歷史記錄

                      -d 21 清楚某條歷史記錄

    echo "HISTCONTROL=ignorespace" >>vi /etc/profile

    source  /etc/profile

    # cat /root/.mysql_historyt 注意:加空格登陸
 


6、mysql 登錄後操作,及密碼設置+密碼丟失:

   a、幫助:

      mysql 中的幫助命令和linux命令的man、help(help linux 內置命令幫助)是類似的;
      使用:mysql> help use 即可 ;

   b、系統命令使用:

      mysql> system ls /tmp  (系統中使用)
      show databases like 'my%'; 查看以my開頭的數據 %所有

   c、刪除所有mysql中的用戶,包括root超級用戶;
      mysql> delete from mysql.user;
   
   d、增加system並提升爲超級管理用,及和root等價的用戶,只是名字不同;
      mysql> grant all privileges  on *.* to system@'localhost' identified by'oldboy123' with grant option;
   
   e、爲mysql設置密碼(密碼爲空時):
      mysqladmin -u root passwd  123456              #passwd後無需添加單引號或雙引號;
      多實例:
      mysqladmin -u root password oldboy -S  /data/3307/mysql.sock 


      單實例命令行新密碼替換舊密碼:
      mysqladmin -uroot -p123456 password 654321     #-p後不要有空格和標點符號;
      多實例命令行新密碼替換舊密碼:
      mysqladmin -u root -poldboy  password 123456 -S /data/3307/mysql.sock

   f、sql語句密碼修改:
      update mysql.user set password='654321' where user='root' and  host='localhost';
      #明文密碼:不可以直接登錄,flush privileges;權限刷新:
      查看密碼:
      select user,host,password from mysql.user; 


      指定函數加密密碼:
      update mysql.user set password=password(123456) where user='root' and host='localhost';  

      #注意where 必須指定條件,不然就全改了;password ()函數更改密碼;flush privileges;


   g、找回丟失的密碼(思想就是跳過授權表):
      單實例: 停止數據庫;最好是優雅關閉數據庫 :
                mysqladmin -uroot -p  shutdown
                /etc/init.d/mysqld stop
                檢查:ps -ef | grep mysql;
                /application/mysql/bin/mysqld_safe  --skip-grant-tables & #跳過授權表

                更新密碼:
                update mysql.user set password=password(123456) where user='root' and host='localhost';
                flush privileges;


#在萬不得已的情況下使用pkill 、killall、kill -9 ,最好別用。強行終止數據庫服務器時,會讓數據庫產生更多的文件碎片,當碎片達到一定程度時,數據庫會崩潰。暴力不好!
              #重新啓動數據庫,重新登錄。

       多實例
       /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables  &
        mysql -S /data/3307/mysql.sock
        .....



7、mysql 用戶創建及授權:

  a、 help查看grant命令幫助:
     CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';  

     GRANT ALL ON db1.* TO 'jeffrey'@'localhost';               
     GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';      
     GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

     #USAGE 表示用戶只可以登錄,沒有其它權限,操作的時候顯示Access denied;

     help查看create命令幫助:

     CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH my_auth_plugin;

     範例:
     創建用戶:create user  username@localhost identified by "password";
     查看用戶權限:show grants for username@localhost;
     在授權:grant all on dbname.* to username@localhost;
     查看權限:show grants for username@localhost;


  b、 查看系統中所有的用戶:
      select host,user from mysql.user;
      刪除系統的多餘帳號語法drop user"user"@"主機域" 注意引號以是單引號或雙引號;
      範 例: drop user ''@'moban2'    #如果爲空直接爲空即可;
      #如果drop刪除不了(一般是特殊字符或大寫),可以用下面的方式刪除:
      範 例: delete from mysql.user where user='root' and host='127.0.0.0.1';


  c、確定mysql 可以授權的權限:
     ⑴幫助查看:help revoke (權限收回)
       REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
    ⑵權限查看:show grants for username@localhost;
    ⑶收回插入權限:revoke insert  on  *.* from 'user_name'@'localhost';  #注意此處指定數據庫
    ⑷登錄數據庫後權限查看:show grants for username@localhost;
    ⑸退出數據庫後:
      mysql -uroot -p123456 -e "show grants for "username"@"localhost";" | grep -i grant  | tail -1|tr ',' '\n' >all.privileges
      以下爲數據庫中的權限:

      SELECT 查詢\INSERT 插入 \UPDATE 更新\DELETE 刪除 \CREATE 創建庫和表

      DROP 刪除庫和表\INDEX  索引\ALTER  修改 \CREATE TEMPORARY TABLES 創建臨時表

      LOCK TABLES 鎖表\ EXECUTE 執行\ CREATE VIEW 創建視圖SHOW VIEW 顯示視圖

      CREATE ROUTINE 創建存儲過程\ALTER ROUTINE 修改存儲過程 EVENT 事件\ TRIGGER     觸發器
      或者:select * from mysql.user\G;


   d、常用的創建方法,使用grant命令創建用戶的時,進行權限授權:
      範 例:grant all privileges on db1.* to  user_name@localhost identified by "password";
             授權命令  對應權限(all所有權限)   目標:庫和表用戶名和客戶端主機                         用戶密碼     
             flush privileges;
             select host,user from mysql.user;        #查看創建的用戶:

             show grants for user_name@localhost;     #查看創建用戶的權限;

   e、授權局域網內主機遠程連接數據庫,常見的使用%匹配方法
      範 例: grant all on   *.* to  username_2@'10.10.36.%' identified by "123456";
              flush privileges;
              mysql -u  username_2 -p -h 10.10.36.170  #登錄使用-h指定主機,-P指定端口


   f、針對博客、cms 等產品安裝期間要採用最小化原則 :
      範例:grant select,insert,update,delete,create,drop on blog.* to blog@'10.10.36.%'  identified by "password";

      #除了select,insert,update,delete4個權限外,還需要create,drop等危險權

      生產數據庫後收回權限(最好評估)

      範 例:revoke create,drop on blog.*  from blog@'10.10.36.%';



8、常用查詢 (簡):

   1、使用幫助:               範例:help drop database             #這裏可以沒有;號
   2、查看數據庫當前的用戶:         select user();                 #()表示系統的函數;    

   3、查看系統中所有的用戶:         select host,user from mysql.user;
   4、查看數據庫的版本:             select version();
   5、顯示數據庫字符集:             SHOW CHARACTER SET;   
   6、設定字符集:                   set names gbk;
   7、查看當前的時間:               select now();
   8、顯示所有數據庫:               show databases;
   9、顯示當前數據庫:               select database();    

      #顯示某一個可以使用like或where:
       範例:show databases where "name";
            show databases like "name";
            show databases like 'data%';            %所有
  10、創建數據庫:                  create database name;
  11、查看建庫語句:                 show create database name;    

                                    show create database name\G;
  12、刪除數據庫:                  drop database name;
  13、連接切換數據庫:              use name;
  14、查看當前數據庫的表:          show tables;
  15、查看指定庫中的表:             show tables from name;
#顯示字符集,默認是latin1,支持中文沒有問題。網頁、程序的字符集要和數據庫的字符集相匹配,包括客戶端、服務端、java程序;
  16、查看建結構:                  desc student;                

                                    show columns from student;
  17、查看以建表語句:         show create table student\G;#發送命令給mysqlserver垂直顯示;
  18、刪除表:                      drop tables student;
                                    delete from test where id=2;    #指定條件刪除;

  19、truncate清空表中所有內容:    truncate table test;
#truncate相當於直接清空mysql 物理文件, delete  邏輯刪除,按行刪;

  20、-e 命令行與mysql交互          mysql  -uroot -p123456 -e "show databases;"
  21、查看數據庫連接概況;          show processlist;
 #注意觀察時間比較長的語句可能爲慢查詢,需要優化;
                                    show full  processlist;         #完整的顯示;
  22、查進程:                      show variables;
                                                範例:mysql  -uroot -p123456 -e "show variables;" | grep logbin
  23、查狀態:                      show status
  24、查全局狀態:                  show global status
                                                範例: mysql  -uroot -p123456 -e "show global status;"   | grep select
                                               show global status like "%insert%";


9、 數據庫字符集設置與更改;

    http://hiboyandhigirl.blog.51cto.com/9150052/1577235                                #附件


10、mysql 客戶端工具使用excel手冊 見附件 (命令詳解)                                            #附件

  

MYSQL客戶端工具   作用
mysqlaccess檢查訪問權限的客戶端
mysqladmin管理mysql服務器的客戶端
mysqlbinlog處理二進制日誌文件的實用工具
mysqlcheck表維護和維修程序
mysqldump數據庫備份程序
mysqlhotcopy數據庫備份程序
mysqlimport數據導入程序
mysqlshow顯示數據庫、表和列信息
myisamog顯示MyISAM日誌文件內容
perror解釋錯誤代碼
replace字符串替換實用工具
mysqlzap 殺死符合某一模式的進程


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章