mysql數據庫的用戶權限使用和數據的備份和恢復

數據庫的操作,表的操作,很重要,但是我感覺對於數據庫的安全才是最重要的,來看看該怎麼管理好自己的數據庫吧,該注意的地方已經做了註釋,希望大家可以好好學習。




在本機設置數據庫管理員初始密碼

[root@xu mysql]# mysqladmin -hlocalhost -uroot password "123"


修改密碼 (要知道之前的密碼)

[root@xu mysql]# mysqladmin -hlocalhost -uroot -p password "456"

Enter password:


跳過SQL的驗證庫進入

vim /etc/my.cnf

1 [mysqld]

2 skip-grant-table




修改數據庫管理員的密碼

mysql> use mysql;

mysql> select User,Host,password from user; 查看user表

mysql> update mysql.user set Passwrod=passwd("888") where User="root" and Host="localhost"; 修改密碼

mysql> flush privileges; 刷新授權 只要手動任何一個表作了一個更改就要刷新授權表


注視掉

1 [mysqld]

2 skip-grant-table


重啓服務


默認情況下只允數據庫在本機登錄的時候有給數據庫授權的權限





查看自己的登錄權限

mysql> show grants;


查看當前有多少個授權用戶 權限多少

數據庫名

mysql> show grants for extmail@localhost; ---------- 不對。


----------------------------------------

用戶授權 (就在本機直接登錄其它的電腦的mysql 用管理員身份)


授權格式

grant 權限列表 on 數據庫名 to 用戶名@ "客戶端地址" >[ identified by "密碼" with grant option];


權限列表

類表值用,分割

all 所有的

select ,delect,update(name,age) 可選擇的


數據庫

*.* 所有的

數據庫名.* 這個數據的所有

數據庫名.表名



用戶名

與系統用戶無關 。 是自己在授權是自定義的 mysql.user表裏 要有標識性


客戶端地址

% 所有主機

1.1.1.1 單個主機

192.168.1.% 某個網段

pc1.uplooking.com

.uplooking.com


---------------------------------------

給所有用戶手受所有權限


允許使用數據庫服務的root用戶從網絡中所有主機訪問數據庫服務器 密碼123456 對服務器 上的所有庫有完全權限 且有授權的權限


授權之前

mysql> select User,Host,password from user;

授權的表

mysql> grant all on *.* to root@"%" identified by "123456" with grant option;


查看授權的權限

mysql> show grants for root@"%";


----------------------------------------------

設置 只能用webuser 用戶登錄 網段是192.168.1.%

mysql> grant all on grantdb.* to webuser@"192.168.1.%";


----------------------------------------------

mysql> desc db;

+-----------------------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------------------+---------------+------+-----+---------+-------+

| Host | char(60) | NO | PRI | | |

| Db | char(64) | NO | PRI | | | 庫的授權信息

| User | char(16) | NO | PRI | | | 用戶的授權信息

| Select_priv | enum('N','Y') | NO | | N | |

| Insert_priv | enum('N','Y') | NO | | N | |

| Update_priv | enum('N','Y') | NO | | N | |

| Delete_priv | enum('N','Y') | NO | | N | |

| Create_priv | enum('N','Y') | NO | | N | |

| Drop_priv | enum('N','Y') | NO | | N | |

| Grant_priv | enum('N','Y') | NO | | N | |

| References_priv | enum('N','Y') | NO | | N | |

| Index_priv | enum('N','Y') | NO | | N | |

| Alter_priv | enum('N','Y') | NO | | N | |

| Create_tmp_table_priv | enum('N','Y') | NO | | N | |

| Lock_tables_priv | enum('N','Y') | NO | | N | |

| Create_view_priv | enum('N','Y') | NO | | N | |

| Show_view_priv | enum('N','Y') | NO | | N | |

| Create_routine_priv | enum('N','Y') | NO | | N | |

| Alter_routine_priv | enum('N','Y') | NO | | N | |

| Execute_priv | enum('N','Y') | NO | | N | |

| Event_priv | enum('N','Y') | NO | | N | |

