2009年8月18日 星期二

mysql 指令收集

平常只下SQL Command
但一些權限指令都快忘光了
這邊也有詳盡介紹:http://businesswing.net/webdesign/php-cmd_data_export_and_import/#more-1958


mysql 忘記密碼
安裝完成後在OS Command Line 更改Root Password
1.先停掉mysql 
/etc/rc.d/init.d/mysql stop 

2.以--skip-grant-table 的參數啟動mysql 
safe_mysql --skip-grant-table& 

3. 更改root 密碼 
# mysql mysql 
mysql> UPDATE user SET password=password('newpassword') 
WHERE user='root'; 
mysql> exit 

4.停掉mysql再重跑 
# mysqladmin -uroot -p shutdown 
Enter password: //輸入新設定的密碼 

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



//登入
mysql -u root -h hostname -p

// show 出資料庫
show databases;

//使用資料庫
use 資料庫名稱;

//檢查使用中的資料庫
select database();

//秀出資料庫
shell指令mysqlshow
mysql下 show databases;

//顥示連結的狀態
status

//秀出資料庫使用狀況
select database();

//秀出資料庫內的資料表名稱
show tables;

//秀出資料庫欄位名稱及內容
describe 資料表名稱;

//加入新的資料至欄位
INSERT INTO manber( 欄位, 欄位, )
VALUES ( '插入字串' , '插入字串' );

//加入欄位至資料庫尾端
ALTER TABLE `TABLE_NAME` ADD `新增欄位名稱` VARCHAR( 5 ) ;

//show 出 資料表內所有的內容
select * from 資料表名稱;

// show 出資料表後匯入一個新的文件
mysql -u root -hhostname -p -e "select * from cd limit 1" > 匯出的名稱

// 搜尋某筆的資料
select * from table名稱 where type_id='24';

//修改芋筆的資料
update table名稱 set 欄位1='5' where 欄位2='24' limit 5;

//記算資料庫筆數
select count(櫚位名) from table_name ;

select count(*) from table_name ;

timestamp下
select 櫚位名1,count(*) from table_name where Time < timename_timestamp('2003-5-8 12:0:0') group by 欄位名1 ; //亂數 select select * from twble_name order by rand() ; //新增資料 insert into 資料庫名稱(欄位1,欄位2) values(資料1,資料2); //刪除資料 delete from 資料庫名稱 ; //不用加星號 shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"


Windows環境中,Login Mysql後,更改Root Pasword

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');

Unix環境中,Login Mysql後,更改Root Pasword

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

查詢資料庫清單

shell> mysql -u root
mysql> SHOW DATABASES ;

建立資料庫

shell> mysql -u root
mysql> Create database DB_Name;

建立使用者及密碼,並賦予所需之權限

shell> mysql -u root
mysql>GRANT ALL PRIVILEGES ON DB_Name.*
TO User_Name@localhost IDENTIFIED BY 'newpwd'

更改使用者密碼

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
WHERE User = 'root';
mysql> FLUSH PRIVILEGES;


MySQL 常用的設定和指令記錄, 採 FAQ 方式記錄.
MySQL 匯入 sql 指令
 
mysql -u userid -p [-h localhost] db_Name < xxxxx.sql
 
