mysql用戶授權及數據備份恢復


用戶授權與權限撤銷

修改數據庫管理員從本機登陸的密碼
測試:
mysqladmin -hlocalhost -uroot -p password "新密碼"
Enter password:(輸入舊密碼)
[root@mysql ~]# mysqladmin -hlocalhost -uroot -p password "123456789"
Enter password:

重置數據庫管理員從本機登陸的密碼(不記得舊密碼的時候)
測試:
[root@mysql ~]# service mysql stop(先停服務)
[root@mysql ~]# service mysql start --skip-grant-table(再次起服務的時候跳過授權表)
[root@mysql ~]# mysql(直接登陸)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |(虛擬庫,不占用物理存儲空間,存儲已有庫和表的信息)
| hydra01 |
| mysql |(授權庫,存儲授權信息,使用不同的表來存儲)
| performance_schema |(數據庫服務運行時的參數信息)
| test |(公共庫,只要用戶能連接數據庫,默認對此庫有完全權限)
+--------------------+
mysql> use mysql;
mysql> show tables;
+---------------------------+
| user |(user,授權用戶的權限信息)
+---------------------------+
mysql> desc mysql.user;
db :存儲授權用戶對庫的權限信息
tables_priv:存儲授權用戶對表的權限信息
columns_priv:存儲授權用戶對表中字段的權限信息

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *E23149D4931DA6B3ED39B9F8228919EA20C55B18 |
| root | mysql | *79753594446313D2DDBBEB704EA410F9355C7547 |
| root | 127.0.0.1 | *79753594446313D2DDBBEB704EA410F9355C7547 |
| root | ::1 | *79753594446313D2DDBBEB704EA410F9355C7547 |
+------+-----------+-------------------------------------------+
mysql> update mysql.user set password=password("Anonymous") where user="root" and host="localhost";(設置新密碼)
mysql> flush privileges;(刷新)
[root@mysql ~]# service mysql restart
[root@mysql ~]# mysql -uroot -pAnonymous(測試登陸)

授權
權限列表表示方式:
all:完全權限
usage:無權限
select,關鍵字(字段),關鍵字:授予指定的權限
關鍵字列表:(詳情找grant權限說明)

數據庫名的表示方式:
*.*:所有庫所有表
庫名.*:對某個庫下的所有表
庫名.表名:指定庫下的指定表

用戶名的表示方式:
授權時自定義的用戶,要有標識性

客戶端地址的表示方式:(不設置時,匹配網絡中的所有地址)
192.168.1.1:固定地址
192.168.1.%: 指定網段
%:所有地址

identified by "密碼":設置授權用戶的登陸密碼

with grant option:讓授權用戶有授權權限(要對mysql數據庫有寫入權限,才可以授權,授權時,授權的權限只能小於等於次用戶)


查看哪些用戶可以鏈接數據庫服務器
格式:select user,host from mysql.user;
mysql> select user,name from mysql.user;

查看授權用戶的權限信息
格式:
show grants for 用戶名@"客戶端地址";
mysql> show grants for hydra@"192.168.4.%";

命令格式:
grant 權限列表 on 數據庫名 to 用戶名;
grant 權限列表 on 數據庫名 to 用戶名;(指定的地址才可以鏈接)
grant 權限列表 on 數據庫名 to 用戶名@客戶端地址 identified by "密碼";(指定的地址,且輸入密碼才可以鏈接)
grant 權限列表 on 數據庫名 to 用戶名@客戶端地址 identified by "密碼" with grant option;(授權的用戶,可以給其他用戶授權)

示例:
grant all on *.* to hydra@192.168.1.1;
grant select on userinfo.* to hydra@192.168.1.45 identified by "123456" with grant option;
grant select,insert,update(name) on studb.t1 to hydra;


撤銷用戶權限
格式:
revoke 權限列表 on 數據庫名 from 用戶@"客戶端地址";
實例:mysql> revoke insert on userinfo.t1 from hydra@"192.168.4.254";

撤銷用戶授權權限:(只有對庫做過明確授權才可以撤銷對其的權限)
格式:
revoke grant option on 數據庫名 from 用戶名@"客戶端地址";
實例:mysql> revoke grant option on userinfo.* form hydra@"192.168.4.254";

撤銷指定的權限:
格式:revoke 權限列表 on 數據庫名 from 用戶名@"客戶端地址";
實例:mysql> revoke delete on userinfo.* form hydra@"192.168.4.254";(撤銷刪除權限)

————————————————————————————————————————————————————————————————————

mysql圖形管理工具(phpadmin)需要lamp環境
phpMyAdmin-2.11.11-all-languages.tar.gz(把軟件解壓到var/www/html目錄下)
[root@mysql ~]# ls /var/www/html/
hydra.php phpMyAdmin-2.11.11-all-languages
[root@mysql html]# mv phpMyAdmin-2.11.11-all-languages phpmyadmin(為了訪問方便,改名)
[root@mysql html]# chown -R apache:apache phpmyadmin (為了安全,改一下所有者和所屬主)

