1. 程式人生 > >MYSQL數據庫備份還原,並還原到最新狀態(mysqldump)

MYSQL數據庫備份還原,並還原到最新狀態(mysqldump)

replicat from rom ESS 設置 utf 保留 set mysq

啟用二進制日誌文件

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及以後的日誌

reset master logs; 重新001開始記數二進制日誌(老版本)。從MariaDB10.1.6開始支持TO #,指定從#開始記數

完全備份,並還原到最新狀態(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)