1. 程式人生 > >mysql安全機制、日誌管理、資料備份、許可權

mysql安全機制、日誌管理、資料備份、許可權

安全機制:

MySQL使用者管理
登入和退出MySQL
示例:
mysql -h192.168.5.240 -P 3306 -u root -p123 -P指埠號
mysql -e ‘select user,host from user’ 非互動式操作,即不用密碼登入
-h 指定主機名
-P MySQL伺服器埠
-u 指定使用者名稱
-p 指定登入密碼
此處mysql為指定登入的資料庫
-e 接SQL語句

建立使用者
方法一:CREATE USER 語句建立
CREATE USER [email protected]’localhost’ IDENTIFIED BY ‘123456’;

方法二: GRANT語句建立 *.*表示哪個庫的哪個表,或者哪個表的哪個欄位等
GRANT SELECT ON . TO [email protected]‘localhost’ IDENTIFIED BY ‘123456’;
*.*表全部庫全部表,test.*表示test庫下的所有表
GRANT all ON . TO [email protected]‘192.168.1.252’ IDENTIFIED BY ‘123456’;
FLUSH PRIVILEGES; 建立一個使用者允許在192.168.1.252這臺主機上登入並進行所有的事情

刪除使用者
DROP USER語句刪除
DROP USER

[email protected]’localhost’;

修改使用者密碼
===root修改自己密碼
方法一:
mysqladmin -u root -p password “newpasswd” 輸入舊密碼

方法二:
update mysql.user set password=password(‘123456’) where user=‘root’ and host=‘localhost’;
FLUSH PRIVILEGES; 重新整理許可權

==root修改其他使用者密碼
方法一:
SET PASSWORD FOR [email protected]’localhost’=password(‘new_password’);
FLUSH PRIVILEGES;

方法二:
UPDATE mysql.user SET password=password(‘new_password’) WHERE user=’user3’ AND host=’localhost’;
FLUSH PRIVILEGES;

方法三:
GRANT SELECT ON . TO [email protected]’localhost’ IDENTIFIED BY ‘tianyun’;
FLUSH PRIVILEGES;

===普通使用者修改自己密碼
方法一:
先登入mysql
SET password=password(‘new_password’);

方法二:
# mysqladmin -uzhuzhu -p123 password 'new_password'	    //123為舊密碼

===丟失或忘記root使用者密碼

# vim /etc/my.cnf
[mysqld]
skip-grant-tables   加入此行
# service mysqld restart   重啟服務
# mysql -uroot     進入mysql
mysql> UPDATE mysql.user SET password=password('123456') WHERE user='root' AND host='localhost';    修改密碼
mysql> FLUSH PRIVILEGES;    重新整理許可權

MySQL 賦予使用者許可權命令語法為:
grant 許可權 on 資料庫物件 to 使用者;
grant 許可權 on 資料庫物件 to 使用者 identified by “密碼”;
grant 許可權 on 資料庫物件 to 使用者@“ip” identified by “密碼”

GRANT 語法:
GRANT privileges (columns)  ON what  TO user IDENTIFIED BY “password”  WITH GRANT OPTION;  (表示該使用者可以為其他使用者分配許可權)
privileges 列表:

  • ALTER: 修改表和索引。
  • CREATE: 建立資料庫和表。
  • DELETE: 刪除表中已有的記錄。
  • DROP: 拋棄(刪除)資料庫和表。
  • INDEX: 建立或拋棄索引。
  • INSERT: 向表中插入新行。
  • REFERENCE:未使用。
  • SELECT: 檢索表中的記錄。
  • UPDATE: 修改現存表記錄。
  • FILE: 讀或寫伺服器上的檔案。
  • PROCESS: 檢視伺服器中執行的執行緒資訊或殺死執行緒。
  • RELOAD: 過載授權表或清空日誌、主機快取或表快取。
  • SHUTDOWN: 關閉伺服器。
  • ALL: 所有許可權,ALL PRIVILEGES同義詞。
  • USAGE: 特殊的 “無許可權” 許可權。

Grant示例:
GRANT ALL ON . TO [email protected]’%’ IDENTIFIED BY ‘tianyun’;

GRANT ALL ON *.* TO [email protected]'%' IDENTIFIED BY 'tianyun' WITH GRANT OPTION;

GRANT ALL ON bbs.* TO [email protected]'%' IDENTIFIED BY 'tianyun';

GRANT ALL ON bbs.user TO [email protected]'%' IDENTIFIED BY 'tianyun';

GRANT SELECT(col1),INSERT(col2,col3) ON bbs.user TO [email protected]'%' IDENTIFIED BY 'tianyun';

檢視許可權
SHOW GRANTS\G
SHOW GRANTS FOR [email protected]’%’\G

回收許可權REVOKE
語法:
REVOKE 許可權列表 ON 資料庫名 FROM 使用者名稱@‘客戶端主機’

示例:
REVOKE DELETE ON *.*  FROM [email protected]’%’;			                                //回收部分許可權
REVOKE ALL PRIVILEGES  ON *.*  FROM [email protected]’%’;  		                    //回收所有許可權

================================================================================================
日誌管理:

錯誤日誌: 記錄 MySQL 伺服器啟動、關閉及執行錯誤等資訊
二進位制日誌: 又稱binlog日誌,以二進位制檔案的方式記錄資料庫中除 SELECT 以外的操作
查詢日誌: 記錄查詢的資訊
慢查詢日誌: 記錄執行時間超過指定時間的操作
中繼日誌: 備庫將主庫的二進位制日誌複製到自己的中繼日誌中,從而在本地進行重放
通用日誌: 審計哪個賬號、在哪個時段、做了哪些事件
事務日誌 或稱redo日誌,記錄Innodb事務相關的如事務執行時間、檢查點等

