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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一、MySQL日志与备份

發布時間:2025/3/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、MySQL日志与备份 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、MySQL日志管理

1、MySQL日志文件

  • 常用的日志文件(在/etc/my.cnf中[mysqld]客戶端配置中修改)
  • MySQL的默認日志保存位置為/usr/local/mysql/data

錯誤日志

用于記錄MySQL啟動、停止或運行時發生的錯誤信息,默認已開啟

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

二進制日志

用來記錄所有更新了數據或者已經潛在更新了數據的語句,記錄了數據的更改,可用于數據恢復

log-bin=mysql-bin 或 log_bin=mysql-bin

中繼日志

一般情況下它在MySQL主從同步、讀寫分離集群的從節點才開啟,主節點一般不需要這個日志。

慢查詢日志

用來記錄所有執行時間超過long_query_time秒的語句,可以找到哪些查詢語句執行時間長,以便于優化,默認是關閉的

slow_query_log=ON slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log #指定文件路徑和名稱 long_query_time=5 #設置執行超過5秒的語句會被記錄,缺省時間為10秒systemctl restart mysqld

二、查看日志狀態命令

1、查看通用查詢日志是否開啟

mysql -u root -p show variables like 'general%';

2、查看二進制日志是否開啟

show variables like 'log_bin%';

3、查看慢查詢日功能是否開啟

show variables like '%slow%';

查看慢查詢時間設置

show variables like 'long_query_time';

在數據庫中設置開啟慢查詢的方法(臨時)

set global slow_query_log=ON; 該方法重啟服務失效

三、備份的重要性

在企業中數據的價值至關重要,數據保障了企業業務的正常運行。因此,數據的安全性及數據的可靠性是運維的重中之重,任何數據的丟失都可能對企業產生嚴重的后果。

1、造成數據丟失的原因有如下幾種

程序錯誤

人為操作錯誤

運算錯誤

磁盤故障

災難(如火災、地震)和盜竊

四、備份類型

1、從物理與邏輯的角度分類

數據庫備份可以分為物理備份和邏輯備份。物理備份是對數據庫操作系統的物理文件 (如數據文件、日志文件等)的備份。這種類型的備份適用于在出現問題時需要快速恢復的大型重要數據庫。物理備份又可以分為 冷備份(脫機備份)、熱備份(聯機備份)和溫備份。

冷備份:在數據庫關閉狀態下進行備份操作。(tar)

熱備份:在數據庫處于運行狀態時進行備份操作,該備份方法依賴數據庫的日志文件。(mysqldump)

溫備份:數據庫鎖定表格(不可寫入但可讀)的狀態下進行備份操作。

邏輯備份是對數據庫邏輯組件(如表等數據庫對象)的備份,表示為邏輯數據庫結構(CREATE DATABASB,CREATBTABLE語句)和內容(INSERT語句或分隔文本文件)的信息。這種類型的備份適用于可以編輯數據值或表結構較小的數據量,或者在不同的機器體系結構上重新創建數據

2、從數據庫的備份策略角度分類

從數據庫的備份策略角度,數據庫的備份可分為完全備份、差異備份和增量備份(面試點)

完全備份:每次對數據進行完整的備份,即對整個數據庫、數據庫結構和文件結構的備份,保存的是備份完成時刻的數據庫,是差異備份與增量備份的基礎。完全備份的備份與恢復操作都非常簡單方便,但是數據存在大量的重復,并且會占用大量的磁盤空間,備份的時間也很長。

差異備份:備份那些自從上次完全備份之后被修改過的所有文件,備份的時間節點是從上次完整備份起,備份數據量會越來越大。恢復數據時,只需恢復上次的完全備份與最近的一次差異備份。

增量備份:只有那些在上次完全備份或者增量備份后被修改的文件才會被備份。以上次完整備份或上次增量備份的時間為時間點,僅備份這之間的數據變化,因而備份的數據量小,占用空間小,備份速度快。但恢復時,需要從上一次的完整備份開始到最后一次增量備份之的所有增量依次恢復,如中間某次的備份數據損壞,將導致數據的丟失。

3、備份方法

數據庫的備份可以采用很多種方式,如直接打包數據庫文件(物理冷備份)、專用備份工具(mysqldump)、二進制日志增量備份、第三方工具備份等。

物理冷備份

