mysql數據庫恢復


1.數據庫恢復基本事項

MySQL命令以及source命令恢復數據庫的原理就是在數據庫里重新執行文件的SQL語句的過程。數據恢復和字符集的關聯很大,如果字符集不正確則會導致恢復的數據亂碼。

2.利用source命令恢復數據庫

2.1.使用source命令恢復數據庫的說明

進入MySQL數據庫控制台后,切換到想恢復數據的數據庫。

接着,使用source命令進行恢復,后面接.sql文件。

source oldboy_db.sql

這個oldboy_db.sql文件是系統的相對路徑,默認是登錄MySQL前的系統路徑,也可以使用完整的路徑。

2.2.恢復演示

1、先執行一次正式的備份:
mysqldump -B --master-data=2 --single-transaction oldboy|gzip >/opt/oldboy.sql.gz
2、恢復前解壓為SQL文件:
gzip -d /opt/oldboy.sql/gz
3、登錄數據庫刪除oldboy數據庫,然后准備用source恢復:
drop database oldboy;
select * from oldboy.test;
source /opt/oldboy.sql
select * from oldboy.test;

3.利用MySQL命令恢復(標准)

3.1.使用MySQL命令恢復基本實踐

MySQL命令是MySQL數據庫自帶的重要命令之一,除了日常登錄數據庫之外,還可以通過Mysqldump備份的文件或者人工編輯的SQL語句文件對數據庫進行數據恢復。

drop database oldboy;
mysql </opt/oldboy.sql
mysql -e "select * from oldboy.test;"  #使用-e參數,可在命令行查MySQL數據

3.2.使用開發人員提交的SQL語句恢復文件

假定開發人員讓運維人員或DBA插入數據到數據庫(可能是通過郵箱發送的,內容可能是字符串或者SQL文件)。

此時的SQL文件里很可能沒有use db這樣的字樣,此時如果使用mysql命令導入就要指定數據庫名。

mysql oldboy </opt/oldboy.sql

指定庫名oldboy的作用就相當於是在數據庫里執行use oldboy,因此如果使用mysqldump備份時不使用-B參數,那么在恢復時不但可能會提示沒有數據庫,還可能會提示沒有選擇數據庫。

並且在SQL語句文件里盡可能地加入字符集設置,以防止亂碼。假設開發人員提交了N行插入語句,則需要插入到數據庫。

insert into test(name) values('小陶');

文件里執行:
set names utf8;
insert into test(name) values('小陶');

如果是utf8數據庫,人工編輯的SQL文件,使用“utf8”的格式。

恢復數據到數據庫:
mysql </opt/insert.sql
mysql oldboy</opt/insert.sql
mysql -e "select * from oldboy.test;"

使用-B參數以后,備份結果中會帶use oldboy和“create database oldboy”語句,而恢復時在mysql命令后指定庫名就相當於是執行use oldboy。

mysql </opt/oldboy.sql

否則:
mysql oldboy</opt/insert.sql

3.3.針對壓縮的備份數據進行恢復

3.3.1.使用gzip解壓(會刪除壓縮文件)

gzip -d /opt/oldboy.sql.gz
mysql </opt/oldboy.sql

3.3.2.使用gzip解壓(不會刪除壓縮文件)

!mysqldump  #調用最近的mysqldump命令,重復執行備份。
mysqldump -B --master-data=2 --single-transaction oldboy|gzip >/opt/oldboy.sql.gz
gzip -cd /opt/oldboy.sql.gz >/opt/oldboy1.sql  #特殊解壓方法
mysql </opt/oldboy1.sql

3.3.3.使用gunzip解壓(不會刪除壓縮文件)

gunzip -cd /opt/oldboy.sql.gz >/opt/oldboy.sql
mysql </opt/oldboy2.sql
或者:
gunzip</opt/oldboy.sql.gz|mysql

3.3.4.使用zcat讀取壓縮包數據

zcat /opt/oldboy.sql.gz >/opt/oldboy3.sql
mysql </opt/oldboy3.sql

