現有需求開啟用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