1. 程式人生 > 其它 >記一次mysql5.7.22的已有資料的主從遷移

記一次mysql5.7.22的已有資料的主從遷移

技術標籤:mysql資料庫mariadb

目錄

環境

步驟

備份已有環境資料

主庫配置

從庫配置

出現的問題及解決的方法

因新上線一個報表系統為了讓兩個系統獨立,新的系統因是報表系統並不涉及業務邏輯但是又是比較消耗效能就準備利用mysql的主從搞一個從庫保持兩個系統的獨立性就需要獨立出來一個從庫。大概就是這個原因讓我們開始做主從複製。

環境

這是我們生產環境的配置如下

主機版本
192.168.2.22v5.7.22
192.168.2.23v5.7.22

步驟

備份已有環境資料

因為我們是生產環境我們首先確定我們大概是在幾點開始進行資料備份我們這次採用的是mysql自帶的mysqldump 本身資料量就比較少我們匯出來大概16G 用了2分鐘左右生成了一個sql檔案步驟比較簡單因為使用的預設引擎innodb,在我們使用mysqldump時就自動鎖表了不用再單獨鎖表:

  1. 匯出主庫資料
    mysqldump -u root -p ahida --databases jiw >jiw20210112.sql
  2. 匯入資料到從庫中時
    create database jiw;
    mysql -uroot -p jiw>jiw20210112.sql;
  3. 等待資料匯入完全(因為我們的資料較少但是使用sql檔案形式還是浪費了很多時間)檢視當前匯入到從庫的資料是否一致

主庫配置

我們目前的主庫是已經再用 所用我們匯出資料後就通知各個部門暫停1分鐘的匯入資料然後開始對主庫開啟binlog的設定,因為我們只需要同步一個業務庫的所以加上了binlog-do-db=otms只同步這個庫的binlog下面開始設定:
1、修改/etc/my.cnf 檔案在【mysqlid】下新增如下:

##binlog配置
log-bin=master-bin #開啟二進位制日誌
server-id=1 #設定server-id
binlog-format=ROW
binlog-do-db=otms
expire_logs_days = 7 # binlog過期清理時間
max_binlog_size = 1G # binlog每個日誌檔案大小

2、重啟mysql

service mysql start

3、檢視binlog是否啟動成功

show variables like 'log_bin';

Value 為 OFF 則未開啟日誌檔案
4、檢視binlog日誌狀態

show master status;

在這裡插入圖片描述
5、賦權使用者給一個使用者可以訪問log的許可權的使用者

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'192.168.2.23' IDENTIFIED BY 'slave';
FLUSH PRIVILEGES;

從庫配置

1、在/etc/my.cnf下配置binlog

#配置binlog  /etc/my.cnf
log_bin = slave-bin
server_id = 2
relay_log = slave-relay-bin
log_slave_updates = 1
#以下兩個為可選選項,如果要保證資料不丟失最好在清理binlog之前把要清理的日誌備份,日誌檔案的大小根據磁碟的效能做適當的調整
expire_logs_days = 7 #binlog過期清理時間
max_binlog_size = 100m #binlog每個日誌檔案大小

2、重啟mysql跟主庫一樣檢視是否成功
3、註冊slave語句
CHANGE MASTER TO MASTER_HOST='10.100.10.52',MASTER_USER='SLAVE',MASTER_PASSWORD='SLAVE',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=953;
4、開啟slave
start slave
5、檢視slave狀態是否成功
SHOW SLAVE STATUS;

看到這兩個引數為Yes 那到這資料就算成功了

出現的問題及解決的方法

1、在匯出時出現表不存在但是使用dump 出現鎖這張表 通過排檢視到我們之前複製表的時候有過檔案在但是表已經刪除 出現 sheet.frm檔案 這個時候把.frm檔案啥刪除就行了
2、在步驟都完成後同步有失敗 檢視日誌看到 從庫更新一個表但是這個表中這個欄位不存在,我們當時想的是我們已經把服務關了為什麼還會有插入呢。這時候一個同事說他還有個排程在跑在我們配置的時候這個時候表已經到匯出完了。這樣我們去對比我們在配置這3分鐘內的資料 然後把從庫缺的資料給補齊就可以了。