MySQl創建用戶和授權,mysquldump


最高權限管理者是root用戶,它擁有着最高的權限操作。包括select、update、delete、update、grant等操作。那么一般情況在公司之后DBA工程師會創建一個用戶和密碼,去連接數據庫的操作,並給當前的用戶設置某個操作的權限(或者所有權限)。那么這時就需要來簡單了解一下:

  • 如何創建用戶和密碼

  • 給當前的用戶授權

  • 移除當前用戶的權限

  如果想創建一個新的用戶,則需要以下操作:

  

1.進入到mysql數據庫下

mysql> use mysql
Database changed

2.對新用戶增刪改

1.創建用戶:
# 指定ip:192.118.1.1的hao用戶登錄
create user 'hao'@'192.118.1.1' identified by '123';
# 指定ip:192.118.1.開頭的hao用戶登錄
create user 'hao'@'192.118.1.%' identified by '123';
# 指定任何ip的hao用戶登錄
create user 'hao'@'%' identified by '123';

2.刪除用戶
drop user '用戶名'@'IP地址';

3.修改用戶
rename user '用戶名'@'IP地址' to '新用戶名'@'IP地址';

4.修改密碼
set password for '用戶名'@'IP地址'=Password('新密碼');

3.對當前的用戶授權管理

#查看權限
show grants for '用戶'@'IP地址'

#授權 hao用戶僅對db1.t1文件有查詢、插入和更新的操作
grant select ,insert,update on db1.t1 to "hao"@'%';

# 表示有所有的權限,除了grant這個命令,這個命令是root才有的。hao用戶對db1下的t1文件有任意操作
grant all privileges  on db1.t1 to "hao"@'%';
#hao用戶對db1數據庫中的文件執行任何操作
grant all privileges  on db1.* to "hao"@'%';
#hao用戶對所有數據庫中文件有任何操作
grant all privileges  on *.*  to "hao"@'%';
 
#取消權限
 
# 取消hao用戶對db1的t1文件的任意操作
revoke all on db1.t1 from 'hao'@"%";  

# 取消來自遠程服務器的hao用戶對數據庫db1的所有表的所有權限

revoke all on db1.* from 'hao'@"%";  

取消來自遠程服務器的hao用戶所有數據庫的所有的表的權限
revoke all privileges on *.* from 'hao'@'%';

一 mysqldump指令實現數據備份、mysql指令實現數據還原

 DBA到底是做什么的,百科上說:數據庫管理員(Database Administrator,簡稱DBA),是從事管理和維護數據庫管理系統(DBMS)的相關工作人員的統稱,屬於運維工程師的一個分支,主要負責業務數據庫從設計、測試到部署交付的全生命周期管理。DBA的核心目標是保證數據庫管理系統的穩定性、安全性、完整性和高性能。

  百科出來的內容總是那么的專業,讓人看完之后的感覺是很解釋的很好,我認為,DBA主要做三件事情:1.保證公司的數據不丟失不損壞 2.提高數據庫管理系統的工作性能

  對於現在的公司來講,數據變得尤為重要,可以說最重要,你的網站可以無法訪問,服務器可以宕機,但是數據絕對不能丟。

備份表: 備份其中的某個表: 語法:mysqldump -u 用戶名 -p 庫名 表名> (路徑)備份的文件名 mysqldump -uroot -p crm2 student> f:\數據庫備份練習\crm2_table_student.sql

單純進行表備份的時候,就不用寫-B參數了,因為庫crm2后面就是student表了,也就是說crm2庫還在呢

備份多個表: 語法:mysqldump -u 用戶名 -p 庫名 表名1 表名2> (路徑)備份的文件名

和多個庫一起備份有一個同樣的問題,就是如果只需要恢復某一張表怎么辦,上面的多表備份是不是也不太合適,所以又要進行分表備份 又是同樣的套路,獲取所有的表名,寫一個循環腳本,執行單表備份的指令。 分庫分表備份有些缺點:文件多,很碎,數據量非常大的時候,效率低 1.做一個完整的全備,再做一個分庫分表的備份 2.腳本批量恢復多個sql文件。 備份數據庫表結構: 利用mysqldump -d參數只備份表的結果,例如:備份crm2庫的所有表的結構:

