現有需求開啓用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%';
————————————————
①、備份故障點以前的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