Mysql(三) ------數據遷移備份(針對數據量很大的情況)

新跳槽了一家公司,上來就是數據庫調優和數據遷移。調優那部分後面再補上來。公司目前用的是5.1的數據庫,很老了,而且隨着業務的發展需要做讀寫分離和主從複製。想把所有的數據都挪到新庫上去。但這個庫大概有60G的數據。
主要思路:

  1.創建用戶,並授權

2.搭建主從,做到主從同步,數據目前先保持一致,在切換主從同步切換ip
Mysql5.1已有數據量了,爲保證數據的一致性。故需要鎖庫,等數據導入後再解鎖

3.需要注意從庫和主庫的引擎,字符集
show variables like 'character_set%'; --查看當前環境的character_set
  show variables like 'collation%'; --查看當前的collation

4.數據搬完後做數據校驗,校驗一致性
 採用pt-table-checksum  進行校驗用pt-table-sync恢復一致
Zabbix定時監控mysql是否一致,如果不一致,調用腳本自動修復

統計了幾種方式:
一·版本相同的數據庫


 1.如果版本相同的話,直接停庫,拷貝(cp、tar,gzip,cpio) 把mysql的整個目錄打包發送到新的主機上。
 這個是最簡單粗暴的,也是最有效,而且數據也是很一致的

2。也可以採用percona-xtrabackup 物理備份 + binlog
 藉助第三方軟件備份,好處:它能對InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份。它不暫停服務創建Innodb熱備份;
爲mysql做增量備份;在mysql服務器之間做在線表遷移;使創建replication更加容易;備份mysql而不增加服務器的負載。

3.mysqldump備分
      a.主機A備份成sql文件,在導入到主機B數據庫裏,這種方式需要長時間鎖表,而且需要大量時間
        mysqldump -uvnum  -pvnum@123  --force data_base_name  >  /data/data_base_name.sql
        或直接傳到對應主機下的sql文件,60個G的話,導出導入時間差不多要五個小時左右,太慢了

        b.tar備份
        備份並壓縮
        mysqldump -uusername -ppassword dbname | gzip > /data/wwwroot/www/dbname.sql.gz
    解壓並還原
        gunzip < /root/dbname.sql.gz | mysql -uusernameb -ppasswordb dbnamenew
        時間相對減少點

        最佳方式介紹
        還有一種直接將數據庫A直接轉移到數據庫B的方式(在服務器A中執行)但要求網速一定要好
        mysqldump --default-character-set=utf8mb4 --host=127.0.0.1 -uusername -ppassword 
        1.必須保證服務器B的數據庫能夠服務器A訪問,且B服務器存在對應的庫
        2.--opt命令可選,建議加上。等同於指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉儲操作併產生一個可以很快裝入MySQL服務器的轉儲文件。
        3.--default-character-set=utf8mb4 指定該數據庫連接的字符類型。如果服務器默認未utf8的話,導出的數據可能會丟失四字節的unicode信息(表情之類的)
        4.-C 客戶端和服務器之間啓用壓縮傳遞所有信息。當然得要有咯。

mysql通過命令行快速轉移數據庫,一個命令(mysqldump)完成數據備
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章