當(dāng)數(shù)據(jù)內(nèi)容越來(lái)越多的時(shí)候,數(shù)據(jù)庫(kù)也變得越來(lái)越大了。如果不小心誤刪了,或者被黑主機(jī)了,那就什么都沒(méi)有了。所以數(shù)據(jù)庫(kù)的數(shù)據(jù)怎么能讓它不丟失做到萬(wàn)無(wú)一失變得尤為重要!
我是艾西,今天跟大家聊聊服務(wù)器數(shù)據(jù)庫(kù)數(shù)據(jù)怎么設(shè)置自動(dòng)備份
備份方式為主從:
即一臺(tái)服務(wù)器作為主服務(wù)器,另外一臺(tái)服務(wù)器作為備份服務(wù)器,當(dāng)主服務(wù)器故障時(shí),可以通過(guò)備份服務(wù)器來(lái)接管/恢復(fù)。
數(shù)據(jù)庫(kù)主備備份的原理:
MySQL主服務(wù)器從又叫做Replication、AB復(fù)制。簡(jiǎn)單講就是A和B兩臺(tái)機(jī)器做主從后,在A上寫(xiě)數(shù)據(jù),另外一臺(tái)B也會(huì)跟著寫(xiě)數(shù)據(jù),兩者數(shù)據(jù)實(shí)時(shí)同步的
MySQL主服務(wù)器從是基于binlog的,主上須開(kāi)啟binlog才能進(jìn)行主從。 主從過(guò)程大致有3個(gè)步驟
1)主服務(wù)器將更改操作記錄到binlog里
2)從將主服務(wù)器的binlog事件(sql語(yǔ)句)同步到從本機(jī)上并記錄在relaylog里
3)從根據(jù)relaylog里面的sql語(yǔ)句按順序執(zhí)行
主服務(wù)器有一個(gè)log dump線程,用來(lái)和從的I/O線程傳遞binlog
從上有兩個(gè)線程,其中I/O線程用來(lái)同步主服務(wù)器的binlog并生成relaylog,另外一個(gè)SQL線程用來(lái)把relaylog里面的sql語(yǔ)句執(zhí)行一遍
兩種情況:一種是做備份用,一種是作為讀用
如上圖,簡(jiǎn)單的說(shuō)就是master將數(shù)據(jù)庫(kù)的改變寫(xiě)入二進(jìn)制日志,slave同步這些二進(jìn)制日志,并根據(jù)這些二進(jìn)制日志進(jìn)行數(shù)據(jù)操作。
環(huán)境配置:
本次配置的環(huán)境為:centos7,使用LNMP1.4安裝的Mysql5.5,主服務(wù)器為馳網(wǎng)服務(wù)器(下面簡(jiǎn)稱主服務(wù)器),從服務(wù)器為馳網(wǎng)云服務(wù)器(下面簡(jiǎn)稱從服務(wù)器),現(xiàn)在需要將主服務(wù)器中名為img的數(shù)據(jù)庫(kù)做主從同步,自動(dòng)同步到從服務(wù)器上。
準(zhǔn)備工具:xshell (用于遠(yuǎn)程服務(wù)器)
一、復(fù)制數(shù)據(jù)庫(kù)
1.首先要將主服務(wù)器的數(shù)據(jù)庫(kù)復(fù)制到從服務(wù)器中。
用xshell連接主服務(wù)器,導(dǎo)出數(shù)據(jù)庫(kù):
mysqldump -uroot -p img >/root/img.sql---輸入數(shù)據(jù)庫(kù)密碼---
然后ls看下,可以看到一個(gè) img.sql的文件。
2.用xshell連接從服務(wù)器,使用sftp命令遠(yuǎn)程到主服務(wù)器(有提示輸入yes):
sftp root@主服務(wù)器IP地址---輸入ssh密碼
cd /root
然后ls看下,可以看到主服務(wù)器的目錄,里面有個(gè)img.sql的文件,執(zhí)行:
get img.sql
這樣數(shù)據(jù)庫(kù)文件就被復(fù)制到從服務(wù)器上了。 exit 退出sftp。
3.接下來(lái)在從服務(wù)器上建立一個(gè)名為img的數(shù)據(jù)庫(kù),排序規(guī)則設(shè)為uft8
mysql -uroot -p---輸入數(shù)據(jù)庫(kù)密碼---
create database img;use img;set names utf8;
source img.sql
這樣就成功導(dǎo)入了,exit退出回到linux命令行。
二、主服務(wù)器配置
1.切回主服務(wù)器,用vim 編輯 /etc下的my.cnf,如圖
這里主要配置的是server-id和log-bin。server-id用于區(qū)分不同主機(jī)上的數(shù)據(jù)庫(kù),log-bin是二進(jìn)制文件的名字(可以隨意命名)。同時(shí),為了保證只同步需要的數(shù)據(jù)庫(kù),我們需要加上:
binlog-do-db=img
binlog-ignore-db=mysql
然后 :wq 保存退出,重啟mysql:
service mysql restart
2.連接數(shù)據(jù)庫(kù)進(jìn)行如下操作:
mysql -uroot -p img---輸入數(shù)據(jù)庫(kù)密碼---
以下為修改數(shù)據(jù)庫(kù)連接權(quán)限
grant all privileges on . to 'root'@'%' identified by '自定義密碼';
flush privileges;
下面為顯示bin-log文件名和位置
show master status;
執(zhí)行完最后一條后我們可以看到:
記下紅框處的文件名和數(shù)字。
三、從服務(wù)器配置
1.連接到從服務(wù)器,用vim修改/etc下的my.cnf文件,把server-id改為2。
重啟mysql服務(wù):
service mysql restart
2.連接數(shù)據(jù)庫(kù),配置從數(shù)據(jù)庫(kù):
mysql -uroot -p---輸入數(shù)據(jù)庫(kù)密碼---
stop slave;
change master to
master_user='root',
master_password='你設(shè)置的自定義密碼',
master_host='主服務(wù)器地址',
master_log_file='mysql-bin.000011', #記下的上圖紅框的文件名
master_log_pos=255; #記下的上圖紅框的位置
start slave;
show slave statusG #查看是否安裝成功
如圖,這兩個(gè)是YES就成功了
四、其他說(shuō)明
現(xiàn)在只要主服務(wù)器上的數(shù)據(jù)庫(kù)有變動(dòng),從服務(wù)器上也會(huì)時(shí)時(shí)變動(dòng),達(dá)到了數(shù)據(jù)庫(kù)異地容災(zāi)備份的功能。如果需要多服務(wù)器備份,那么可以把多個(gè)服務(wù)器中my.cnf中的server_id修改為不同,并按以上教程重新配置一遍,每個(gè)服務(wù)器的數(shù)據(jù)庫(kù)可做主服務(wù)器也可以做從服務(wù)器。
如要同步多個(gè)數(shù)據(jù)庫(kù),可在主服務(wù)器的my.cnf 中,添加多條 binlog-do-db,指向多個(gè)數(shù)據(jù)庫(kù)。
總結(jié):
備份數(shù)據(jù)庫(kù)是非常重要的,通過(guò)定期備份可以避免因?yàn)橐馔鈩h除或者系統(tǒng)故障等情況導(dǎo)致數(shù)據(jù)的丟失。
MySQL 自帶的 mysqldump 和 MySQLdump.exe 可以幫助我們實(shí)現(xiàn)基本的備份,使用計(jì)劃任務(wù)可以自動(dòng)備份我們需要的數(shù)據(jù)。
如果你需要更加定制化的備份選項(xiàng),那么使用腳本語(yǔ)言編寫(xiě)備份腳本或者使用第三方工具會(huì)更加合適。
無(wú)論你選擇哪種方法,在備份數(shù)據(jù)之前,請(qǐng)確保你已經(jīng)仔細(xì)檢查過(guò)自動(dòng)備份選項(xiàng),避免出現(xiàn)不必要的數(shù)據(jù)丟失問(wèn)題。