物理冷備份時需要在數據庫處于關閉狀態下,能夠較好地保證數據庫的完整性。物理冷備份一般用于非核心業務,這類業務一般都允許中斷,物理冷備份的特點就是速度快,恢復時也是最為簡單的。通常通過直接打包數據庫文件夾(/usr/local/mysql/data)來實現備份

專用備份工具mysqldump或mysqlhotcopy

mysqldump程序和mysqlhotcopy都可以做備份。 mysqldump是客戶端常用邏輯備份程序,能夠產生一組被執行以后再現原始數據庫對象定義和表數據的sgr語句。它可以轉儲一個到多個MysQI數據庫,對其進行備份或傳輸到遠程sQI服務器。mysqldump更為通用, 因為它可以備份各種表。 mysqlhotcopy 僅適用于某些存儲引擎。

通過啟用二進制日志進行增量備份MySQL 支持增量備份,進行增量備份時必須啟用二進制日志。二進制日志文件為用戶提供復制,對執行備份點后進行的數據庫更改所需的信息進行恢復。如果進行增量備份(包含自上次完全備份或增量備份以來發生的數據修改),需要刷新二進制日志。 通過第三方工具備份 Percona XtraBackup是一個免費的 MySgL熱備份軟件,支持在線熱備份Innodb 和xtraDB,也可以支持MySQL表備份,不過 MyISAM表的備份要在表鎖的情況下進行。

五、數據庫冷備份與恢復及完全備份與恢復的基本命令

1、物理冷備份與恢復

systemctl stop mysqld yum -y install xz (一種壓縮工具,詳單與gzip,bz2)壓縮備份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/解壓恢復 tar Jxvf /opt/mysql_all_2021-04-14.tar.xz -C /usr/local/mysql/datasystemctl restart mysql

2、mysqldump 備份與恢復

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

mysqldump -u root -p[密碼] --databases 庫名1 [庫名2] … > /備份路徑/備份文件名.sql #導出的就是數據庫腳本文件

例:

mysqldump -uroot -p35123512 --databases school > /opt/school.sql

完全備份 MySQL 服務器中所有的庫

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

例:

mysqldump -u root -p35123512 --all-databases > /opt/all_database.sql

完全備份指定庫中的部分表

mysqldump -u root -p[密碼] 庫名 [表名1] [表名2] … > /備份路徑/備份文件名.sql

例:

mysqldump -uroot -p35123512 school test > /opt/school_test.sql #使用“-d”選項,說明只保存數據庫的表結構 #不使用“-d”選項,說明表數據也進行備份

3、查看備份文件

cat /opt/備份的文件 |grep -v "^--" | grep -v "^/" | grep -v "^$"grep -v "^--" /opt/school_test.sql | grep -v "^/" | grep -v "^$"

4、MySQL 完全恢復

恢復數據庫

#“-e”選項,用于指定連接 MySQL 后執行的命令,命令執行完后自動退出 mysql -u root -p -e 'drop database school;' mysql -u root -p -e 'show databases;'mysql -u root -p < /opt/school.sql mysql -u root -p -e 'show databases;'

六、MySQL增量備份與恢復

1、二進制日志(binlog)有三種不同的記錄格式

STATEMENT(基于SQL語句)
binlog format=STATEMENT默認 每一條涉及到被修改的sql都會記錄在binlog中。 缺點:日志量過大,如sleep()函數, last_insert_id()>,以及user-definedfunctions(udf)、主從復制等架構記錄日志時會出問題會出現問題

ROW(基于行)
shell binlog format=ROw 只記錄變動的記錄,不記錄sql的上下文環境。 缺點:如果遇到updata … set … where true那么就binlog的數據量就變大

MIXED(混合模式)
binlog format=M工XED推薦使用 一般的語句使用statement,函數使用ROW方式存取。

2、MySQL增量備份
開啟二進制日志文件

vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id = 1 binlog_format = MIXED #指定二進制日志(binlog)的記錄格式為 MIXED#二進制日志(binlog)有3種不同的記錄格式:STATEMENT(基于SQL語句)、ROW(基于行)、MIXED(混合模式),默認格式是STATEMENTsystemctl restart mysqld.service ls -l /usr/local/mysql/data/mysql-bin.*

可每周對數據庫或表進行完全備份(增量備份是基于完全備份,所以這里我們直接備份數據庫)

#完全備份