一、bin-log 二進位制檔案

  1. 啟用

vim /etc/my.cnf

[mysqld]
log-bin[=dir/[filename]] //目錄許可權必須mysql使用者可寫

service mysqld restart

vim /etc/my.cnf

[mysqld]
log-bin[=dir/[filename]] //目錄許可權必須mysql使用者可寫
log-bin=/usr/local/mysql/data/mysqld.binlog

service mysqld restart

2、 檢視
檢視全部:

mysqlbinlog mysql.000002

按時間:

mysqlbinlog mysql.000002 --start-datetime=“2012-12-05 10:02:56” --stop-datetime=“2012-12-05 11:02:54”

按位元組數:

mysqlbinlog mysql.000002 --start-position=260 --stop-position=930

  1. 截斷bin-log(產生新的bin-log檔案)
    a. 重啟mysql伺服器
    b. # mysql -uroot -p123 -e ‘flush logs’ 重新整理

二、查詢日誌
啟用通用查詢日誌

vim /etc/my.cnf

[mysqld]
log[=dir[filename]]

service mysqld restart

vim /etc/my.cnf

[mysqld]
general_log = on 啟用查詢日誌
general_log_file=/tmp/mysql.log 查詢日誌路徑

service mysqld restart

三、慢查詢日誌
啟用慢查詢日誌

vim /etc/my.cnf

[mysqld]
slow-query-log=1
slow-query-log-file=slow.log 位置
long_query_time=3

service mysqld restart

================================================================================================
資料備份:

邏輯備份: 備份的是建表、建庫、插入等操作所執行SQL語句,適用於中小型資料庫,效率相對較低。
mysqldump
mydumper :效率高些,支援多執行緒

物理備份: 直接複製資料庫檔案,適用於大型資料庫環境,不受儲存引擎的限制,但不能恢復到異構系統中如Windows。
xtrabackup
inbackup 備份引擎
lvm snapshot 快照

建議:
# vim /etc/my.cnf
[mysqld]
log-bin
datadir = /usr/local/mysql/data  #新增此行,資料存放目錄
innodb_file_per_table = 1         #啟用InnoDB獨立表空間,預設所有資料庫使用一個表空間
# service mysqld restart

使用mysqldump實現邏輯備份
語法:

mysqldump -h 伺服器 -u使用者名稱 -p密碼 資料庫名 > 備份檔案.sql

關於資料庫名:
-A, --all-databases 所有庫
school 資料庫名
school stu_info t1 school資料庫的表stu_info、t1
-d 備份資料庫的所有資料結構 不備份資料
-B, --databases bbs test mysql 多個數據庫 備份表結構和資料庫結構 不加此項需要先建立資料庫再恢復
–single-transaction     #基於此項可以實現對InnoDB表做熱備份
-R, --routines             #備份儲存過程和儲存函式
–triggers                #備份觸發器
–master-data=2        #備庫,該選項將會記錄binlog的日誌位置與檔名並追加到檔案中,如果為1將會輸出CHANGE MASTER命令,主從下有用
–add-drop-table 還能夠讓該備份覆蓋已有資料庫而不需要手動刪除原有資料庫。

恢復備份:
恢復
[[email protected] ~]# mysql -uroot -p888 school < /tmp/school_2015-09-14-15-40.sql
[email protected] tmp]> source /tmp/school_2015-09-14-15-40.sql


mysqldump

1、備份恢復單個數據庫
備份:
mydqldump -u 使用者 –p’密碼’ –default-character-set=Iatin1 資料庫名 [|gzip] > 備份檔名(資料庫預設字符集為Iatin1)

 示例:備份school資料庫
 mysqldump -uroot -p'123' --default-character-set=gbk -B school > /tmp/school.$(date +%F).sql

注意:-B 作用:建立資料庫和切換到資料庫,恢復時不用建立資料庫和刪表。

備份多個庫,-B 資料庫1 資料庫2 ...

恢復:
1)MySQL中用source命令
刪除:mysql -uroot -p -e ‘drop database school;’
檢視:mysql -uroot -p -e ‘show databases;’ | grep school
恢復:mysql> source /tmp/school.2015-11-17.sql;
檢視: mysql -uroot -p -e ‘select * from school.Books;’
2)mysql命令恢復
刪除:mysql -uroot -p -e ‘drop database school;’
檢視:mysql -uroot -p -e ‘show databases;’ | grep school
恢復:mysql -uroot -p < /tmp/school.2015-11-17.sql
檢視: mysql -uroot -p -e ‘select * from school.Books;’

2、備份恢復單個表
備份:
mysqldump -u 使用者名稱 -p 資料庫名 表名 > 備份的檔名
示例:
mysqldump -uroot -p school Books > /tmp/Books.$(date +%F).sql
恢復:
mysql -uroot -p -e ‘drop table school.Books;’
mysql -uroot -p -e ‘use school;show tables;’ | grep Books
mysql -uroot -p school < /tmp/Books.2015-11-17.sql
mysql -uroot -p -e ‘select * from school.Books;’
備份多個表:
mysqldump -u 使用者名稱 -p 資料庫名 表名1 表名2 > 備份的檔名

    mysqldump  -uroot -p123456  test2 user2  > /home/user2.sql 		備份指定資料庫的指定表  
	mysql -u root -p123456         test2 < /home/user2.sql                還原備份的表到指定資料庫中
	
	
	使用source 命令匯入sql資料:
	mysql匯入資料庫 常用source 命令 
	進入mysql資料庫控制檯, 如mysql -u root -p   
	mysql>use 資料庫

然後使用source命令,後面引數為指令碼檔案(如這裡用到的.sql)
mysql>source d:\wcnc_db.sql