1. 程式人生 > >【MySQL】資料庫主主備份

【MySQL】資料庫主主備份

參考資料

我們先以A伺服器為起點,配置它的資料庫同步到B。這就是主-從複製了。
之後再反過來做一次,就可以互相備份了。

熱備份的條件

(1) mysql的版本都要高於3.2。
(2) 兩者資料庫版本相同。
(3) 主主備份相當於在原先主從備份的基礎上反過來再操作一次。

範例環境

作業系統: windows7
MySQL版本: 5.7.18
伺服器A的IP: 192.168.68.56
伺服器B的IP: 192.168.68.139

主主備份實現

(3.1—-3.7 同主從備份)

增加一個使用者賬號(backup,密碼centerm)作為同步使用者賬號
A: mysql> Grant replication slave on *.* to [email protected]'192.168.68.139' identified by 'centerm';
B: mysql> Grant replication slave on *.* to [email protected]'192.168.68.56' identified by 'centerm';

注: (1). mysql> Grant 許可權 on . to 使用者賬號@’允許訪問的IP’ identified by ‘使用者密碼’;

增加一個數據庫(news)作為同步資料庫
A & B : create database news;
修改主資料庫的my.ini配置

在原my.ini檔案下新增

server-id=1
#設定需要記錄log 可以設定log-bin=backuplog 設定日誌檔案的名稱
log-bin=backuplog
#日誌檔案在mysql資料庫資料夾根目錄下,mysql將建立不同副檔名,檔名為backuplog的幾個日誌檔案。
#指定需要日誌的資料庫
binlog-do-db=news
獲取file和position欄位

完成之後儲存,然後重啟伺服器

net stop mysql & net start mysql

進入mysql資料庫,輸入命令:

show master status;

記一下file,position兩個欄位(一般file會是mysql-bin.000006)

修改從資料庫的my.ini配置

在原my.ini檔案下新增

server-id=2
#只同步news庫
replicate-do-db=news
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
啟動備份

儲存之後重啟資料庫
進入mysql,
輸入命令:

change master to master_host='192.168.68.56',master_user='backup',master_password='centerm',master_log_file='mysql-bin.000006',master_log_pos=1606;

mysql-bin.000006→→→之前記錄的file
1606→→→之前記錄的position

輸入命令:

start slave;

輸入命令:

show slave status;
主從備份完成

在主資料庫新增表檢視是否同步到備資料庫

以下開始配置主主備份:

開啟主伺服器的binarylog

在原my.ini檔案下新增

auto-increment-increment = 10
auto-increment-offset = 1

作用:用於在雙主(多主迴圈)互相備份。 因為每臺數據庫伺服器都可能在同一個表中插入資料,如果表有一個自動增長的主鍵,那麼就會在多伺服器上出現主鍵衝突。

解決這個問題的辦法就是讓每個資料庫的自增主鍵不連續。上面的配置說是,我假設需要將來可能需要10臺伺服器做備份,所以auto-increment-increment設為10。而 auto-increment-offset=1 表示這臺伺服器的序號。從1開始,不超過auto-increment-increment。

這樣做之後, 我在這臺伺服器上插入的第一個id就是1,第二行的id就是11了, 而不是2。(同理,在第二臺伺服器上插入的第一個id就是2, 第二行就是12, 這個後面再介紹) 這樣就不會出現主鍵衝突了。

即:
auto-increment-increment表示可能用於做備份的伺服器數量。
auto-increment-offset表示本臺伺服器的序號。

開啟從伺服器備份日誌
  • 在原my.ini檔案下新增
log-slave-updates=ON

意思是,中繼日誌執行之後,這些變化是否需要計入自己的binarylog。當你的B伺服器需要作為另外一個伺服器的主伺服器的時候需要開啟。就是雙主互相備份,或者多主迴圈備份。 我們這裡需要,所以開啟。

  • 儲存, 重啟mysql。
開啟從伺服器備份日誌

登入從伺服器B的mysql(可以用super賬號登入)
執行

show slave status\G

注意圖中的紅框,兩個都是Yes,說明開啟成功。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果其中一個是No, 那就說明不成功。需要檢視mysql的錯誤日誌。
錯誤日誌一般在data目錄下,檢視.err字尾的檔案。

