MySQL之-數(shù)據(jù)庫(kù)雙機(jī)熱備的配置方法及代碼示例

mysql數(shù)據(jù)庫(kù)沒(méi)有增量備份的機(jī)制,當(dāng)數(shù)據(jù)量太大的時(shí)候備份是一個(gè)很大的問(wèn)題。還好mysql數(shù)據(jù)庫(kù)提供了一種主從備份的機(jī)制,其實(shí)就是把主數(shù)據(jù)庫(kù)的所有的數(shù)據(jù)同時(shí)寫(xiě)到備份數(shù)據(jù)庫(kù)中。

一、說(shuō)明

1、mysql數(shù)據(jù)庫(kù)沒(méi)有增量備份的機(jī)制,當(dāng)數(shù)據(jù)量太大的時(shí)候備份是一個(gè)很大的問(wèn)題。還好mysql數(shù)據(jù)庫(kù)提供了一種主從備份的機(jī)制,其實(shí)就是把主數(shù)據(jù)庫(kù)的所有的數(shù)據(jù)同時(shí)寫(xiě)到備份數(shù)據(jù)庫(kù)中。實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)的熱備份。
2、要想實(shí)現(xiàn)雙機(jī)的熱備首先要了解主從數(shù)據(jù)庫(kù)服務(wù)器的版本的需求。要實(shí)現(xiàn)熱備mysql的版本都要高于3.2,還有一個(gè)基本的原則就是作為從數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)版本可以高于主服務(wù)器數(shù)據(jù)庫(kù)的版本,但是不可以低于主服務(wù)器的數(shù)據(jù)庫(kù)版本。

二、配置

1、配置主服務(wù)器

a.查看版本

首先查看主服務(wù)器的版本是否是支持熱備的版本。然后查看my.cnf(類unix)或者my.ini(windows)中mysqld配置塊的配置有沒(méi)有l(wèi)og-bin(記錄數(shù)據(jù)庫(kù)更改日志),因?yàn)閙ysql的復(fù)制機(jī)制是基于日志的復(fù)制機(jī)制,所以主服務(wù)器一定要支持更改日志才行。然后設(shè)置要寫(xiě)入日志的數(shù)據(jù)庫(kù)或者不要寫(xiě)入日志的數(shù)據(jù)庫(kù)。這樣只有您感興趣的數(shù)據(jù)庫(kù)的更改才寫(xiě)入到數(shù)據(jù)庫(kù)的日志中。

server-id=1?//數(shù)據(jù)庫(kù)的id這個(gè)應(yīng)該默認(rèn)是1就不用改動(dòng)  log-bin=log_name?//日志文件的名稱,這里可以制定日志到別的目錄?如果沒(méi)有設(shè)置則默認(rèn)主機(jī)名的一個(gè)日志名稱  binlog-do-db=db_name?//記錄日志的數(shù)據(jù)庫(kù)  binlog-ignore-db=db_name?//不記錄日志的數(shù)據(jù)庫(kù)

以上的如果有多個(gè)數(shù)據(jù)庫(kù)用”,”分割開(kāi)
然后設(shè)置同步數(shù)據(jù)庫(kù)的用戶帳號(hào)

mysql>?GRANT?REPLICATION?SLAVE?ON?*.*  ->?TO?'repl'@'%.mydomain.com'?IDENTIFIED?BY?'slavepass';

4.0.2以前的版本, 因?yàn)椴恢С諶EPLICATION 要使用下面的語(yǔ)句來(lái)實(shí)現(xiàn)這個(gè)功能

mysql>?GRANT?FILE?ON?*.*  ->?TO?'repl'@'%.mydomain.com'?IDENTIFIED?BY?'slavepass';

設(shè)置好主服務(wù)器的配置文件后重新啟動(dòng)數(shù)據(jù)庫(kù)

b.鎖定現(xiàn)有的數(shù)據(jù)庫(kù)并備份現(xiàn)在的數(shù)據(jù)

鎖定數(shù)據(jù)庫(kù)

mysql>?FLUSH?TABLES?WITH?READ?LOCK;

備份數(shù)據(jù)庫(kù)有兩種辦法一種是直接進(jìn)入到mysql的data目錄然后打包你需要備份數(shù)據(jù)庫(kù)的文件夾,第二種是使用mysqldump的方式來(lái)備份數(shù)據(jù)庫(kù)但是要加上”–master-data ” 這個(gè)參數(shù),建議使用第一種方法來(lái)備份數(shù)據(jù)庫(kù)
c.查看主服務(wù)器的狀態(tài)

mysql>?show?master?statusG;  +---------------+----------+--------------+------------------+  |?File?|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|  +---------------+----------+--------------+------------------+  |?mysql-bin.003?|?73?|?test?|?manual,mysql?|  +---------------+----------+--------------+------------------+

