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 ...