mysqldump -u root -p school test > /opt/school_test_$(date +%F).sql mysqldump -u root -p school > /opt/school_$(date +%F).sql#使用crontab -e 計劃性任務來執行;每周1凌晨2點對表test和school庫進行完全備份 0 2 * * 1 mysqldump -u root -p school test > /opt/school_test_$(date +%F).sql 0 2 * * 1 mysqldump -u root -p school > /opt/school_$(date +%F).sql

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

mysqladmin -u root -p flush-logs

插入新數據,以模擬數據的增加或變更

mysql -u root -p use school; insert into test values (3,'李四','廣州'); insert into test values (4,'五一','南京');

再次生成新的二進制日志文件(例如 mysql-bin.000003)

mysqladmin -u root -p flush-logs #上面我們往test表中插入數據的操作會保存到mysql-bin.000002文件中,之后數據庫數據再發生變化則保存在mysql-bin.000003文件中

查看二進制日志文件的內容

cp /usr/local/mysql/data/mysql-bin.000002 /opt/ mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 #--base64-output=decode-rows:使用64位編碼機制去解碼并按行讀取 #-v:顯示詳細內容

3、MySQL 增量恢復

一般恢復

模擬丟失更改的數據的恢復步驟

mysql -u root -p use school; delete from test where id=3; delete from test where id=4; select * from test; quitmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p mysql -u root -p -e "select * from school.test;"

模擬丟失所有數據的恢復步驟

mysql -u root -p use school; drop table test; show tables; quitmysql -uroot -p school < /opt/school_test_2021-04-15.sql mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p mysql -u root -p -e "select * from school.test;"


斷點恢復

mysqladmin -uroot -p35123512 flush-logs 進行日志刷新 查看我們剛才操作保存的日志000007二進制日志文件 mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000007 # at 219 #210415 17:09:24 server id 1 end_log_pos 354 CRC32 0x00c7f80d Query thread_id=38 exec_time=0 error_code=0 use `school`/*!*/; SET TIMESTAMP=1618477764/*!*/; SET @@session.pseudo_thread_id=38/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1437073414/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; create table test (id int(5),name varchar(10),age int(5)) /*!*/; # at 354 #210415 17:11:10 server id 1 end_log_pos 419 CRC32 0x6ed07c34 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 419 #210415 17:11:10 server id 1 end_log_pos 502 CRC32 0xba0129d4 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477870/*!*/; BEGIN /*!*/; # at 502 #210415 17:11:10 server id 1 end_log_pos 639 CRC32 0x463df0b3 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477870/*!*/; insert into test values (1,'張三','10'),(2,'李四','20') /*!*/; # at 639 #210415 17:11:10 server id 1 end_log_pos 670 CRC32 0xda19363b Xid = 499 COMMIT/*!*/; # at 670 #210415 17:11:32 server id 1 end_log_pos 735 CRC32 0x99150b17 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 735 #210415 17:11:32 server id 1 end_log_pos 818 CRC32 0x34f81d52 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477892/*!*/; BEGIN /*!*/; # at 818 #210415 17:11:32 server id 1 end_log_pos 937 CRC32 0x80433f9d Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477892/*!*/; insert into test values (3,'王五','25') /*!*/; # at 937 #210415 17:11:32 server id 1 end_log_pos 968 CRC32 0xd3537b3b Xid = 500 COMMIT/*!*/; # at 968 #210415 17:12:40 server id 1 end_log_pos 1033 CRC32 0x91cc3262 Anonymous_GTID last_committed=3sequence_number=4 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1033 #210415 17:12:40 server id 1 end_log_pos 1116 CRC32 0x17bd5f4a Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477960/*!*/; BEGIN /*!*/; # at 1116 1116位置是模擬我們誤刪除文件的操作 #210415 17:12:40 server id 1 end_log_pos 1221 CRC32 0x35e5f3c9 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477960/*!*/; delete from test where id=1 /*!*/; # at 1221 #210415 17:12:40 server id 1 end_log_pos 1252 CRC32 0x5868d5c4 Xid = 503 COMMIT/*!*/; # at 1252 #210415 17:13:06 server id 1 end_log_pos 1317 CRC32 0xc864fc14 Anonymous_GTID last_committed=4sequence_number=5 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1317 #210415 17:13:06 server id 1 end_log_pos 1400 CRC32 0x8c31a8b8 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477986/*!*/; BEGIN /*!*/; # at 1400 #210415 17:13:06 server id 1 end_log_pos 1519 CRC32 0xaef20ea3 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477986/*!*/; insert into test values (4,'田一','30') /*!*/;

