mysql 5.7 遷移數據方案

從一臺服務器遷移至其餘服務器,如何選擇最短的停服時間方案mysql

方案1、凌晨3點的全備份+停服後一天的大概一天的增備sql

  1. 拷貝前一天的全備份至新的服務器服務器

   rsync -auzrP /Data/dbbak/db/2019-04-23/2019-04-23_03-10-11 root@172.16.1.80:/data/backup/full/架構

  2. 解壓(備份方式:innobackupex  --compress,因此須要提早解壓)app

   innobackupex --decompress /data/backup/full/2019-04-23_03-10-11spa

  3. 停服日誌

   systemctl stop mysqldrem

  5. 增備it

   innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456  --incremental /data/backup/incr --incremental-basedir=/data/backup/full/2019-04-02_16-42-43io

  6. 恢復

  --應用日誌

   innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --apply-log --redo-only  /data/2019-04-18_03-10-09/

   innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --apply-log --redo-only  /data/2019-04-18_03-10-09/  --incremental-dir=/root/2019-04-18_19-06-43

   7. 拷貝至data目錄下,並受權

   innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --copy-back /data/2019-04-18_03-10-09/

   chown -R  mysql:mysql /data/mysql-data/

   chmod -R 755   /data/mysql-data/

  8. 恢復完成,啓動mysql

  mysqld_safe  --user=mysql &

 

方案2、當前時間全備+binglog恢復

  1. 全備份(熱備,物理備)

  innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456'  --use-memory=12G --kill-long-queries-timeout=5 --ftwrl-wait-timeout=20 --compress  --compress-threads=16 /data/bak/db/`date +%F`

  2. 拷貝至新服務器,並恢復

   rsync -auzrP /Data/dbbak/db/2019-04-23/2019-04-23_03-10-11 root@172.16.1.80:/data/backup/full/

   innobackupex --decompress /data/backup/full/2019-04-23_03-10-11

   innobackupex --apply-log  /data/backup/full/2019-04-23_03-10-11

   innobackupex --copy-back  /data/backup/full/2019-04-23_03-10-11

  3. 停服保證數據一致性,再將期間產生的binlog拷貝至新的服務器並執行

  mysqlbinlog --start-position=1108  mysql-bin.000007 |mysql -uroot -p123456 -v 

 

 方案3、主從架構複製的方式

  1.用全備份恢復

   rsync -auzrP /Data/dbbak/db/2019-04-23/2019-04-23_03-10-11 root@172.16.1.80:/data/backup/full/

   innobackupex --decompress /data/backup/full/2019-04-23_03-10-11

   innobackupex --apply-log  /data/backup/full/2019-04-23_03-10-11

   innobackupex --copy-back  /data/backup/full/2019-04-23_03-10-11

  2. 受權新服務器複製權限

  GRANT REPLICATION SLAVE ON *.* TO 'rep20'@'10.8.9.20' IDENTIFIED BY '123456';

  3. 給全部表加上只讀鎖

  flush tables with read lock;

  4. 配置主從

   stop slave;

   change master to master_host='172.16.1.88', master_user='rep20', master_password=' 123456', master_log_file='mysql-bin.000614',  master_log_pos=296235077;

   start slave;

  5. 查看主從狀態

  Master_Log_File和Relay_Master_Log_File所指向的文件必須一致

  Relay_Log_Pos和Exec_Master_Log_Pos的爲止也要一致才行

  Slave_SQL_Running_State:顯示爲wait 意思是中繼日誌的sql語句已經所有執行完畢

  6. 驗證部分表的記錄條數,和最後一條數據的內容

  select count(*) from student;

  select * from student order by create_time desc limit 1;

  7. 解鎖

  UNLOCK TABLES;

  

總結: 方案一是增備的方式,步驟複雜了一些,操做失誤就得從新恢復,停服的時間也須要更長,出錯的機率也相對大;

      方案二 停服前全備份(仍是熱備),真正停服的時間是拷貝binlog和恢復binlog的時間,速度快,2步驟,出錯機率低;(推薦)

   方案三 停服時間最短,可是相對更難校驗數據的一致性,一旦數據不一致還有寫入,會形成很大的麻煩。

相關文章
相關標籤/搜索