1. 程式人生 > >mysql雙機熱備的實現

mysql雙機熱備的實現

Mysql資料庫沒有增量備份的機制,當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 

要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的資料版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。

當然要實現mysql雙機熱備,除了mysql本身自帶的REPLICATION功能可以實現外,也可以用Heartbeat這個開源軟體來實現。不過本文主要還是講如何用mysql自帶的REPLICATION來實現mysql雙機熱備的功能。

1. 準備伺服器

由於Mysql不同版本之間的(二進位制日誌)binlog格式可能會不太一樣,因此最好的搭配組合是主(Master)伺服器的Mysql版本和從(Slave)伺服器版本相同或者更低,主伺服器的版本肯定不能高於從伺服器版本。

本次我用於測試的兩臺伺服器版本都是Mysql-5.5.17。

2. Mysql 建立主-從伺服器雙機熱備配置步驟

2.1環境描述

A伺服器(主伺服器Master):59.151.15.36

B伺服器(從伺服器Slave):218.206.70.146

主從伺服器的Mysql版本皆為5.5.17

Linux環境下

將主伺服器需要同步的資料庫內容進行備份一份,上傳到從伺服器上,保證始初時兩伺服器中資料庫內容一致。

不過這裡說明下,由於我是利用Mysql在安裝後就有的資料庫test進行測試的,所以兩臺伺服器裡面是沒有建立表的,只不分別在test裡面建立了同樣的一張空表tb_mobile;

Sql語句如下:

mysql> create table tb_mobile( mobile VARCHAR(20) comment'手機號碼', time timestamp DEFAULT now() comment'時間' );

2.2 主伺服器Master配置

2.2.1 建立同步使用者

進入mysql操作介面,在主伺服器上為從伺服器建立一個連線帳戶,該帳戶必須授予REPLICATION SLAVE許可權。因為從mysql版本3.2以後就可以通過REPLICATION對其進行雙機熱備的功能操作。

操作指令如下:

mysql> grant replication slave on *.* to 'replicate'@'218.206.70.146' identified by '123456';

mysql> flush privileges;

建立好同步連線帳戶後,我們可以通過在從伺服器(Slave)上用replicat帳戶對主伺服器(Master)資料庫進行訪問下,看下是否能連線成功。

在從伺服器(Slave)上輸入如下指令:

[[email protected] ~]# mysql -h59.151.15.36 -ureplicate -p123456

如果出現下面的結果,則表示能登入成功,說明可以對這兩臺伺服器進行雙機熱備進行操作。

2.2.2 修改mysql配置檔案

如果上面的準備工作做好,那邊我們就可以進行對mysql配置檔案進行修改了,首先找到mysql配置所有在目錄,一般在安裝好mysql服務後,都會將配置檔案複製一一份出來放到/ect目錄下面,並且配置檔案命名為:my.cnf。即配置檔案準確目錄為/etc/my.cnf

(Linux下用rpm包安裝的MySQL是不會安裝/etc/my.cnf檔案的,

至於為什麼沒有這個檔案而MySQL卻也能正常啟動和作用,在點有兩個說法,

第一種說法,my.cnf只是MySQL啟動時的一個引數檔案,可以沒有它,這時MySQL會用內建的預設引數啟動,

第二種說法,MySQL在啟動時自動使用/usr/share/mysql目錄下的my-medium.cnf檔案,這種說法僅限於rpm包安裝的MySQL,

解決方法,只需要複製一個/usr/share/mysql目錄下的my-medium.cnf檔案到/etc目錄,並改名為my.cnf即可。)

找到配置檔案my.cnf開啟後,在[mysqld]下修改即可:

[mysqld]

server-id = 1        //唯一id

log-bin=mysql-bin              //其中這兩行是本來就有的,可以不用動,新增下面兩行即可.指定日誌檔案

binlog-do-db = test     //記錄日誌的資料庫

binlog-ignore-db = mysql    //不記錄日誌的資料庫

2.2.3 重啟mysql服務

修改完配置檔案後,儲存後,重啟一下mysql服務,如果成功則沒問題。

2.2.4 檢視主伺服器狀態