記錄File 和 Position 項(xiàng)目的值,以后要用的。
d.然后把數(shù)據(jù)庫(kù)的鎖定打開(kāi)

mysql>?UNLOCK?TABLES;

4。配置從服務(wù)器

a.首先設(shè)置數(shù)據(jù)庫(kù)的配置文件
server-id=n?//設(shè)置數(shù)據(jù)庫(kù)id默認(rèn)主服務(wù)器是1可以隨便設(shè)置但是如果有多臺(tái)從服務(wù)器則不能重復(fù)。  master-host=db-master.mycompany.com?//主服務(wù)器的IP地址或者域名  master-port=3306?//主數(shù)據(jù)庫(kù)的端口號(hào)  master-user=pertinax?//同步數(shù)據(jù)庫(kù)的用戶  master-password=freitag?//同步數(shù)據(jù)庫(kù)的密碼  master-connect-retry=60?//如果從服務(wù)器發(fā)現(xiàn)主服務(wù)器斷掉,重新連接的時(shí)間差  report-host=db-slave.mycompany.com?//報(bào)告錯(cuò)誤的服務(wù)器
b.把從主數(shù)據(jù)庫(kù)服務(wù)器備份出來(lái)的數(shù)據(jù)庫(kù)導(dǎo)入到從服務(wù)器中
c.啟動(dòng)從數(shù)據(jù)庫(kù)

然后啟動(dòng)從數(shù)據(jù)庫(kù)服務(wù)器,如果啟動(dòng)的時(shí)候沒(méi)有加上”–skip-slave-start”這個(gè)參數(shù)則進(jìn)入到mysql中

mysql>?slave?stop;?//停止slave的服務(wù)
d.設(shè)置主服務(wù)器的各種參數(shù)
mysql>?CHANGE?MASTER?TO  ->?MASTER_HOST='master_host_name',?//主服務(wù)器的IP地址  ->?MASTER_PORT=3306,?//主服務(wù)器端口  ->?MASTER_USER='replication_user_name',?//同步數(shù)據(jù)庫(kù)的用戶  ->?MASTER_PASSWORD='replication_password',?//同步數(shù)據(jù)庫(kù)的密碼  ->?MASTER_LOG_FILE='recorded_log_file_name',?//主服務(wù)器二進(jìn)制日志的文件名(前面要求記住的參數(shù))  ->?MASTER_LOG_POS=recorded_log_position;?//日志文件的開(kāi)始位置(前面要求記住的參數(shù))
e.啟動(dòng)同步數(shù)據(jù)庫(kù)的線程
mysql>?slave?start;

查看數(shù)據(jù)庫(kù)的同步情況吧。如果能夠成功同步那就恭喜了!
查看主從服務(wù)器的狀態(tài)

mysql>?SHOW?PROCESSLISTG?//可以查看mysql的進(jìn)程看看是否有監(jiān)聽(tīng)的進(jìn)程

三、清除日志

如果日志太大清除日志的步驟如下:

1.鎖定主數(shù)據(jù)庫(kù)

mysql>?FLUSH?TABLES?WITH?READ?LOCK;

2.停掉從數(shù)據(jù)庫(kù)的slave

mysql>?slave?stop;

3.查看主數(shù)據(jù)庫(kù)的日志文件名和日志文件的position

show?master?status;  +---------------+----------+--------------+------------------+  |?File?|?Position?|?Binlog_do_db?|?Binlog_ignore_db?|  +---------------+----------+--------------+------------------+  |?louis-bin.001?|?79?|?|?mysql?|  +---------------+----------+--------------+------------------+

4.解開(kāi)主數(shù)據(jù)庫(kù)的鎖

mysql>?unlock?tables;

5.更新從數(shù)據(jù)庫(kù)中主數(shù)據(jù)庫(kù)的信息

mysql>?CHANGE?MASTER?TO  ->?MASTER_HOST='master_host_name',?//主服務(wù)器的IP地址  ->?MASTER_PORT=3306,?//主服務(wù)器端口  ->?MASTER_USER='replication_user_name',?//同步數(shù)據(jù)庫(kù)的用戶  ->?MASTER_PASSWORD='replication_password',?//同步數(shù)據(jù)庫(kù)的密碼  ->?MASTER_LOG_FILE='recorded_log_file_name',?//主服務(wù)器二進(jìn)制日志的文件名(前面要求記住的參數(shù))  ->?MASTER_LOG_POS=recorded_log_position;?//日志文件的開(kāi)始位置(前面要求記住的參數(shù))

6.啟動(dòng)從數(shù)據(jù)庫(kù)的slave

mysql>?slave?start;

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員