| Trigger_priv | enum('N','Y') | NO | | N | |

+-----------------------+---------------+------+-----+---------+-------+

22 rows in set (0.01 sec)


-------------------------------------------

庫的授權

mysql> use mysql;

mysql> desc db;

mysql> select Host,User,Db from db;



----------------------------------

%不包括localhost

mysql> create database webdb;

mysql>grant select on webdb.* to user@"%" identified by "123" with grant option;

quit


mysql -hlocalhost -uuser1 -p123 登錄不上原因 % 不包括localhost


-------------------------------------------------

匿名用戶不輸入密碼也可以登錄


登錄

[root@xu ~]# mysql -ua



mysql> select User,Host,password from user;

+------+---------------+-------------------------------------------+

| User | Host | password |

+------+---------------+-------------------------------------------+

| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| root | xu.qq.com | |

| root | 127.0.0.1 | |

| | localhost | | 這樣的不安全 ,隨便輸入個用戶就可以進入不需要密碼,匿名用戶

| | xu.qq.com | |

| root | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| zp1 | 192.168.1.111 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

| user | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

+------+---------------+-------------------------------------------+


刪除 空白的用戶

mysql> delete from mysql.user where User="";


刷新

mysql> flush privileges;


在重新登錄 就不能登錄了 更加安全

[root@xu ~]# mysql -ua

ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: NO)


--------------------------------------------------

用戶權限的撤銷 (前提要有這樣的授權才行要不他提示沒有這種權限)


revoke 權限列表 on 數據庫名 from 用戶名@ “客戶端地址“;


查看有什麼權限

mysql> show grants for root@"%";


| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |


------------------------------------

撤銷用戶登錄權限 (但是授權的權限還在)用戶也在

mysql> revoke all on *.* from root@"%";


再次查看

mysql> show grants for root@"%";

| GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |


-----------------------------------------------

去掉授權的權限 權限沒有了 但是用戶還在

mysql> revoke grant option on *.* from root@"%";


查看

| GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |


-------------------------------------

在刪除 這個root用戶



這樣就真正的把權限和用戶刪出了。



--------------------------------------------------------------

數據庫的備份和恢復


物理備份 cp 或者 tar 缺點是跨平臺不太好

邏輯備份 提供的備份命令 進行備份 跨平臺性


邏輯備份

[root@xu dbadb]# mysqldump -hip -u用戶名 -p密碼 數據庫名 > 目錄名/文件


備份表


數據庫名

數據庫名 所有的進行備份

數據庫名 表名1 表名2 表名3 備份多個表


備份庫

-B 數據庫名1 數據名2 備份多個選擇的數據庫

[root@xu /]# mysqldump -uroot -p123 --all-databases >/dbadb/aa 備份所有庫


-----------------------------------------------------


順序執行

[root@xu dbadb]# mkdir /dbadb; mysqldump -hlocalhost -uroot -p123 webdb > /dbadb/aa.sql


----------------------------------------

恢復

[root@xu /]# mysql -hip -u 用戶名 -p密碼 數據名 < 文件名.sql


-----------------------------------------

增量備份



mysql 日誌 ( 錯誤 , 查詢 , binlog日誌 , 慢查詢日誌)

binlog日誌 能夠記錄除查詢之外的sql語句


默認binlog 日誌 在 /var/lib/mysql/ 下

mysql-bin.0000001 記錄mysql語句 (查詢的不記錄)500兆以後就會新創建一個

mysqld-bin.index 存放binlog文件的分數 只有重啓服務的時候纔會生成,手動創建index內容不會添加進去

查看binlog文件 時間和節點 來記錄的

mysqlbinlog mysql-bin.0000001


------------------------

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin


[root@xu mysql]# service mysqld restart


----------------------

指定binlog 名字

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin=aa



------------------------

指定路徑

[root@xu mysql]# vim /etc/my.cnf


1 [mysqld]

2 log-bin=/aa/wenjian


mkdir /aa

chmodo+w /aa


重啓服務


-------------------------

手動創建binlog日誌

1 service mysqld restart 最少用的

2 mysql > flush logs;