MySQL 於 mysql> 使用 less 看結果
pager less -n -i -S
直式列出 query 結果
SELECT * FROM TABLE_NAMEG
設定 mysql> 變成 (user@host) [(dbname)]>
於 .bashrc 加一行
export MYSQL_PS1="(u@h) [d]> "
MySQL 看 status
show status; 或 mysqladmin -u root -p status
MySQL 要讓 localhost 以外的 Client 連進來
/etc/mysql/my.cnf 拿掉 bind-address = 127.0.0.1 即可
MySQL 秀錯誤編號, 該如何查此編號對應的原因?
MySQL error 編號, 在 shell 下打 "perror 編號" 就可知道原因了, Example:
$ perror 134 MySQL error: 134 = Record was already deleted (or record file crashed) mysql error code shell> perror 12 System error: 12 = Cannot allocate memory
Check Table 是否有錯誤
CHECK TABLE tbl_name [fast] [quick], 詳可參見: 此連結
於系統運作下, 修復 TABLE
repair table table_name, 詳可參見: 此連結
MySQL 停止後, 於 shell 下修復 TABLE(MyISM)
myismchk /mysql/data/TABLE_NAME.MYI
MySQL 只 dump table 的 schema
使用此參數: --no-data, -d mysqldump -d -u root -p DB_NAME TABLE_NAME > TABLE_NAME.sql
MySQL 只 dump db 的 schema
使用此參數: --no-data, -d mysqldump -d -u root -p DB_NAME > DB_NAME.sql
MySQL 只 dump db 的 data
-c: SQL 語法前面會把欄位名稱也列出來 -t: Table mysqldump -u root -p -t -c DBNAME > DB_ALL_DATA.sql 或 mysqldump -u root -p -t DBNAME > DB_ALL_DATA.sql
MySQL 只 dump table 的 data
-c: SQL 語法前面會把欄位名稱也列出來 -t: Table mysqldump -u root -p -t -c DBNAME TABLENAME > DB_TABLE_DATA.sql 或 mysqldump -u root -p -t DBNAME TABLENAME > DB_TABLE_DATA.sql
Query 指定使用哪個 index 的語法
SELECT COUNT(*) FROM TABLE_NAME USE INDEX(XXX_idx)
看此 table_name 使用多少容量、空間
show table status like 'table_name';
看 table 如何 create 的
mysql> show create table table_name
如何看 mysql bin log
mysqlbinlog m10-relay-bin.001
如何看 SQL 語法使用到哪個 Index Key
mysql> EXPLAIN SELECT * FROM User
如何設定把 所有 對此 MySQL 所下的 SQL 語法都記錄下來
my.cnf [mysqld] log = /var/logs/mysql/mysql-query.log
如何找出 MySQL column欄位中的值不等於 0-9 的
SELECT * FROM TABLENAME WHERE column REGEXP '[^0-9]';
要將資料倒回 DB 的標準做法(若有設 Foreign Key 用此方法才能順利匯入)
  • mysql> SET FOREIGN_KEY_CHECKS = 0;
  • mysql> SOURCE dump_file_name;
  • mysql> SET FOREIGN_KEY_CHECKS = 1;
設定 root 和其他 user 的密碼
  • mysqladmin -u root password '新密碼'
  • mysqladmin -u root -p
  • Enter password:    此時再輸入密碼(建議採用)
  • use mysql;
    mysql> UPDATE user SET password=password('新密碼') where user='root'; 
      只改 root 的密碼,如果沒有用 where ,則表示改全部 user 的密碼
  • mysql> FLUSH PRIVILEGES; 在 mysql 資料庫內,一定要用 flush 更新記憶體上的資料
刪除空帳號
  • mysql> DELETE FROM user WHERE User = '';
  • mysql> FLUSH PRIVILEGES;
     
建立新帳號
  • mysql> GRANT 權限 ON 資料庫或資料表 TO 使用者 IDENTIFIED BY '密碼';
      權限
       
      資料庫或資料表
       *.* 所有資料庫裡的所有資料表
       * 預設資料庫裡的所有資料表
       資料庫.* 某一資料庫裡的所有資料表   
       資料庫.資料表 某一資料庫裡的特定資料表
       資料表  預設資料庫裡的某一資料表
設定/修改權限  
  • 用 root 登入 MySQL
      mysqladmin -u root -p
     Enter password:   
  • mysql> GRANT all ON db35.* TO s35@'localhost' IDENTIFIED BY 's35';
       把 db35 這個資料庫(含其下的所有資料表),授權給 s35,從 localhost 上來,密碼為s35
     
  • mysql> GRANT all ON *.*  把所有資料庫及資料表授權給別人,太危險了!
     
  • mysql> GRANT all??? ON www.* TO '*'@'*' IDENTIFIED BY '';
        把 www 這個資料庫(含其下的所有資料表),授權給 任何機器任何人,無密碼(通常給不特定人士使用)
     
  • mysql> FLUSH PRIVILEGES;   (最後一定要強迫更新權限)

【下列文章您可能也有興趣】

沒有留言: