日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL(5)日志管理、备份与恢复,断点

發(fā)布時(shí)間:2024/9/3 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL(5)日志管理、备份与恢复,断点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、MySQL日志管理
    • 1.1 日志的分類
      • 1)錯(cuò)誤日志
      • 2) 通用查詢?nèi)罩?/li>
      • 3) 二進(jìn)制日志(binlog)
      • 4) 慢查詢?nèi)罩?/li>
      • 5) 配置日志
    • 1.2 日志的查詢
  • 二、MySQL 完全備份與恢復(fù)
    • 2.1 數(shù)據(jù)備份的重要性
    • 2.2 造成數(shù)據(jù)丟失的原因
    • 2.3 數(shù)據(jù)庫(kù)備份的分類
      • 2.3.1 從物理和邏輯角度分
        • 1)物理備份
        • 2)邏輯備份
    • 2.4 數(shù)據(jù)庫(kù)的備份策略
    • 2.5 MySQL 完全備份
      • 2.5.1 物理冷備份與恢復(fù)
      • 2.1.2 專用備份工具mydump 和mysqlhotocopy
        • (1)完全備份一個(gè)或多個(gè)完整的庫(kù)(包括其中所有的表)
        • (2)完全備份 MySQL 服務(wù)器中所有的庫(kù)
        • (3)完全備份指定庫(kù)中的部分表
        • (4)查看備份文件
      • 2.1.3 MySQL 完全備份(使用免交互)
        • (1)恢復(fù)數(shù)據(jù)庫(kù)
        • (2)恢復(fù)數(shù)據(jù)表
      • 2.1.4 MySQL 增量備份與恢復(fù)
        • 1.開啟二進(jìn)制日志功能
        • 2.可每周對(duì)數(shù)據(jù)庫(kù)或表進(jìn)行完全備份
        • 3.可每天進(jìn)行增量備份操作,生成新的二進(jìn)制日志文件(例如 mysql-bin.000002)
        • 4.插入新數(shù)據(jù),以模擬數(shù)據(jù)的增加或變更
        • 5.再次生成新的二進(jìn)制日志文件(例如 mysql-bin.000005)
        • 6.查看二進(jìn)制日志文件的內(nèi)容
      • 2.1.5 MySQL 增量恢復(fù)
        • 1.一般恢復(fù)
        • 2.斷點(diǎn)恢復(fù)

一、MySQL日志管理

MySQL 的日志默認(rèn)保存位置為/usr/local/mysql/data
MySQL 的日志配置文件為/etc/my.cnf ,里面有個(gè)[mysqld]項(xiàng)。

這是我們當(dāng)時(shí)安裝mysql時(shí)指定的目錄,如下圖所示:

1.1 日志的分類

1)錯(cuò)誤日志

用來記錄當(dāng)MySQL啟動(dòng)、停止或運(yùn)行時(shí)發(fā)生的錯(cuò)誤信息,默認(rèn)已開啟

log-error=/usr/local/mysql/data/mysql_error.log #指定日志的保存位置和文件名

2) 通用查詢?nèi)罩?/h3>

用來記錄MySQL的所有連接和語句,默認(rèn)是關(guān)閉的

general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

3) 二進(jìn)制日志(binlog)

用來記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的語句,記錄了數(shù)據(jù)的更改,可用于數(shù)據(jù)恢復(fù),默認(rèn)已開啟

log-bin=mysql-bin #也可以 log_bin=mysql-bin

4) 慢查詢?nèi)罩?/h3>

用來記錄所有執(zhí)行時(shí)間超過long_query_time秒的語句,可以找到哪些查詢語句執(zhí)行時(shí)間長(zhǎng),以便于優(yōu)化,默認(rèn)是關(guān)閉的

slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 #設(shè)置超過5秒執(zhí)行的語句被記錄,缺省時(shí)為10秒

5) 配置日志

1)修改my,cof配置文件

2)重新mysql服務(wù)

1.2 日志的查詢

mysql -u root -p[密碼]
show variables like ‘general%’; #查看通用查詢?nèi)罩臼欠耖_啟

