[TOC] 1.資料庫恢復基本事項 MySQL命令以及source命令恢複數據庫的原理就是在資料庫里重新執行文件的SQL語句的過程。數據恢復和字元集的關聯很大,如果字元集不正確則會導致恢復的數據亂碼。 2.利用source命令恢複數據庫 2.1.使用source命令恢複數據庫的說明 進入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 | 指定字元集登錄資料庫或備份 |