進入mysql服務後,可通過指令檢視Master狀態,輸入如下指令:

注意看裡面的引數,特別前面兩個File和Position,在從伺服器(Slave)配置主從關係會有用到的。

注:這裡使用了鎖表,目的是為了產生環境中不讓進新的資料,好讓從伺服器定位同步位置,初次同步完成後,記得解鎖。


 

2.3 從伺服器Slave配置

2.3.1修改配置檔案

因為這裡面是以主-從方式實現mysql雙機熱備的,所以在從伺服器就不用在建立同步帳戶了,直接開啟配置檔案my.cnf進行修改即可,道理還是同修改主伺服器上的一樣,只不過需要修改的引數不一樣而已。如下:

[mysqld]

server-id = 2

log-bin=mysql-bin

replicate-do-db = test

replicate-ignore-db = mysql,information_schema,performance_schema

2.3.2重啟mysql服務

修改完配置檔案後,儲存後,重啟一下mysql服務,如果成功則沒問題。


 2.3.3用change mster 語句指定同步位置

這步是最關鍵的一步了,在進入mysql操作介面後,輸入如下指令:

mysql>stop slave;          //先停步slave服務執行緒,這個是很重要的,如果不這樣做會造成以下操作不成功。

mysql>change master to

>master_host='59.151.15.36',master_user='replicate',master_password='123456',

> master_log_file=' mysql-bin.000016 ',master_log_pos=107;

注:master_log_file, master_log_pos由主伺服器(Master)查出的狀態值中確定。也就是剛剛叫注意的。master_log_file對應File, master_log_pos對應Position。Mysql 5.x以上版本已經不支援在配置檔案中指定主伺服器相關選項。

遇到的問題,如果按上面步驟之後還出現如下情況:


 則要重新設定slave。指令如下

mysql>stop slave;

mysql>reset slave;

之後停止slave執行緒重新開始。成功後,則可以開啟slave執行緒了。

mysql>start slave;

2.3.4檢視從伺服器(Slave)狀態

用如下指令進行檢視

mysql> show slave status\G;

檢視下面兩項值均為Yes,即表示設定從伺服器成功。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

2.4 測試同步

之前開始已經說過了在資料庫test只有一個表tb_mobile沒有資料,我們可以先檢視下兩伺服器的資料庫是否有資料:

Master:59.151.15.36


 Slave:218.206.70.146


 好了,現在可以在Master伺服器中插入資料看下是否能同步。

Master:59.151.15.36



Slave:218.206.70.146


 可以從上面兩個截圖上看出,在Master伺服器上進行插入的資料在Slave伺服器可以查到,這就表示雙機熱備配置成功了。

3. Mysql 建立主-主伺服器雙機熱備配置步驟

伺服器還是用回現在這兩臺伺服器

3.1建立同步使用者

同時在主從伺服器建立一個連線帳戶,該帳戶必須授予REPLIATION SLAVE許可權。這裡因為伺服器A和伺服器B互為主從,所以都要分別建立一個同步使用者。

伺服器A:

mysql> grant replication slave on *.* to 'replicate'@'218.206.70.146' identified by '123456';

mysql> flush privileges;

伺服器B:

mysql> grant replication slave on *.* to 'replicate'@'59.151.15.36' identified by '123456';

mysql> flush privileges;

3.2修改配置檔案my.cnf

伺服器A

[mysqld]

       server-id = 1

log-bin=mysql-bin 

binlog-do-db = test

       binlog-ignore-db = mysql

#主-主形式需要多新增的部分

       log-slave-updates

       sync_binlog = 1

       auto_increment_offset = 1

       auto_increment_increment = 2

       replicate-do-db = test

       replicate-ignore-db = mysql,information_schema

伺服器B:

[mysqld]

server-id = 2

log-bin=mysql-bin 

       replicate-do-db = test

       replicate-ignore-db = mysql,information_schema,performance_schema

#主-主形式需要多新增的部分

       binlog-do-db = test

       binlog-ignore-db = mysql

       log-slave-updates

       sync_binlog = 1

       auto_increment_offset = 2

       auto_increment_increment = 2