修改phpadmin配置文件
[root@mysql phpmyadmin]# cp config.sample.inc.php config.inc.php(拷貝模板文件)
[root@mysql phpmyadmin]# vim config.inc.php
$cfg['blowfish_secret'] = 'hydra'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */(隨便寫一個,不空就可以)
$cfg['Servers'][$i]['host'] = 'localhost';(數據庫服務器地址)

客戶端訪問測試:
mysql> grant all on hydra01.* to hydra@"%" identified by "123";(指定一個用戶訪問測試)
[root@mysql ~]# firefox http://127.0.0.1/phpmyadmin(用戶名hydra 密碼123)


——————————————————————————————————————————————————————————————————

數據備份與恢復
數據丟失或誤刪時,使用備份數據恢復數據

備份策略
完整備份:備份所有數據
差異備份:備份自完整備份后,所產生的新數據
增量備份:上次備份后所產生的新數據

經常使用的備份方式:
完整備份+差異備份
完整備份+增量備份


備份方式:
物理備份,拷貝庫,表對應的源文件
格式:
cp -r /var/lib/mysql/mysql /opt/mysql.bak(拷貝文件)
tar -zcvf /opt/mysql.tar.gz /var/lib/mysql/mysql/*(壓縮備份)
mysqlhotcopy -u root -p Anonymous mysql /opt/(myql自帶的備份命令,但是只能備份myisam引擎的表)
物理備份,文件還原數據:
格式:
cp 備份文件 數據庫目錄
chwon -R mysql:mysql 還原文件目錄/還原文件
/etc/init.d/mysql restart(重啟服務)


邏輯備份:
備份時,根據已有的庫,表記錄,生成對應的sql命令,把生成的sql命令保存到指定的備份文件里
格式:
mysqldump -uroot -pAnonymous 數據庫名 > 目錄/備份名.sql
數據庫名的表示方式:
--all-databases:服務器上的所有數據
庫名:服務器上的某庫的所有數據
庫名 表名:一個庫里面某張表的數據
-B 庫名 庫名:備份指定的幾個庫

示例:
[root@mysql ~]# mysqldump -uroot -pAnonymous --all-databases > /opt/all.sql (備份所有)
[root@mysql ~]# mysqldump -uroot -pAnonymous hydra01 > /opt/hydra.sql(備份某庫)
[root@mysql ~]# mysqldump -uroot -pAnonymous hydra01 userinfo > /opt/hydratable.sql(某庫里面的某表)
[root@mysql ~]# mysqldump -uroot -pAnonymous -B hydra01 mysql > /opt/two.sql(備份多個指定庫)

使用mysql命令做完整恢復
格式:
mysql -uroot -pAnonymous 庫名 < 備份目錄/備份文件
mysql> create database hydra01;(備份文件沒有創建庫的命令,先創建庫名)
[root@mysql ~]# mysql -uroot -pAnonymous hydra01 < /opt/hydra.sql
[root@mysql ~]# mysql -uroot -pAnonymous < /opt/hydratable.sql (恢復多個庫的時候不寫庫名)

自動備份數據:
計划任務+備份腳本
實例:每周一23:30對數據庫上的hydra01庫做完整備份,
備份文件存放在/mydb目錄下,
使用庫名+日期的方式給備份文件命名
測試:
[root@mysql ~]# mkdir shell(創建文件夾)
[root@mysql shell]# vim bakhydra.sh(完整備份腳本)
#!/bin/bash
day=`date +%F`
if [ ! -e /mydb ];then
mkdir /mydb
fi
mysqldump -uroot -pAnonymous hydra01 > /mydb/hydra01_$day.sql
[root@mysql shell]# chmod +x bakhydra.sh(授執行權限)
[root@mysql shell]# crontab -e(添加到計划任務)
30 23 * * 1 /shell/bakhydra.sh &> /dev/null
[root@mysql ~]# /etc/init.d/crond restart(重啟計划任務)
[root@mysql ~]# chkconfig crond on(開機自啟)

使用完整備份數據時,只能把數據恢復到備份時的狀態
完整備份后新產生的數據無法恢復
完整備份,在備份數據的時候都會鎖表(寫鎖)

 

增量備份
binlog對數據做增量備份:
binlog日志是mysql數據庫服務日志文件的一種,
記錄客戶端連接數據庫服務器后,執行的除查詢外的sql命令
binlog日志又被稱作二進制日志

啟用binlog日志:
[root@mysql ~]# vim /etc/my.cnf
[mysqld]
log-bin
[root@mysql ~]# /etc/init.d/mysql restart
[root@mysql ~]# ls /var/lib/mysql/
mysql-bin.000001 (主機頭名字命名的,當文件大於500m會生新的)
[root@mysql mysql]# mysqlbinlog mysql-bin.000001 (查看文件)

自定義binlog日志文件名和存儲位置:
[root@mysql ~]# mkdir /mylog(自定義文件夾)
[root@mysql ~]# chown mysql /mylog/
[root@mysql ~]# vim /etc/my.cnf
[mysqld]
log-bin=/mylog/hydra(指定存儲路徑)
[root@mysql ~]# /etc/init.d/mysql restart
[root@mysql ]# ls /mylog/
hydra.000001 hydra.index
[root@mysql mylog]# mysqlbinlog hydra.000001(測試查看內容)

手動生成新的binlog日志
mysqldump -uroot -pAnonymous --flush-logs hydra > /opt/hydra.sql

刪除binlog日志文件
mysql> purge master log to "日志文件名";
mysql> purge master log to "hydra.000003";

重新初始化第一個binlog日志文件
mysql> reset master;


使用binglog日志恢復數據
binlog日志記錄sql命令的方法:
偏移量
時間點

恢復數據:
mysqlbinlog [選項] binlog日志文件名 | mysql -uroot -pAnonymous 數據庫名
選項:
偏移量
--start-position=數字
--stop-position=數字
時間點
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-datetime="yyyy-mm-dd hh:mm:ss"
測試:
mysql> mysqlbinlog --start-position=201 --stop-posotion=1190 hydra.000001 | mysql -uroot -pAnonymous hydra01;


安裝第三方軟件做增量備份
xtrabackup工具:
是一款強大的在線熱備份工具
備份過程中不鎖表
適合生產環境
由專業組織percona提供(改進mysql分支)
只能備份innodb和xtradb存儲引擎的表
主要包含兩個組件:
xtrabckup:c程序,支持innodb/xtradb
innobackupex:以perl腳本封裝xtrabackup,還支持myisam

[root@mysql ~]# rpm -qa | grep -i mysql-server
MySQL-server-5.6.15-1.el6.x86_64(備份要根據mysql的版本來使用)
[root@mysql ~]# xtrabackup
xtrabackup xtrabackup_55 xtrabackup_56(56)
要求:必須先有一次完整備份,這樣第二次備份時
才知道哪些數據是新生成的,備份時只備份表記錄
不備份表結構

格式:
xtrabackup_56 <選項>
選項:
--backup 備份數據
--datadir=/var/lib/mysql 指定數據庫目錄的位置
--target-dir=目錄名 指定備份文件存儲的目錄
--prepare 准備恢復數據
--incremental-basedir=目錄名 增量備份數據時,指定上一次文件存儲的目錄
--incremental-dir=目錄名 增量恢復數據時,使用哪個備份目錄下數據做恢復
示例:
mysql> insert into db1.t1 values(100);(寫入數據)
[root@mysql ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --target-dir=/allbak(完整備份)
mysql> insert into db1.t1 values(200);(寫入新數據)
[root@mysql ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --target-dir=/newdir1 --incremental-basedir=/allbak(第一次增量備份)
mysql> insert into db1.t1 values(300);(再次寫入新數據)
[root@mysql ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --target-dir=/newdir2 --incremental-basedir=/newdir1(第二次增量備份)
mysql> insert into db1.t1 values(400);(繼續寫入)
[root@mysql ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --target-dir=/newdir3 --incremental-basedir=/newdir2(第三次備份)


事務日志文件/var/lib/mysql
ib_logfile0
ib_logfile1
xtrabackup_checkpoints (本次備份的類型和lsn的范圍)
xtrabackup_logfile(lsn序列號范圍對應得sql命令)
ibdata1(sql命令產生的數據信息)
日至對應的數據
備份目錄/數據庫名/表名同名的文件

xtrabackup恢復數據步驟
示例
准備恢復數據:
[root@mysql ~]# xtrabackup_56 --prepare --datadir=/var/lib/mysql --target-dir=/allbak
xtrabackup_56 --prepare --datadir=/var/lib/mysql --target-dir=/allbak/ --incremental-dir=/newdir1
xtrabackup_56 --prepare --datadir=/var/lib/mysql --target-dir=/allbak/ --incremental-dir=/newdir2
xtrabackup_56 --prepare --datadir=/var/lib/mysql --target-dir=/allbak/ --incremental-dir=/newdir3
把備份目錄下的備份文件拷貝回對應的數據庫目錄下:
[root@mysql ~]# cp /allbak/db1/t1.ibd /var/lib/mysql/db1/
重啟數據庫服務:
[root@mysql ~]# /etc/init.d/mysql restart
驗證是否恢復成功:
mysql> select * from db1.t1;

 

——————————————————————————————————————————————————————————————————

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM