MySQL 帳號:USERNAME@主機位置(root@localhost) 使用者名稱:USERNAME (上限16個字元) 密碼:PASSWORD (MySQL有自己的加密系統) (沒有字數上限) password() SQL function MySQL中的帳號與密碼跟系統的帳號密碼無關 MySQL允許有設帳號但是沒有密碼的使用者進入 安裝完後會產生預設的幾組帳號
MySQL連線操作
table_priv、columns_priv MySQL 一般而言,裝好MySQL之後,會有二個預設資料庫,分別是mysql及test。 然而MySQL本身能儲存多個資料庫,因此我們可以下mysqlshow指令來顯示目前MySQL有幾個資料庫。 MySQL一般有五個最重要的表格。 茲列如下: user、db、host以及tables_priv、columns_priv user、db、host table_priv、columns_priv 主要是過濾使用者是否有“存取某個主機的某個資料庫資料”的權限,此三個表格是互相交叉對應的。 主要可以使得MySQL對個別表格 (table)或欄(column)設定權限。
MySQL 預設帳號(grant table)的建立: Windows:自動建立 Unix/Linux:手動建立,mysql_install_db 兩個沒有密碼的root帳號,最高權限,只允許本機登入 兩個沒有帳號密碼的使用者,也只允許本機登入
MySQL 登入系統: 使用command-line >mysql –uUSERNAME –pPASSWORD DB_NAME > mysql --user=USERNAME --password=PASSWORD DB_NAME 注意-p與PASSWORD間不可以有空白 PASSWORD可以省略,以使詢問訊息出現
MySQL 預設帳號都沒有密碼,所以第一件事請先設定密碼或是將不需要的帳號移除 設定密碼: SET PASSWORD Mysqladmin UPDATE >mysqladmin -u root password "newpwd“ >mysqladmin -u root -h host_name password "newpwd" 必須要第一次做才可如果已經使用它種方法設定,此法失效
MySQL 預設帳號都沒有密碼,所以第一件事請先設定密碼或是將不需要的帳號移除 設定密碼: SET PASSWORD Mysqladmin UPDATE >mysql -u root mysql mysql> SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘newpwd’); 或 mysql> SET PASSWORD FOR root= PASSWORD('newpwd'); 改變localhost可以設定另外一個root帳號的密碼
MySQL 預設帳號都沒有密碼,所以第一件事請先設定密碼或是將不需要的帳號移除 設定密碼: SET PASSWORD Mysqladmin UPDATE >mysql -u root mysql mysql> UPDATE user SET Password = PASSWORD('newpwd') -> WHERE User = 'root'; mysql> FLUSH PRIVILEGES; 同時設定兩組root帳號的密碼 需要手動讓設定值生效( FLUSH PRIVILEGES )
MySQL 刪除兩組預設帳號密碼都沒有的帳號 >mysql -u root mysql mysql> DELETE FROM user WHERE User = ''; mysql> FLUSH PRIVILEGES; 同時刪除兩組帳號 需要手動讓設定值生效( FLUSH PRIVILEGES )
MySQL 新增帳號: grant Insert into Phpmyadmin或其他 >mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; 有最高權限的使用者monty,密碼some_pass,只可以從localhost進入MySQL mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' 有最高權限的使用者monty,密碼some_pass,可以從任何地點進入MySQL mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 沒有密碼,有reload與process權限的使用者admin mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost'; 沒有密碼與任何權限的使用者dummy
MySQL 使用grant新增帳號連結特定資料庫(在user新增使用者,db新增使用權限) >mysql --user=root mysql mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON bankaccount.* -> TO 'custom'@'localhost' -> IDENTIFIED BY 'obscure'; access the bankaccount database, but only from the local host. -> ON expenses.* -> TO 'custom'@'whitehouse.gov' access the expenses database, but only from the host whitehouse.gov. -> ON customer.* -> TO 'custom'@'server.domain' access the customer database, but only from the host server.domain.
MySQL 新增帳號: grant Insert into (需要FLUSH) Phpmyadmin或其他 >mysql --user=root mysql mysql> INSERT INTO user -> VALUES('localhost','monty',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); -> VALUES('%','monty',PASSWORD('some_pass'), mysql> INSERT INTO user SET Host='localhost',User='admin', -> Reload_priv='Y', Process_priv='Y'; mysql> INSERT INTO user (Host,User,Password) -> VALUES(‘localhost’,‘dummy’,‘’); 預設關閉所有權限 mysql> FLUSH PRIVILEGES;
MySQL 使用insert新增帳號連結特定資料庫 分兩階段進行 >mysql --user=root mysql mysql> INSERT INTO user (Host,User,Password) -> VALUES('localhost','custom',PASSWORD('obscure')); mysql> INSERT INTO db -> (Host,Db,User,Select_priv,Insert_priv, -> Update_priv,Delete_priv,Create_priv,Drop_priv) -> VALUES('localhost','bankaccount','custom', -> 'Y','Y','Y','Y','Y','Y'); mysql> FLUSH PRIVILEGES;
MySQL >mysql --user=root mysql mysql> INSERT INTO user (Host,User,Password) -> VALUES('whitehouse.gov','custom',PASSWORD('obscure')); -> VALUES('server.domain','custom',PASSWORD('obscure')); mysql> INSERT INTO db -> (Host,Db,User,Select_priv,Insert_priv, -> Update_priv,Delete_priv,Create_priv,Drop_priv) -> VALUES('whitehouse.gov','expenses','custom', -> 'Y','Y','Y','Y','Y','Y'); -> VALUES('server.domain','customer','custom', mysql> FLUSH PRIVILEGES;
MySQL 刪除帳號: Delete >mysql –uroot –pPassword mysql mysql>delete from user where user=‘USERNAME’; mysql> FLUSH PRIVILEGES;
MySQL-資源限制 一個帳號每小時可以執行的詢問次數max_questions 一個帳號每小時可以執行的修改次數max_updates (The number of queries that an account can issue per hour) 一個帳號每小時可以執行的修改次數max_updates (The number of updates that an account can issue per hour) 一個帳號每小時可以連結Server的次數max_connections (The number of times an account can connect to the server per hour) 針對每個account而不是client 需要Upgrade Grant Table User to add new privileges
MySQL- Upgrade Grant Table From version 4.0.15 on, MySQL distributions include a mysql_fix_privilege_tables.sql SQL script that you can run using the mysql client C:\mysql\bin>mysql -u root -p mysql mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables.sql 如果MySQL版本太舊需要先更新MySQL
MySQL-資源限制 GRANT 新增限制 mysql> GRANT ALL ON customer.* TO 'francis'@'localhost' -> IDENTIFIED BY 'frank' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5; 預設0 表示 no limit 修改限制 mysql> GRANT USAGE ON *.* TO 'francis'@'localhost' -> WITH MAX_QUERIES_PER_HOUR 100; 取消限制 -> WITH MAX_QUERIES_PER_HOUR 0;
MySQL-資源限制 Reset所有account的限制 FLUSH USER_RESOURCES FLUSH PRIVILEGES mysqladmin reload
MySQL-修改密碼 mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit'); mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit'; shell> mysql -u root mysql mysql> UPDATE user SET Password = PASSWORD('bagel') -> WHERE Host = '%' AND User = 'francis'; mysql> FLUSH PRIVILEGES;
MySQL-透過Phpmyadmin 密碼記得要加密 password()
MySQL-如何使連線更安全 不安全的方式: >mysql -u francis -pfrank db_name 如何解決 使用SSL來連線
MySQL-備份 MySQL目錄下的BIN文件夾中有一个mysqldump.exe的程式,這就是它的備份程式。 執行方法如下: 檔案路徑:\mysql\bin>mysqldump -u root -proot orapp > back.sql back.sql就是備份後的文件
MySQL-備份 使用 phpMyAdmin備份: 備份: 進入選擇資料庫 ---> 輸出 SQL 選項 請注意要勾選 結構及資料 下載選項則要 勾選 下載儲存,並設定好檔案名稱, 是否壓縮自行決定,再點選執行就可下載檔案 還原: 進入 phpMyAdmin 後,將資料庫刪除, 再重新建立一個資料庫,再選擇資料庫後,點選SQL 瀏覽選擇文字檔案的位置,點選執行,就可以將原本資料庫還原。
MySQL-備份 將整個資料庫檔複製下來(如果mysql版本相差不大時可以採用此法), 備份前先將停止 MySQL 服務! 可以將 c:\mysql\data\xxx 整個資料夾複製下來備份, 要復原成備份狀態,只需將資料夾複製回 c:\mysql\data\ 下, 即可使用。
MySQL 資料庫操作
MySQL-資料庫 建立資料庫: mysql>Create database 資料庫名稱; //不分大小寫 使用資料庫: 刪除資料庫: >mysqladmin create 資料庫名稱 使用資料庫: mysql> Use 資料庫名稱; //使用資料庫 刪除資料庫: mysql> Drop database 資料庫名稱; //刪除資料庫 >mysqladmin drop 資料庫名稱 關閉資料庫 >mysqladmin shutdown >mysqladmin ping //測試資料庫是否live
MySQL-資料表 建立資料表: mysql>Create table 資料表名稱 (欄位名稱1 型態,欄位名稱2 型態…); mysql>show tables; //顯示所有資料表 mysql>show columns from 資料表名稱; //顯示欄位 mysql>select * from 資料表名稱; //顯示資料表內所有內容 mysql>Create table if not exits 資料表名稱 (欄位名稱1 型態,欄位名稱2 型態…); //資料表不存在時才建立
MySQL-資料型態 數值型態 自動增量 自動補齊0設定 無號數 字元或字串型態(char vs. varchar) Text vs. blob型態 Enum vs. set型態
MySQL-資料表 變更資料表名稱: mysql>alter table 資料表名稱 rename 新名稱; mysql>show tables; //顯示所有資料表 mysql>show columns from 資料表名稱; //顯示欄位 變更欄位名稱: mysql>alter table 資料表名稱 change 欄位名稱 新名稱 資料型態; mysql>show columns from 資料表名稱; 變更欄位資料型態: mysql>alter table 資料表名稱 change 欄位名稱 欄位名稱 資料型態;
MySQL-資料表 刪除資料表: mysql>drop table 資料表名稱; mysql>show tables; //顯示所有資料表 刪除部分欄位: mysql>alter table 資料表名稱 drop 欄位名稱; mysql>show columns from 資料表名稱; 新增欄位: mysql>alter table 資料表名稱 add 欄位名稱 資料型態;
MySQL-資料表 建立索引: mysql>alter table 資料表名稱 add index (欄位名稱); mysql>alter table 資料表名稱 add primary key (欄位名稱); mysql> show columns from 資料表名稱; 刪除索引: mysql>alter table 資料表名稱 drop index 欄位名稱; mysql>alter table 資料表名稱 drop primary key 欄位名稱; mysql>show columns from 資料表名稱;