mysql資料庫恢復

来源:https://www.cnblogs.com/yanyanqaq/archive/2020/05/15/12894412.html
-Advertisement-
Play Games

[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 指定字元集登錄資料庫或備份

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • NoSQL 開發中或多或少都會用到,也是面試必問知識點。最近這幾天的面試每一場都問到了。但是感覺回答的並不好,還有很多需要梳理的知識點。這裡通過幾篇 Redis 筆記整個梳理一遍,後面再加上面試題。 Redis 系列: 1. Redis系列(一)Redis入門 2. Redis系列(二)Redi... ...
  • 一、NoSQL簡介 NoSQL並不是No SQL(不再需要SQL),而是指Not Only SQL(不僅僅只有SQL)。NoSQL並不是用來替代關係型資料庫的,而是在某些使用關係型資料庫不合適的場景中,可以使用NoSQL資料庫進行優化,而在系統中主要的、常規的數據仍然使用關係型資料庫。 常用的NoS ...
  • [TOC] 前言 mysqlbinlog工具的作用是解析mysql的二進位binlog的日誌內容,把二進位日誌解析成可以在MySQL資料庫里執行的SQL語句。 1.mysql的binlog日誌是什麼 mysql數據目錄下的xxx bin.000001這樣的文件就是mysql的binlog日誌 2.m ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...