C:\WINDOWS\system32>mysqldump -uroot -p -B -d crm2> f:\數據庫備份練習\crm2stru.sql Enter password: ***

備份出來的文件打開一看,就沒有了插入數據的部分

mysqldump的關鍵參數說明:       1.-B指定多個庫,增加建庫語句和use 語句       2.--compact 去掉注釋,適合調試輸出,生產上不用       3.-A或者--all-databases 例如:C:\WINDOWS\system32>mysqldump -uroot -p -B -A> f:\數據庫備份練習\all.sql Enter password: ***

      4.-F刷新binlog日志       5.--master-data 增加binlog日志文件名及對應的為支點。       6.-x,--lock-all-tables 將所有的表鎖住,一般mysql引擎都是鎖表,全部都不能使用了,所有不太友好

      7.--add-locks這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次導入數據庫時其他用戶對表進行的操作(mysql默認是加上的)       8.-l,--lock-tables Lock all tables for read       9.-d 只備份表結構       10.-t 只備份數據

  1. --single-transaction 開啟事務,適合innodb事務數據庫備份,InnoDB表在備份時,通常啟用選項--single-transaction來保證備份的一致性,實際上工作原理時設定本次會話的隔離界別為:REPEATABLE READ,以確保本次會話(dump)時,不會看到其他會話已經提交了數據。

        MyISAM全庫備份指令推薦:(gzip是壓縮文件為zip類型的)         mysqldump -uroot -p666 -A -B --master-data=2 -x|gzip>f:\數據庫備份練習\all.sql.gz         InnoDB全庫備份指令推薦:         mysqldump -uroot -p666 -A -B --master-data=2 --single-transaction|gzip>f:\數據庫備份練習\all.sql.gz

    數據恢復:

  一、通過source命令恢復數據庫     進入mysql數據庫控制台,mysql -uroot -p666登陸后     mysql>use 數據庫;     然后使用source命令,后面參數為腳本文件(如這里用到的是.sql文件,如果你備份的是.txt文件,那這里寫.txt文件)

    mysql>source crm2.sql #這個文件是系統路徑下的,默認是登陸mysql前的系統路徑,在mysql中查看系統路徑的方法是通過system+系統命令來搞的     mysql>system ls   二、利用mysql命名恢復(標准)     mysql -root -p666 -e "use crm2;drop table student;show tables;" 必須是雙引號     mysql -uroot -p666 crm2<f:\數據庫備份練習\crm2.sql     mysql -uroot -p666 -e "use crm2;show tables;"

    注:如果sql文件里面沒有use db這樣的字樣時,在導入時就要指定數據庫名了。

    mysql -uroot -p666 crm2<.sql文件

    建議備份數據庫時都指定上-B參數,效果好

    說明:mysql不光可以恢復mysqldump的備份,只要文件中是sql語句,都可以通過mysql命令執行到數據庫中

    mysql 帶-e參數實現非交互式對話,就是不需要到mysql里面去,在外面執行里面的指令的方法,例如:mysql -uroot -p666 -e "use crm2;show tables;",但是語句必須是雙引號包裹。

    批量恢復庫:找到所有的數據庫名,然后通過庫名去循環恢復

二 MySQL數據備份

#1. 物理備份: 直接復制數據庫文件,適用於大型數據庫環境。但不能恢復到異構系統中如Windows。
#2. 邏輯備份: 備份的是建表、建庫、插入等操作所執行SQL語句,適用於中小型數據庫,效率相對較低。
#3. 導出表: 將表導入到文本文件中。 

一、使用mysqldump實現邏輯備份

#語法:
# mysqldump -h 服務器 -u用戶名 -p密碼 數據庫名 > 備份文件.sql

#示例:
#單庫備份
mysqldump -uroot -p123 db1 > db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

#多庫備份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

#備份所有庫
mysqldump -uroot -p123 --all-databases > all.sql 

二、恢復邏輯備份

#方法一:
[root@localhost backup]# mysql -uroot -p123 < /backup/all.sql

#方法二:
mysql> use db1;
mysql> SET SQL_LOG_BIN=0;
mysql> source /root/db1.sql