3.3分別重啟A伺服器和B伺服器上的mysql服務

重啟伺服器方式和上面的一樣,這裡就不做講解了

3.4分別查A伺服器和B伺服器作為主伺服器的狀態

伺服器A:



 伺服器B:


 3.5分別在A伺服器和B伺服器上用change master to 指定同步位置

伺服器A:

mysql>change master to

>master_host='218.206.70.146',master_user='replicate',master_password='123456',

> master_log_file=' mysql-bin.000011 ',master_log_pos=497;

伺服器B:

mysql>change master to

>master_host='59.151.15.36',master_user='replicate',master_password='123456',

> master_log_file=' mysql-bin.000016 ',master_log_pos=107;

3.6 分別在A和B伺服器上重啟從服務執行緒

mysql>start slave;

3.7 分別在A和B伺服器上檢視從伺服器狀態

mysql>show slave status\G;

檢視下面兩項值均為Yes,即表示設定從伺服器成功。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.8 測試主-主同步例子

測試伺服器A:

在伺服器A上插入一條語句如下圖所示:



 之後在伺服器B上檢視是否同步如下圖所示:



 測試伺服器B:

在伺服器B上插入一條語句如下圖所示:


 然後在從伺服器A上檢視是否有同步資料如下圖所示:


 

 最後從結果可以看出主-主形式的雙機熱備是能成功實現的。

4. 配置引數說明

Server-id

ID值唯一的標識了複製群集中的主從伺服器,因此它們必須各不相同。Master_id必須為1到232-1之間的一個正整數值,slave_id值必須為2到232-1之間的一個正整數值。

Log-bin

表示開啟binlog,開啟該選項才可以通過I/O寫到Slave的relay-log,也是可以進行replication的前提。

Binlog-do-db

表示需要記錄二進位制日誌的資料庫。如果有多個數據可以用逗號分隔,或者使用多個binlog-do-dg選項。

Binglog-ingore-db

表示不需要記錄二進位制日誌的資料庫,如果有多個數據庫可用逗號分隔,或者使用多binglog-ignore-db選項。

Replicate-do-db

表示需要同步的資料庫,如果有多個數據可用逗號分隔,或者使用多個replicate-do-db選項。

Replicate-ignore-db

表示不需要同步的資料庫,如果有多個數據庫可用逗號分隔,或者使用多個replicate-ignore-db選項。

Master-connect-retry

master-connect-retry=n表示從伺服器與主伺服器的連線沒有成功,則等待n秒(s)後再進行管理方式(預設設定是60s)。如果從伺服器存在mater.info檔案,它將忽略些選項。

Log-slave-updates

配置從庫上的更新操作是否寫入二進位制檔案,如果這臺從庫,還要做其他從庫的主庫,那麼就需要打這個引數,以便從庫的從庫能夠進行日誌同步。

Slave-skip-errors

在複製過程,由於各種原因導致binglo中的sql出錯,預設情況下,從庫會停止複製,要使用者介入。可以設定slave-skip-errors來定義錯誤號,如果複製過程中遇到的錯誤是定義的錯誤號,便可以路過。如果從庫是用來做備份,設定這個引數會存在資料不一致,不要使用。如果是分擔主庫的查詢壓力,可以考慮。

--slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]

Command-Line Format --slave-skip-errors=name
Option-File Format slave-skip-errors
System Variable Name slave_skip_errors
Variable Scope Global
Dynamic Variable No
Permitted Values
Type string
Default OFF
Valid Values OFF
[list of error codes]
all
ddl_exist_errors



MySQL 5.6 as well as MySQL Cluster NDB 7.3 support an additional shorthand value 
ddl_exist_errors, which is equivalent to the error code list 1007,1008,1050,1051,
1054,1060,1061,1068,1094,1146.
Examples:


--slave-skip-errors=1062,1053
--slave-skip-errors=all
--slave-skip-errors=ddl_exist_errors

Sync_binlog=1 Or N