開啟從伺服器備份日誌
  1. 在原my.ini檔案下新增
auto-increment-increment = 10
auto-increment-offset = 2
(含義參考3.8)

2. 儲存, 重啟mysql。

檢視從伺服器的

登入從伺服器B的mysql(可以用super賬號登入)
執行

show master status\G

記住File和position的值

開啟主伺服器中繼

在原my.ini檔案下新增

replicate-do-db=news
relay_log=slave-relay-bin
log-slave-updates=ON
啟動主伺服器同步

儲存之後重啟資料庫
進入mysql,
輸入命令:

change master to master_host='192.168.68.139',master_user='backup',master_password='centerm',master_log_file='mysql-bin.000006',master_log_pos=1606;

mysql-bin.000006→→→之前記錄的file
1606→→→之前記錄的position
輸入命令:

start slave;

輸入命令:

show slave status;

檢視服務狀態,是否兩個都是YES

重啟mysql服務
net stop mysql
net start mysql
如果3.14並不都是YES

說明slave沒有成功, 即,從B到A的同步沒有成功。去檢視mysql錯誤日誌,data目錄下.err字尾的檔案。
找到機器名.err檔案,開啟看看:

看圖中的error資訊。說找不到中繼日誌檔案。
這是因為我們在配置A的中繼檔案時改了中繼檔名,但是mysql沒有同步。解決辦法很簡單。

先停掉mysql服務。 找到這三個檔案,把他們刪掉。 一定要先停掉mysql服務。不然還是不成功。你需要重啟一下機器了。 或者手動kill mysqld。

好了, 啟動mysql之後。 再來檢查一下slave狀態。如果都是YES,則主主備份啟動成功。

一些問題
  1. 當發現雙機備份啟動有問題的時候,多看看.err日誌,很快就能發現問題。
  2. 同步失敗的時候,試一試stop slave和start slave。
  3. 多用show slave status/G和show master status/G命令,比較兩臺伺服器的File和Position欄位是否一致。不一致通過change master to *來調整。

相關推薦

MySQL資料庫主備份

參考資料 我們先以A伺服器為起點,配置它的資料庫同步到B。這就是主-從複製了。 之後再反過來做一次,就可以互相備份了。 熱備份的條件 (1) mysql的版本都要高於3.2。 (2) 兩者資料庫版本相同。 (3) 主主備份相當於在原先主從備份

MySQLMySQL資料庫主備份

