新跳槽了一家公司,上來就是數據庫調優和數據遷移。調優那部分後面再補上來。公司目前用的是5.1的數據庫,很老了,並且隨着業務的發展須要作讀寫分離和主從複製。想把全部的數據都挪到新庫上去。但這個庫大概有60G的數據。
主要思路:mysql
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是否一致,若是不一致,調用腳本自動修復
統計了幾種方式:
一·版本相同的數據庫sql
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)完成數據備