Docker下mysql容器開啓binlog日誌(保留7天)

現有需求開啓用Docker容器啓動的mysql數據庫的binlog,以做爲 日誌記錄 和 數據恢復咱們瞭解了MySQL的binlog日誌的開啓方式以及binlog日誌的一些原理和經常使用操做,咱們知道,binlog有兩大做用,一個是使用binlog恢復數據,另外一個就是用來作主從複製。本篇筆記就是來記錄如何使用開啓binlog日誌和作數據恢復。固然了,使用binlog日誌所恢復的數據只能是部分數據,並不可以使用binlog日誌來作數據庫的備份,若是想要作數據庫備份,依然要使用咱們傳統的備份方法,而binlog能夠做爲增量備份。

以供筆記和學習,如下就是開啓binlog日誌的步驟過程:

1.首先,在實現前我是在虛擬機上作的實驗,環境以下:

[root@localhost cloud]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)  
數據庫鏡像版本
mysql


[root@localhost cloud]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 5195076672a7        13 days ago         371 MBsql


2.下載mysql 數據庫鏡像

docker pull mysql:5.7docker


3.在啓動容器以前先要建立好要掛載出來的目錄文件

   一個myql的配置目錄 在容器:/etc/mysql ,這裏能夠從其餘容器中拷貝過來

docker cp mysql:/etc/mysql     /etc/mysql
   第二個mysql數據目錄 /var/lib/mysql  保存了數據庫、表等數據信息

4.啓動Mysql5.7鏡像一個實例

 docker run -d --name mysql
--privileged=true
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=123456
-v /etc/mysql:/etc/mysql 
-v /opt/mysql:/var/lib/mysql
-v /etc/localtime:/etc/localtime
docker.io/mysql:5.7數據庫


5.啓動好後,用mysql客戶端工具邊接,在未設置以前,先查看一下,mysql5.7是否默認開啓,查看腳本以下:
show variables like '%log_bin%'
結果以下:


看得出mysql5.7默認是未開啓的,下面就開始設置

6.找到剛掛載到本地的mysql設置目錄 /etc/mysql

vim /etc/mysql/mysql.conf.d/mysqld.cnf

在以上修改的文件下方,添加上紅框中的兩條

這一個參數的做用是mysql會根據這個配置自動設置log_bin爲on狀態,自動設置log_bin_index文件爲你指定的文件名後跟.index
第二個參數 ,用的若是是5.7及以上版本的話,重啓mysql服務會報錯,這個時候咱們必須還要指定這樣一個參數,隨機指定一個不能和其餘集羣中機器重名的字符串,若是隻有一臺機器,那就能夠隨便指定了。vim

第三個參數:設置binlog日誌保存期限7天centos

show variables like 'expire_logs_days';#查詢保留天數,0爲永久
echo -e "#set binlog save days\nexpire_logs_days=7" >> /etc/mysql/mysql.conf.d/mysqld.cnf



7.設置完後重啓mysql容器

docker restart mysql
再次查詢就會看到已開啓mysql的binlog日誌,以下圖:bash


這個時候,在數據庫中建立一個數據庫、表,插入一些數據,就會在/var/lib/mysql容器中看到如下,或者是看掛載出來對應的目錄上,
函數


在數據庫中查詢日誌,以下

工具

show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000002';
show binlog events in 'mysql-bin.000003';

 
#FLUSH LOGS
學習


就能夠經過以上數據進行數據恢復


也能夠直接操做容器以下:

docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker restart mysql

 
 SHOW  GLOBAL VARIABLES LIKE '%log%';
————————————————

 

經過binlog還原數據庫

①、備份故障點以前的sql

複製代碼
 
 
-- 備份時間點sql
mysqlbinlog --no-defaults -d 庫名 --start-datetime='2019-10-22 17:03:45' --stop-datetime='2019-10-22 17:50:06' /var/lib/mysql/mysql-bin.000053 > temp20191022.sql

-- 備份存儲過程和函數

 docker exec 5978e90c168b mysqldump -R -ndt eibd_oa -u root -p123456 > eibd_oa_funcs-${BACK_DATA}

 
複製代碼
--start-datetime:表明開始時間

--stop-datetime:表明結束時間
從2019-10-22 17:03:45到2019-10-22 17:50:06的數據進行備份

--database                              ##與"-d"做用相同,用於指定數據

-d                                              ##與「database」做用相同,用於指定數據庫

--start-datetime                       ##起始時間點

--stop-datetime                       ##結束時間點

--start-position                        ##起始位置

--stop-position                       ##結束位置

②、還原數據

   經過source temp20191022.sql進行還原

 

參考連接:https://blog.csdn.net/harris135/article/details/79712750

相關文章
相關標籤/搜索