序:   由於公司內部伺服器使用的是普通PC機,所有發生宕機的情況比較多。尤其是發生過幾次災難後整機需要重新安裝系統,導致此係統上的MySQL資料無法使用。所以再經過此次問題後搭建了MySQL主主備份。   0x01:環境   環境:MySQL(5.7)   系統:Windows 10(1

MySQL資料型別&時間戳&鍵&外來鍵&索引

一、資料表的建立 示例: 二、MySQL資料型別 1. 整數型別:BIT、BOOL、TINYINT、SMALLINT、MEDIUMINT、 INT、 BIGINT MySQL資料型別

mysql資料型別選擇

一Mysql 資料型別選擇 ​​​​​​​1.1 Char與varchar 由於char是固定長度的,所以存取速度比varchar快。缺點是浪費儲存空間,程式需要對行尾進行處理,所以對那些長度變化不大,並且對查詢速度有較高要求的資料可以通過char來存取。當然這個也是由

mysql 資料同步出現Slave_IO_Running:No問題的解決方法小結

 MySQL replication中slave機器上有兩個關鍵的程序,死一個都不行,一個是slave_sql_running,一個是Slave_IO_Running,一個負責與主機的io通訊,一個負責自己的slave mysql程序。 下面寫一下,這兩個要是有no了,怎麼

WindowsMySQLWindows下MySQL資料庫利用mysqldump定時備份並刪除N天前的備份資料

1.新建.bat檔案 內容如下: rem ******MySQL backup start******** @echo off set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%" if not exist "D:\backup\%Ymd%" m

mysqlsql刪除多個欄位重複資料鍵和沒鍵解決方法

table user      name age nub      張三    12  23      張三    12  23      張三    12  23      李四    13  21      李四    13  21      王五    11  25

MySQL安全探討MySQL備份所需最小權限

刷新 list root 連接數 麻煩 觸發 tab 無法連接 roc 1.背景: 基於網絡安全環境的惡化,以前用最高權限和root用戶直接進行備份的操作越來越不可取,每次手工備份 太麻煩,基於腳本備份又怕高權限賬號泄密。 2.解決思路: 權限最小化賦予 3.操作: 使用物

MySQL備份使用XtraBackup物理備份MySQL的流程

一致性 結構 邏輯 pass 麻煩 mysql class table pex 簡介: ? XtraBackup包含兩個主要的工具即:xtrabackup和innobackupex ? xtrabackup:只能備份InnoDB和XtraDB兩種事務引擎的表,不支持

mysqlmysql增改查刪基本命令以及備份操作

mysql mariaDB 實驗環境 虛擬化設備:Esxi6.0系統:Redhat7數據庫:mariaDB #操作與mysql相同第18章 使用MariaDB數據庫管理系統。學會4種備份MySQL數據庫(基本備份方面沒問題了) 一、初始化mariaDB服務 yum install mariadb ma

mybatismybatis中insert 鍵自增和不自增的插入情況mysql

pro SQ class TE IV rop generate mys bat 主鍵不自增:返回值是插入的條數 <insert id="add" parameterType="EStudent"> insert into TStudent(name,

MySQLmysqldump備份與恢復

插入數據 insert語句 -i Language proc 建表語句 -- ase procedure 簡介:mysqldump常用於MySQL數據庫邏輯備份。 備份操作: 1.備份所有庫: mysqldump -uroot -pyourpass --all-datab

mysql使用 if() 函式快速交換資料

條件:給定一張表 user,有欄位 id,name,vip, 要求使用一條SQL把 vip=y 的使用者改為 vip=n,反之亦然。 update user set user = if(vip='y','n','y') SQL的邏輯說明: 設定user 

MySQLDjango自動備份MySQL資料庫

使用命令列備份 錯誤的輸入: 正確的輸入: 使用$(date +%Y%m%d_%H%M%S) django自動備份: 使用P

mysql獲取mysql中不重複的資料

假設情景如下: user_table的欄位如下: keyword \t c_time \t heat keyword是字串的具有重複性的,c_time表示的是時間,heat是整形常數。 如下所示: 程式碼如下: select keyword, max(created

Linux資料備份

前言 為了保障伺服器上的資料的安全,我們需要定期進行備份 本文介紹本地備份和異地備份,通過對伺服器進行設定和寫指令碼來實現 備份步驟 1. 編寫指令碼 #本機備份 WEEKDAY=`date +%w

MySQL 要點——刪除、插入“行”“列”,鍵設定

*寫在前面提醒自己:DOS命令寫SQL寫完最後一個語句要加分號“;”。 一、刪除 delete:刪除表中的 行 ,如 delete from 表名 where 欄位名=值; drop:刪除索引、表或者資料庫,如 drop table 表名; truncate:刪

mysql資料庫主同步

3臺伺服器的多主架構,3臺伺服器都可以寫入並且做到3臺伺服器的資料一致性(任意一臺伺服器做寫入操作都可以,並且每臺伺服器的資料做到完全一致),並且防止主鍵衝突.目前只有3臺MySQL伺服器,不使用生成唯一id的程式。 在3臺主伺服器上建立mysql使用者建立使用者(使用root也可以,但是不建議

MySQL資料庫定時備份及刪除

1、檢視磁碟空間情況   既然是定時備份,就要選擇一個空間充足的磁碟空間,避免出現因空間不足導致備份失敗、資料丟失的問題。檢視伺服器磁碟空間使用情況的命令為:df -h。(df,disk free;h,human;以人類易讀的形式展示可用磁碟)   這裡

MySQLMySQL資料型別寬度

MySQL中整數資料型別 上圖:MySQL的整數型別 MySQL中資料型別的顯示寬度 顯示寬度只是指明MYSQL最大可能顯示的數字個數,數值的位數小於指定的寬度時會有空格填充,取