show variables like ‘log_bin%’; #查看二進(jìn)制日志是否開啟

show variables like ‘%slow%’; #查看慢查詢?nèi)展δ苁欠耖_啟
show variables like ‘long_query_time’; #查看慢查詢時(shí)間設(shè)置

set global show_query_log=ON; #在數(shù)據(jù)庫(kù)中設(shè)置開啟慢查詢的方法

二、MySQL 完全備份與恢復(fù)

2.1 數(shù)據(jù)備份的重要性

備份的主要目的是災(zāi)難恢復(fù)
在生產(chǎn)環(huán)境中,數(shù)據(jù)的安全性至關(guān)重要
任何數(shù)據(jù)的丟失都可能產(chǎn)生嚴(yán)重的后果

2.2 造成數(shù)據(jù)丟失的原因

程序錯(cuò)誤
人為操作錯(cuò)誤.
運(yùn)算錯(cuò)誤
磁盤故障
災(zāi)難(如火災(zāi)、地震)和盜竊

2.3 數(shù)據(jù)庫(kù)備份的分類

2.3.1 從物理和邏輯角度分

1)物理備份

對(duì)數(shù)據(jù)庫(kù)操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份

物理備份的方法:

冷備份(脫機(jī)備份) :是在關(guān)閉數(shù)據(jù)庫(kù)的時(shí)候進(jìn)行的;
熱備份(聯(lián)機(jī)備份) :數(shù)據(jù)庫(kù)處于運(yùn)行狀態(tài),依賴于數(shù)據(jù)庫(kù)的日志文件;
溫備份:數(shù)據(jù)庫(kù)鎖定表格(不可寫入但可讀)的狀態(tài)下進(jìn)行備份操作。

2)邏輯備份

對(duì)數(shù)據(jù)庫(kù)邏輯組件(如:表等數(shù)據(jù)庫(kù)對(duì)象)的備份

2.4 數(shù)據(jù)庫(kù)的備份策略

完全備份:每次對(duì)數(shù)據(jù)庫(kù)進(jìn)行完整的備份

是對(duì)整個(gè)數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)結(jié)構(gòu)和文件結(jié)構(gòu)的備份
保存的是備份完成時(shí)刻的數(shù)據(jù)庫(kù)
是差異備份與增量備份的基礎(chǔ)

優(yōu)點(diǎn):備份與恢復(fù)操作簡(jiǎn)單方便
缺點(diǎn):數(shù)據(jù)存在大量的重復(fù)、占用大量的備份空間及備份與恢復(fù)時(shí)間長(zhǎng)

差異備份:備份自從上次完全備份之后被修改過的文件
增量備份:只有在上次完全備份或者增量備份后被修改的文件才會(huì)被備份

use school;
create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));

insert into info1 values(1,‘user1’,‘male’,‘running’);
insert into info1 values(2,‘user2’,‘female’,‘singing’);

2.5 MySQL 完全備份

InnoDB存儲(chǔ)引擎的數(shù)據(jù)庫(kù)在磁盤上存儲(chǔ)成三個(gè)文件:db.opt(表屬性文件)、表名.frm(表結(jié)構(gòu)文件)、表名.ibd(表數(shù)據(jù)文件)。

實(shí)驗(yàn)環(huán)境如下:在school庫(kù)中有info1、2張表

2.5.1 物理冷備份與恢復(fù)

備份時(shí)數(shù)據(jù)庫(kù)處于關(guān)閉狀態(tài),直接打包數(shù)據(jù)庫(kù)文件
備份速度快,恢復(fù)時(shí)也是最簡(jiǎn)單的
操作步驟(理論):

systemctl stop mysqld
yum -y install xz
cd /usr/local/mysql

#壓縮備份data目錄
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz data/
#解壓恢復(fù)data目錄
tar Jxvf /opt/mysql_all_2021-06-26.tar.xz -C ./

實(shí)驗(yàn)操作步驟(實(shí)操):
1)備份data命令

2)登錄mysql,刪除school庫(kù)

3)解壓之前備份的數(shù)據(jù)庫(kù)data目錄,不用刪除原目錄,會(huì)自動(dòng)替換