#注:如果備份/恢復單個庫時,可以修改sql文件
DROP database if exists school;
create database school;
use school; 

三、備份/恢復案例

#數據庫備份/恢復實驗一:數據庫損壞
備份:
1. # mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
2. # mysql -uroot -p123 -e 'flush logs' //截斷並產生新的binlog
3. 插入數據 //模擬服務器正常運行
4. mysql> set sql_log_bin=0; //模擬服務器損壞
mysql> drop database db;

恢復:
1. # mysqlbinlog 最后一個binlog > /backup/last_bin.log
2. mysql> set sql_log_bin=0; 
mysql> source /backup/2014-02-13_all.sql //恢復最近一次完全備份 
mysql> source /backup/last_bin.log //恢復最后個binlog文件


#數據庫備份/恢復實驗二:如果有誤刪除
備份:
1. mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
2. mysql -uroot -p123 -e 'flush logs' //截斷並產生新的binlog
3. 插入數據 //模擬服務器正常運行
4. drop table db1.t1 //模擬誤刪除
5. 插入數據 //模擬服務器正常運行

恢復:
1. # mysqlbinlog 最后一個binlog --stop-position=260 > /tmp/1.sql 
# mysqlbinlog 最后一個binlog --start-position=900 > /tmp/2.sql 
2. mysql> set sql_log_bin=0; 
mysql> source /backup/2014-02-13_all.sql //恢復最近一次完全備份
mysql> source /tmp/1.log //恢復最后個binlog文件
mysql> source /tmp/2.log //恢復最后個binlog文件

注意事項:
1. 完全恢復到一個干凈的環境(例如新的數據庫或刪除原有的數據庫)
2. 恢復期間所有SQL語句不應該記錄到binlog中

四、實現自動化備份

備份計划:
1. 什么時間 2:00
2. 對哪些數據庫備份
3. 備份文件放的位置

備份腳本:
[root@localhost~]# vim /mysql_back.sql
#!/bin/bash
back_dir=/backup
back_file=`date +%F`_all.sql
user=root
pass=123

if [ ! -d /backup ];then
mkdir -p /backup
fi

# 備份並截斷日志
mysqldump -u${user} -p${pass} --events --all-databases > ${back_dir}/${back_file}
mysql -u${user} -p${pass} -e 'flush logs'

# 只保留最近一周的備份
cd $back_dir
find . -mtime +7 -exec rm -rf {} \;

手動測試:
[root@localhost ~]# chmod a+x /mysql_back.sql 
[root@localhost ~]# chattr +i /mysql_back.sql
[root@localhost ~]# /mysql_back.sql

配置cron:
[root@localhost ~]# crontab -l
2 * * * /mysql_back.sql

五、表的導出和導入

SELECT... INTO OUTFILE 導出文本文件
示例:
mysql> SELECT * FROM school.student1
INTO OUTFILE 'student1.txt'
FIELDS TERMINATED BY ',' //定義字段分隔符
OPTIONALLY ENCLOSED BY '' //定義字符串使用什么符號括起來
LINES TERMINATED BY '\n' ; //定義換行符

mysql 命令導出文本文件
示例:
# mysql -u root -p123 -e 'select * from student1.school' > /tmp/student1.txt
# mysql -u root -p123 --xml -e 'select * from student1.school' > /tmp/student1.xml
# mysql -u root -p123 --html -e 'select * from student1.school' > /tmp/student1.html

LOAD DATA INFILE 導入文本文件
mysql> DELETE FROM student1;
mysql> LOAD DATA INFILE '/tmp/student1.txt'
INTO TABLE school.student1
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n';
#可能會報錯
mysql> select * from db1.emp into outfile 'C:\\db1.emp.txt' fields terminated by ',' lines terminated by '\r\n';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable


#數據庫最關鍵的是數據,一旦數據庫權限泄露,那么通過上述語句就可以輕松將數據導出到文件中然后下載拿走,因而mysql對此作了限制,只能將文件導出到指定目錄
在配置文件中
[mysqld]
secure_file_priv='C:\\' #只能將數據導出到C:\\下

重啟mysql
重新執行上述語句

六、數據庫遷移

務必保證在相同版本之間遷移
# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目標IP -uroot -p456

 


免責聲明!

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



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