Sync_binlog的預設值是0,這種模式下,MySQL不會同步到磁碟中去。這樣的話,Mysql依賴作業系統來重新整理二進位制日誌binary log,就像作業系統重新整理其他檔案的機制一樣。因此如果作業系統或機器(不僅僅是Mysql伺服器)崩潰,有可能binlog中最後的語句丟失了。要想防止這種情況,可以使用sync_binlog全域性變數,使binlog在每N次binlog寫入後與硬碟同步。當sync_binlog變數設定為1是最安全的,因為在crash崩潰的情況下,你的二進位制日誌binary log只有可能丟失最多一個語句或者一個事務。但是,這也是最慢的一種方式(除非磁碟有使用帶蓄電池後備電源的快取cache,使得同步到磁碟的操作非常快)。

即使sync_binlog設定為1,出現崩潰時,也有可能表內容和binlog內容之間存在不一致性。如果使用InnoDB表,Mysql伺服器處理COMMIT語句,它將整個事務寫入binlog並將事務提交到InnoDB中。如果在兩次操作之間出現崩潰,重啟時,事務被InnoDB回滾,但仍然存在binlog中。可以用-innodb-safe-binlog選項來增加InnoDB表內容和binlog之間的一致性。(註釋:在Mysql 5.1版本中不需要-innodb-safe-binlog;由於引入了XA事務支援,該選項作廢了),該選項可以提供更大程度的安全,使每個事務的binlog(sync_binlog=1)和(預設情況為真)InnoDB日誌與硬碟同步,該選項的效果是崩潰後重啟時,在滾回事務後,Mysql伺服器從binlog剪下回滾的InnoDB事務。這樣可以確保binlog反饋InnoDB表的確切資料等,並使從伺服器保持與主伺服器保持同步(不接收回滾的語句)。

Auto_increment_offset和Auto_increment_increment

Auto_increment_increment和auto_increment_offset用於主-主伺服器(master-to-master)複製,並可以用來控制AUTO_INCREMENT列的操作。兩個變數均可以設定為全域性或區域性變數,並且假定每個值都可以為1到65,535之間的整數值。將其中一個變數設定為0會使該變數為1。

這兩個變數影響AUTO_INCREMENT列的方式:auto_increment_increment控制列中的值的增量值,auto_increment_offset確定AUTO_INCREMENT列值的起點。

如果auto_increment_offset的值大於auto_increment_increment的值,則auto_increment_offset的值被忽略。例如:表內已有一些資料,就會用現在已有的最大自增值做為初始值。

如何解決MySQL主從同步錯誤的SQL

解決: 
stop slave;
#表示跳過一步錯誤,後面的數字可變
set global sql_slave_skip_counter =1;
start slave;
之後再用mysql> show slave status\G 檢視:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ok,現在主從同步狀態正常了。

相關推薦

mysql以及使用keepalived實現mysql主高可用

根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,部分參考文件在相應位置有標記。如有不足希望不吝賜教。 mysql雙機熱備的方式有兩種: 主-從伺服器雙機熱備 主-主伺服器雙機熱備 下文以主-主伺服器雙機熱備為例,主-從配置類似。 兩臺centos7,ip分別為:

mysql實現

Mysql資料庫沒有增量備份的機制,當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份的資料庫中。實現mysql資料庫的熱備份。  要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2

windows下使用mysql功能

sql skip host 狀態 set 指定同步 天數 沒有 我們 一. 準備工作   1. 準備兩臺服務器(電腦),接入局域網中,使互相ping得通對方   2. 兩臺服務器都安裝mysql-server-5.1,必須保證mysql的版本一致   3. 假設,服務器A:

mysql複製-mysql實現

