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)  
數據庫鏡像版本


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


2.下載mysql 數據庫鏡像

docker pull mysql:5.7


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服務會報錯,這個時候我們必須還要指定這樣一個參數,隨機指定一個不能和其他集群中機器重名的字符串,如果只有一台機器,那就可以隨便指定了。

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

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日志,如下圖:


這個時候,在數據庫中創建一個數據庫、表,插入一些數據,就會在/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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM