七 備份實戰2

2022-09-18 15:27:14 字數 2828 閱讀 3356

1.備份實戰2

mysqldump+binlog

優勢自動記錄日誌position位置

可用性,一致性

語法mysqldump -h 伺服器位址 -u使用者名稱 -p密碼 資料庫名 > 備份檔案.sql

mysqldump --help

備份實戰

準備兩套root密碼

密碼1  qianfeng@123  配置當前資料庫中

密碼2  qianfeng@1234  備用

準備庫1

mysql -uroot -p'qianfeng@123'

drop database testdb;  清除之前的庫

create database testdb1;

use testdb1;

create table t1 (id int);

instert into testdb1.t1 values (1), (2), (3);

select * from t1;

\q執行備份

mkdir /backup

mysqldump -uroot -p'qianfeng@123' -all-databases --single-transaction --master-data=2 --flush-logs > /backup/`data +%f-%h`-mysql-all.sql  賬號  密碼  所有庫  保持資料的可用性  注釋掉日誌記錄,寫2可以多乙個#  重新整理切斷日誌 > 放到這個目錄/  時間 -mysql-all.sql

觀察備份細節

vim /backup/2022-01-18-12mysql-all.sql

lock tables `user` write;  觀察各種鎖機制,用來保證資料的一致性,當在備份乙個表時,該錶會被鎖住,不允許寫,但可以讀,等備份完該表後就會解鎖,因為這乙個過程很快,所以不影響使用

22 -- change master to master_log_file='localhost-bin.000003', master_log_pos=154;  可以看到這行,是flush-logs截斷的,--就是master-data=2的效果,如果是1就沒有-- ,但是內容依舊在

備份後再次創庫和變更資料

mysql -uroot -p'qianfeng@123'

create database testdb2;

create table testdb2.t2 (id, int);

insert into testdb2.t2(1),(2),(3);

\qmysql -uroot -p'qianfeng@123'

insert into testdb.t2(4),(5);

create database testdb3;

\q觀察備份二進位制日誌檔案

ls /var/lib/mysql/  可以看到bin檔案已經到00003了

停止資料庫

systemctl stop mysqld

清理環境

rm -rf /var/lib/mysql/*

啟動資料庫

systemctl start mysqld

grep password /var/log/mysqld.log

mysqladmin -uroot -p'rxn2adv!u(ah' password 'qianfeng@1234'  這裡用的是1234的備用密碼

mysql -uroot -p'qianfeng@1234'

show databases;  是新的mysql

\qmysql -uroot -p'qianfeng@1234' < /backup/2022-01-18-12mysql-all.sql  用備份恢復資料

mysql -uroot -p'qianfeng@1234'

show databases;  可以發現是有testdb1的

且只有testdb1的庫,並沒有testdb2和testdb3,這時候就需要使用二進位制日誌恢復了

二進位制日誌恢復

觀察二進位制擷取記錄

vim /backup/2022-01-18-12mysql-all.sql

22 -- change master to master_log_file='localhost-bin.000003', master_log_pos=154;  改變主伺服器到主伺服器檔案=localhost-bin.000003,從154往後都是新的

mysqlbinlog localhost-bin.000003 localhost-blin.000004 --start-position=154 | mysql -uroot -p'qianfeng@123'  通過mysqlbinlog重寫資料 用導管給到該使用者

mysql -uroot -p'qianfeng@123' -e 'show databases'  可以發現2和3都回來

如果我需要保留testdb3庫,而testdb3庫因為誤操刪了,不是正常的行為,不是我們需要做的範疇

mysqlbinlog localhost-bin.000003 > 1.txt

vim 1.txt

刪除1.txt中不需要的at(比如刪除drop database testdb3的那行at)

cat 1.txt | mysql -p'qianfeng@123'  很可能失敗

這樣會有許多和二進位制日誌行為所衝突

停止二進位制日誌

mysql -uroot -p'qianfeng@123'

set sql_log_bin = 0;

讀取資源

source 1.txt;

開啟二級制日誌

set sql_log_bin = 1;

這樣就不會有二進位制日誌行為衝突

八 備份實戰3

1.記錄的匯出和匯入 注意目錄許可權 vim etc my.cnf secure file priv backup mysql不信任該目錄 chown mysql.mysql backup mysql使用者沒有許可權 select.into outfile 匯出文字檔案 systemctl rest...

實戰 nginx定時備份日誌

實際應用 shell 定時任務 nginx 訊號管理 完成日誌按日期儲存 分析思路 凌晨00 00 01,把昨天的日誌重新命名 放在相應的目錄下 再 usr1 資訊號控制 nginx 重新生成新的日誌檔案 具體指令碼 bin bash base path usr local nginx logs l...

實戰備份mysql指令碼

指令碼實現功能如下 1.備份指定資料庫 2.刪除超過10天的備份檔案 3.周一到周五,備份恢復到指定的同乙個資料庫 週六和週日,備份恢復到指定的不同資料庫 4.使用gzip對備份檔案進行壓縮 bin sh start dbuser icken dpwd 123456 dbname chickens ...