雙主熱備架構圖。 1.slave開啟binlog 開啟3308埠資料的配置,新加 log-bin  、 binlog_format 和log_slave_updates  配置項。 [email protected]:[/usr/local/data/

MYSQL

主服務IP:192.168.136.1; 從服務IP:192.168.136.2。 開始前請確保兩臺服務現有資料一致。如果是通過檔案COPY方式來同步資料的,注意修改auto.cnf下的UUID,否則會出錯。 主伺服器配置步驟 1.修改my.cnf配置檔案 lo

搭建MySql資料庫的主從及實現(資料庫的高可用)

1. 用的CentOS7,因為CentOS7自帶mariadb,所以首先解除安裝mariadb.不解除安裝安裝mysql會有衝突,以前安裝過mysql也要解除安裝 2. 解除安裝mariadb                     執行命令(會列出所有的mariad

Mycat+Mysql主從復制實現

偏移 官方 搭建 jdk1 stat 普通用戶 系統 sch 支持 Mycat+Mysql主從復制實現雙機熱備 一、mysql主從配置原理 雙機熱備的概念簡單說一下,就是要保持兩個數據庫的狀態自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持

MySQL-Jira

ref 安裝 times ant all del lock 參數 time 主服務器:192.168.1.23 從服務器:192.168.1.243 一、主服務器Master配置 1. 創建同步賬號、賦權 在主服務器上為從服務器建立一個連接帳戶,此處用root,該帳戶必

mysql

數據庫主從mysql的雙機熱備 雙機熱備,就是要保持兩個數據庫的狀態自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持兩個數據庫數據一致。 這樣的做法好處在於:1、可以做災備,其中一個壞了可以切換到另一個;2、可以做負載均衡,可以請求分攤到其中任何一臺上,提高網站吞吐

keepalived實現

lin fire per 安裝 arp index 正常 綁定 type   keepalived的作用是檢測後端TCP服務的狀態,如果有一臺提供TCP服務的後端節點死機,或者工作出現故障,keepalived會及時檢測到,並將有故障的節點從系統中剔除,當提供TCP服務的節

Nginx+keepalived做實現負載均衡(主主模式)

nginx keepalive Keepalived: 簡介:Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepali

使用keepalived實現

figure 設置 dha boa message mtu hat 並不是 pid 通常說的雙機熱備是指兩臺機器都在運行,但並不是兩臺機器都同時在提供服務。當提供服務的一臺出現故障的時候,另外一臺會馬上自動接管並且提供服務,而且切換的時間非常短。下面來以keepalived

MySQL架構備份之

root .gz val 數據初始化 無法 ceshi 修改配置文件 rom ESS M--S架構:實現雙機熱備(AB復制) 1、可以降低master讀壓力 2、可以對數據庫做“熱備”,熱備只能解決硬件master硬件故障,軟件故障等重大故障問題

解決Nginx + Keepalived主從+自動切換,實現負載均衡及高可用

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee

mysql,keepalived

環境 Centos  7.4 172.16.91.215  主 172.16.91.216  從   安裝包 版本 mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz    

docker簡易實現資料庫的

docker簡易實現資料庫的雙機熱備 寫在前面:為什麼要採用雙機熱備?雖然我們在資料庫進行了負載均衡,但單節點Haproxy不具備高可用,一旦Haroxy節點故障,應用程式將無法訪問,故必須要有冗餘設計,使用keepalived進行雙機熱備。注:在閱讀此文之前,最好請先閱讀《docker

兩臺Linux完美實現

兩臺Linux完美實現雙機熱備 2012年09月22日 18:57:30 閱讀數:1844 http://www.51testing.com/html/06/n-186706-4.html 一直想做基於linux的雙機熱備,一直沒有時間和機會。一直以為只要做雙機熱備的實驗就必須兩臺機

Keepalived實現lvs

Keepalived簡介 Keepalived的作用是檢測伺服器的狀態,如果有一臺web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完

基於nginx實現web伺服器的

  1.適用場景 對於部署重要的服務,會使用兩臺伺服器,互相備份,共同執行同一服務。當一臺伺服器出現故障時,可以由另一臺伺服器承擔服務任務,從而在不需要人工干預的情況下,自動保證系統能持續提供服務。雙機熱備由備用的伺服器解決了在主伺服器故障時服務不中斷的問題。 2.nginx

使用win8 r2的故障轉移叢集實現(自己實現

(網上的教程太不全,浪費了我大量時間,自己總結!圖就不用了) 準備工作: 軟體準備:本地裝虛擬機器,虛擬機器裝三臺win8 server r2系統,都使用橋接上網(公司通過代理上網)配置兩塊網絡卡,記憶體分配2G,硬碟分配40G。 理論準備:(1)故障轉移群集要求 使用者為