MYSQL數據庫備份還原,並還原到最新狀態(mysqldump)
vim /etc/my.cnf
配置文件位置及文件名根據實際情況確定
sql_log_bin=ON|OFF:是否記錄二進制日誌,默認為ON //在需要的時候設置為OFF
log_bin=/PATH/BIN_LOG_FILE:指定二進制日誌文件位置; 通常單獨存放到與數據庫不同的機器中
清理二進制日誌文件
show master logs; 查看二進制日誌文件列表
flush logs; 切換二進制日誌文件(mysql命令),創建新的二進制日誌
mysqladmin flush-logs 切換二進制日誌文件(bash命令)
purge binary logs to ‘mysqlbin.000005‘; 刪除除mysqlbin.000005日誌之前的所有日誌,保留mysqlbin.000005及以後的日誌
完全備份,並還原到最新狀態(mysqldump)
前提條件:啟用二進制日誌,並單獨存放。在mysql數據丟失時,可以還原最新備份到丟失時刻的數據
1 完全備份
mysqldump -A --single-transaction --master-data=1 > /data/backup/all_mysql.sql
完全備份數據庫文件,並存放多份到安全的地方
2 修改數據庫(在數據表中添加多條記錄。模擬數據增加,但還沒有備份時數據丟失的情況。可以通過二進制日誌還到最新的數據)
mysql> insert TABLENAME(col_name,...)value(value,...)
3 數據庫文件丟失 rm -rf /data/mysql/*
測試效果,清空mysql數據目錄,數據全部丟失,但開啟了二進制日誌,並單獨存放在其他的硬盤中
4 停止mysql服務
service mysqld stop
5 查看完全備份時二進制日誌備份的最後位置,實驗時備份的最後位置為:CHANGE MASTER TO MASTER_LOG_FILE=‘mariadb.000001‘, MASTER_LOG_POS=8944;
通過less 命令查看最新的備份文件all_mysql.sql獲取此信息
-- MySQL dump 10.16 Distrib 10.2.23-MariaDB, for Linux (x86_64)
--
-- Host: localhost Database:
-- ------------------------------------------------------
-- Server version 10.2.23-MariaDB-log
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE=‘+00:00‘ */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE=‘mariadb.000001‘, MASTER_LOG_POS=8944;
--
-- GTID to start replication from
--
/data/backup/all_2019-05-06.sql
.
.
重啟mysql服務:
service mysqld restart
登錄mysql :
mysql -uroot -p
臨時關閉二進制日誌,還原完全備份:
mysql> set sql_log_bin=off;
mysql> soruce /data/backup/all_mysql.sql
6 還原沒有備份的新數據
新開一個終端:用mysqlbinlog工具導出存放在二進制日誌中沒有備份的新記錄,開始位置為第4步中查詢到的位置(實驗時為8944)
mysqlbinlog --start-postion=8944 /data/bin/mariadb.000001 > /data/backup/inc.sql
在原終端中繼續還原
mysql> soruce /data/backup/inc.sql
到此已經還原全部數據
MYSQL數據庫備份還原,並還原到最新狀態(mysqldump)