基于位置恢復

這邊我們模擬刪除id=1的操作為誤刪除 我們進行恢復

恢復到操作ID為‘1116’之前的數據,就是不執行刪除id=1的操作 mysqlbinlog --no-defaults --stop-position='1116' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512 意思就是跳過我們刪除的操作其余的都恢復 mysqlbinlog --no-defaults --start-position='1400' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512

操作前首先要刪除需要備份的表

基于時間點恢復
刪除school庫中的test表,先基于完整備份的恢復,在基于時間點恢復

#僅恢復到17:12:40之前的數據,就是不執行刪除id=1的操作直接跳過 mysqlbinlog --no-defaults --stop-datetime='2021-04-15 17:12:40' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512 #跳過17:12:40的數據恢復之后的數據 mysqlbinlog --no-defaults --start-datetime='2021-04-15 17:13:06' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512

總結:斷點恢復

如果恢復某條SQL語句之前的所有數據,就stop在這個語句的位置節點或者時間點
G9nLmNzZG4ubmV0L0lIQk9T,size_16,color_FFFFFF,t_70)

總結:斷點恢復

如果恢復某條SQL語句之前的所有數據,就stop在這個語句的位置節點或者時間點
如果恢復某條SQ語句以及之后的所有數據,就從這個語句的位置節點或者時間點start

總結

以上是生活随笔為你收集整理的一、MySQL日志与备份的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天干天天色天天 | 仙踪林久久久久久久999 | 亚洲第一成人网站 | 污视频网站免费观看 | 久久女女 | 成人高清视频在线观看 | 亚洲www视频 | 天堂一区 | 色综合社区| 久久综合九九 | 亚洲欧洲在线视频 | 96国产在线 | 91吃瓜在线 | 婷婷综合激情 | 先锋资源一区二区 | 国产成人手机视频 | 日本午夜小视频 | 91视频最新入口 | 欧美日韩加勒比 | 免费毛片在线播放免费 | 亚洲一区二区视频在线观看 | 91免费网站入口 | 久久久久99精品成人片毛片 | 999精彩视频| gav久久 | 久久午夜鲁丝片午夜精品 | 国产成人短视频在线观看 | 手机av免费 | 久久精品高清 | www.日日| 99热6这里只有精品 三级av在线免费观看 | 国内精久久久久久久久久人 | 人妻一区二区三区 | jizz欧美大片 | 老司机性视频 | 国产成人在线观看网站 | 黄色免费在线播放 | 精品少妇视频 | 男人插女人视频网站 | 久久精品三级视频 | 免费日韩av | 国产刺激视频 | 男人晚上看的视频 | 日韩簧片在线观看 | 国产成人综合网 | 中文字幕一二三 | 欧美激情三级 | 高级毛片| 黑人巨大精品一区二区在线 | 婚后打屁股高h1v1调教 | 久久精品一区二区 | 色小说在线观看 | 四虎影视av| 在线亚洲观看 | 桃色视频网 | 精品中文字幕一区 | 亚洲色偷偷色噜噜狠狠99网 | 国产后入又长又硬 | 精品国产乱码久久久久久郑州公司 | 97香蕉| 劲爆欧美第一页 | 五月天狠狠操 | 少妇高潮喷水在线观看 | 97久久久久久| 99热黄色| 牛牛视频在线观看 | 极品久久久 | 久草福利资源在线观看 | 国产女人视频 | 在线观看亚洲免费视频 | 九九九国产视频 | 在线免费激情视频 | 欧美日韩精品一区二区三区四区 | 成人毛片在线播放 | 欧美老肥妇做.爰bbww视频 | 精品无码av一区二区三区四区 | 综合黄色| 国内自拍视频在线观看 | 91人人干| 亚洲区一区 | 日本免费无人高清 | 亚洲欧美v | 肉色超薄丝袜脚交一区二区 | 一本久久久| 激情五月婷婷丁香 | 国产精品婷婷午夜在线观看 | 精品一区二区三区在线观看视频 | 精品日韩欧美 | 香蕉日日 | 午夜黄色剧场 | 亚洲天堂中文 | av在线免| 色综合天天综合网天天看片 | 少妇高潮灌满白浆毛片免费看 | 丰满人妻中伦妇伦精品app | 国产精品美女av | 香蕉网伊| 国产精品成人午夜视频 | 久久久久久久久久网站 |