3 mysql -uroot -p123 -e "flush logs"

4 mysqldump -uroot -p123 --flush-logs db1 > /db.sql


-------------------------------


查看binlog文件

mysqlbinlog mysql-bin.0000001


--------------------

恢復 以節點恢復

[root@xu mysql]# mysqlbinlog aa.0000001 --start-postion=98 --stop-positon=189 在桌面顯示

[root@xu mysql]# mysqlbinlog aa.0000001 --start-postion=98 --stop-positon=189 |mysql -uroot -p123



增量備份


------------------------------------------


差異備份


星期1 星期2 星期3 星期4 星期5 星期6 星期日

完全備份數據庫 bin bin bin bin bin 完全備份數據庫


--------------------------------------------------

以時間恢復

[root@xu mysql]# mysqlbinlog aa.0000001 --start-datetime="2013-03-02 13:53:21" --start-time="2013-03-02 13:53:29"

[root@xu mysql]# mysqlbinlog aa.0000001 --start-datetime="2013-03-02 13:53:21" --start-time="2013-03-02 13:53:29" |mysql -uroot -p123



在時間恢復的時候如果倆個命令在同一個時間點上 恢復的時候結束時間要大於開始時間


批量恢復binlog日誌的內容

[root@xu mysql]# mysqlbinlog `cat /binlogdir/aa.index` | mysql -uroot -p123



清除index裏的文件

prinyf “” > /binlogdir/aa.index


----------------------------------------------

慢查詢日誌


log-slow-queries[=/path_to/file_name]

long_query_time=3

記錄了執行時間超過 log_query_time 參數值的 sql 語句,慢查詢日誌可以的有效的幫助我們發現實際應用中 sql 性能問題,

找出執行效率低下的 SQL 語句


--------------------------------------------

錯誤日誌

log-error=/var/log/mysqld.log

記錄 mysql 數據庫啓動關閉信息,以及服務器運行過程中所發生的任何嚴重的錯誤信息,通常,當數據庫出現問題不能正

常啓動,我們應當首先想到的就是查看錯誤日誌


--------------------------------

二進制日誌

log-bin=[/path_to/file_name]

bin-log=pp

max_binlog_size=1M

binary log 文件是以二進制格式保存的,我們需要藉助 mysqlbinlog 工具進行


----------------------------------------

binlog實現 AB 複製(主從複製)


1保持原始數據一至 從的一定要有主的

2 安全機制都關掉

3 線路問題沒問題


主的服務器

#1 刪掉之前的庫 到原始狀態

#2 重啓服務

3啓動binlog日誌


進入mysql

創建一個授權帳號

grant replication slave on *.* to plj@"192.168.1.149" indentified by "123";


編輯文件

[root@xu mysql]# vim /etc/my.cnf

1 [mysqld]

2 log-bin

3 server-id=71



---------------------------------------------

從的配置

重啓服務

[root@xu mysql]# service mysqld restart


倆個主機的數據一致


編輯文件

[root@xu mysql]# vim /etc/my.cnf

server-id=149

master-host=192.168.1.71

master-user=plj

master-password=123



[root@xu mysql]# service mysqldd restart


---------------------------

[root@xu mysql]# cd /var/lib/mysql/


db ib_logfile0 mysql relay-log.info

extmail ib_logfile1 mysqld-relay-bin.000002 test

ibdata1 master.info mysqld-relay-bin.index



mysqld-relay-bin.000002 中繼日誌

mysqld-relay-bin.index 中繼日誌份數

relay-log.info 中繼日誌主日誌數據庫的信息


-------------------------

主數據庫查看自己的狀態

[root@xu mysql]# show master status\G;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000001 | 956 | | |

+-------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


從數據庫查看自己的狀態

[root@xu mysql]# show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.71

Master_User: plj

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqld-bin.000001

Read_Master_Log_Pos: 956

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 1094

Relay_Master_Log_File: mysqld-bin.000001

Slave_IO_Running: Yes 重啓服務以後 他看的是master.info 信息

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 956

Relay_Log_Space: 1094

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.00 sec)


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