4.利用mysql -e參數查看mysql數據

mysql命令提供了一個功能,可以讓使用者無須登錄數據庫,在Linux命令行就可以執行SQL語句。

4.1.查看數據庫oldboy庫test表數據

mysql -e "use oldboy;select * from test;"

4.2.利用mysql -e參數查看SQL線程執行狀態

mysql -e "show processlist;"

查看慢查詢語句:
mysql -e "show full processlist;"

show full processlist;

kill id;  #id=xxx

解決辦法:
調整MySQL的超時參數配置:
show variables like '&_timeout%';
set global wait_timeout = 60;
set global interactive_timeout = 60;

配置文件里修改:
[mysqld]
interactive_timeout = 120  #此參數設置后wait_timeout自動生效
wait_timeout = 120

其他方法:
1、在PHP程序中,不使用持久鏈接,即使用mysql_connect而不是pconnect。
2、PHP程序執行完畢,應該顯式調用mysql_close。
3、Java程序調整連接池(C3P0)或者調整JAVA服務(Tomcat有關連接池參數)。
4、逐步分析MySQL的SQL查詢及慢查詢日志,找到查詢過慢的SQL,優化。

4.3.利用mysql -e參數查看mysql變量及性能狀態

查看mysql的所有參數配置:
mysql -e "show variables;"

查看my.cnf配置文件的配置有沒有在數據庫中生效:
mysql -e "show variables like 'log-bin';"

查看mysql數據庫運行狀態:
mysql -e "show global status;"|head -5

4.4.利用mysql -e參數不重啟數據庫修改數據庫參數

mysql -e "show variables;"|grep key_buffer
mysql -e "set global key_buffer_size = 1024*1024*16;"
mysql -e "show variables;"|grep key_buffer

實現不重啟數據庫更改數據庫參數:
set global key_buffer_size = 1024*1024*16;  #及時生效,重啟mysql失效

4.5.利用mysql -e參數引出的重要命令

show processlist;  #查看數據庫里正在執行的SQL語句,可能無法看全完整的SQL語句。
show full processlist;  #查看正在執行的完整SQL語句,完整顯示。
set global key_buffer_size = 1024*1024*16;  #不重啟數據庫調整數據庫參數,直接生效,重啟后失效。
show variables;  #查看數據庫的配置參數信息。例如,my.cnf里參數的生效情況。
show variables like '%log_bin%';
kill ID;  #殺掉SQL線程的命令,ID為線程號。
show session status;  #查看當前會話的數據庫狀態信息。
show global status;  #查看整個數據庫運行的狀態信息,要分析並要做好監控。
show engine innodb status;  #顯示innodb引擎的性能狀態。

4.6.mysqladmin命令常用參數

mysqladmin password oldboy123  #設置密碼
mysqladmin -uroot -poldboy123 password oldboy  #修改密碼
mysqladmin -uroot -poldboy123 status  #查看狀態,相當於show status
mysqladmin -uroot -poldboy123 -i 1 status  #每秒查看一次狀態
mysqladmin -uroot -poldboy123 extended-status  #等同於show global status
mysqladmin -uroot -poldboy123 flush-logs  #切割日志
mysqladmin -uroot -poldboy123 processlist  #查看執行的SQL語句信息
mysqladmin -uroot -poldboy123 processlist -i 1  #每秒查看一次執行的SQL語句
mysqladmin -uroot -p'oldboy123' shutdown  #關閉mysql服務
mysqladmin -uroot -p'oldboy123' variables  #相當於show variables

4.7.mysql命令常用參數

mysql命令常用參數 說明
-u 指定數據庫用戶
-p 指定數據庫密碼
-S 指定數據庫socket文件
-h 指定數據庫主機,默認localhost
-P 指定數據庫端口,默認3306
-e 不登錄數據庫執行數據庫命令
--default-character-set=name 指定字符集登錄數據庫或備份


免責聲明!

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



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