4)重啟服務(wù)查看被刪除的庫(kù)

2.1.2 專用備份工具mydump 和mysqlhotocopy

mysqldump常用的邏輯備份工具
mysqlhotcopy僅擁有備份MyISAM和ARCHIVE表

(1)完全備份一個(gè)或多個(gè)完整的庫(kù)(包括其中所有的表)

mysqldump -u root -p[密碼] --databases 庫(kù)名1 [庫(kù)名2] … > /備份路徑/備份文件名.sql #導(dǎo)出的就是數(shù)據(jù)庫(kù)腳本文件

例:備份單個(gè)和多個(gè)庫(kù)

mysqldump -uroot -p --databases school > /opt/backup/school.sql
mysqldump -uroot -p --databases school yy > /opt/backup/school_yy.sql

(2)完全備份 MySQL 服務(wù)器中所有的庫(kù)

mysqldump -u root -p[密碼] --all-databases > /備份路徑/備份文件名.sql

例:備份所有庫(kù)

mysqldump -uroot -p --all-databases > /opt/backup/all.sql

(3)完全備份指定庫(kù)中的部分表

mysqldump -u root -p[密碼] 庫(kù)名 [表名1] [表名2] … > /備份路徑/備份文件名.sql
例:備份school庫(kù)中的兩個(gè)表

mysqldump -uroot -p school [-d] info1 info2 > /opt/backup/school_info1_info2.sql

#使用“-d”選項(xiàng),說明只保存數(shù)據(jù)庫(kù)的表結(jié)構(gòu)
#不使用“-d”選項(xiàng),說明表數(shù)據(jù)也進(jìn)行備份

(4)查看備份文件

grep -v “^–” /opt/backup/school_info1_info2.sql | grep -v “^/” | grep -v “^$”

2.1.3 MySQL 完全備份(使用免交互)

systemctl start mysqld

(1)恢復(fù)數(shù)據(jù)庫(kù)

mysql -u root -p -e ‘drop database school;’
#“-e”選項(xiàng),用于指定連接 MySQL 后執(zhí)行的命令,命令執(zhí)行完后自動(dòng)退出
mysql -u root -p -e ‘show databases;’

#恢復(fù)school數(shù)據(jù)庫(kù)
mysql -u root -p < /opt/backup/school.sql
mysql -u root -p -e ‘show databases;’
具體操作:

(2)恢復(fù)數(shù)據(jù)表

當(dāng)備份文件中只包含表的備份,而不包含創(chuàng)建的庫(kù)的語句時(shí),執(zhí)行導(dǎo)入操作時(shí)必須指定庫(kù)名,且目標(biāo)庫(kù)必須存在。

mysqldump -u root -p kgc info1 > /opt/kgc_info1.sql

mysql -u root -p -e ‘drop table kgc.info1;’
mysql -u root -p -e ‘show tables from kgc;’

mysql -u root -p kgc < /opt/kgc_info1.sql
mysql -u root -p -e ‘show tables from kgc;’

具體操作:
1)刪除school中的class1表

2)恢復(fù)school庫(kù)中的表

2.1.4 MySQL 增量備份與恢復(fù)

1.開啟二進(jìn)制日志功能

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED 指定二進(jìn)制日志(binlog)的記錄格式為 MIXED
server-id = 1

二進(jìn)制日志(binlog)有3種不同的記錄格式:

STATEMENT(基于SQL語句)
ROW(基于行)
MIXED(混合模式),默認(rèn)格式是STATEMENT

只要重啟就會(huì)自動(dòng)生成二進(jìn)制文件
systemctl start mysqld
ls -l /usr/local/mysql/data/mysql-bin.*

測(cè)試:

2.可每周對(duì)數(shù)據(jù)庫(kù)或表進(jìn)行完全備份

mysqldump -u root -p school class1 > /opt/school_class1_KaTeX parse error: Expected group after '_' at position 83: …l > /opt/school_?(date +%F).sql #對(duì)所有的庫(kù)做備份

3.可每天進(jìn)行增量備份操作,生成新的二進(jìn)制日志文件(例如 mysql-bin.000002)

mysqladmin -u root -p flush-logs

4.插入新數(shù)據(jù),以模擬數(shù)據(jù)的增加或變更

use school;
insert into info1 values(6,‘qq’,‘女’,‘上天’);
insert into info1 values(7,‘la’,‘男’,‘整容’);

5.再次生成新的二進(jìn)制日志文件(例如 mysql-bin.000005)

mysqladmin -u root -p flush-logs

#之前的步驟4的數(shù)據(jù)庫(kù)操作會(huì)保存到mysql-bin.000004文件中,之后數(shù)據(jù)庫(kù)數(shù)據(jù)再發(fā)生變化則保存在mysql-bin.000005文件中

6.查看二進(jìn)制日志文件的內(nèi)容

cp /usr/local/mysql/data/mysql-bin.000004 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt//backup/mysql-bin.000004
#–base64-output=decode-rows:使用64位編碼機(jī)制去解碼并按行讀取
#-v:顯示詳細(xì)內(nèi)容

2.1.5 MySQL 增量恢復(fù)

1.一般恢復(fù)

(1)模擬丟失更改的數(shù)據(jù)的恢復(fù)步驟

use school;
delete from info1 where id=6;
delete from info1 where id=7;

mysqlbinlog --no-defaults mysql-bin.000007 | mysql -u root -p123123
具體操作:
1)刪除info1表中的末2行數(shù)據(jù)

2)通過二進(jìn)制日志進(jìn)行恢復(fù)

(2)模擬丟失所有數(shù)據(jù)的恢復(fù)步驟
use school;
drop table class1;

mysql -u root -p school < /opt/backup/school_info1_info2.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000005 | mysql -u root -p

具體操作:

1)刪除school庫(kù)中的class1表

2)先回復(fù)整表,然后在恢復(fù)二進(jìn)制日志文件

2.斷點(diǎn)恢復(fù)

實(shí)驗(yàn):表和數(shù)據(jù)如下

mysqladmin -u root -p flush-logs # 刷新生成新的二進(jìn)制日志文件
cd /usr/local/mysql/data # 進(jìn)入到data目錄
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.0000009 #查看二進(jìn)制日志文件

例:

# at 497 #斷點(diǎn)
#210831 21:24:46 #時(shí)間
insert into football values(1,‘梅西’,34,800000) #插入的數(shù)據(jù)

# at 2246
#210831 21:28:02 #時(shí)間
insert into football values(7,‘楊鵬’,23,100) #插入的數(shù)據(jù)

(1)基于位置恢復(fù)

#僅恢復(fù)到操作 ID 為“2246之前的數(shù)據(jù),即不恢復(fù)“后面一條”的數(shù)據(jù)
mysqlbinlog --no-defaults --stop-position=‘2246’ mysql-bin.000009 | mysql -uroot -p

1)刪除football表中所有數(shù)據(jù)

2)對(duì)數(shù)據(jù)進(jìn)行恢復(fù)

恢復(fù)最后一條數(shù)據(jù)
mysqlbinlog --no-defaults --start-position=‘2246’ mysql-bin.000006 | mysql -uroot -p

1)重新刪除數(shù)據(jù)

2)對(duì)數(shù)據(jù)進(jìn)行恢復(fù)

(2)基于時(shí)間點(diǎn)恢復(fù)

#僅恢復(fù)到 210628 15:05:23 之前的數(shù)據(jù),即不恢復(fù)“楊鵬”的數(shù)據(jù)
mysqlbinlog --no-defaults --stop-datetime=‘2021-08-31 21:28:02’ mysql-bin.000009 |mysql -uroot -p123123

1)刪除數(shù)據(jù)

2)恢復(fù)數(shù)據(jù)

恢復(fù)最后一條數(shù)據(jù)
mysqlbinlog --no-defaults --start-datetime=‘2021-08-31 21:28:02’ mysql-bin.000009 |mysql -uroot -p123123
恢復(fù)數(shù)據(jù)

總結(jié)

以上是生活随笔為你收集整理的MySQL(5)日志管理、备份与恢复,断点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。