mysql大數據表改表結構方案


有一個表有上千W數據, 用什么方法給這個表加一個字段最快?
1. alert
2. 建一個表和第一個表一樣,只是多了要加的字段,然后用多個INSERT INTO SELECT語句limit寫入
3. 就是導出多個文件,然后用loadfile
4. 其它?

試過2.5KW數據, alert要156m。
INSERT INTO SELECT 100W要5m46s

兩個工具選擇:

http://www.percona.com/software/percona-toolkit

http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html

 

第二個工具是比較好的選擇,可以線上改表結構,試試再給報告給大家

 

正在使用第二個工具,也就是"Facebook 針對 MySQL 開源 Online Schema Change 代碼" 

參考文檔:

http://blog.chinaunix.net/uid-53720-id-3371360.html

http://blog.csdn.net/dbanote/article/details/18261377

參數中文說明:

http://www.cnblogs.com/zhoujinyi/p/3491059.html

 

正在測試環境測試,測試數據量大約是2500W左右,隨后有測試報告,沒什么問題就上生產環境了

 pt-online-schema-change --alter "ADD category tinyint(4) NOT NULL DEFAULT '0'" D=庫名,t=表名 -uroot -p密碼 --dry-run

 如果你的庫有主從結構,執行上面的語句遇到如下問題:

Cannot connect to D=calsync,h=從庫的IP,p=...,u=root
No slaves found. See --recursion-method if host localhost.localdomain has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.

請在從庫上建一個root帳號且密碼和上面的密碼一樣,且主庫機可以訪問

如果出現如下內容:

Found 1 slaves:
localhost.localdomain
Will check slave lag on:
localhost.localdomain

恭喜主從的沒有問題了

測試數據如下:

數據量:3.1KW行記錄

執行時間:

情況比較曲折,多次出現鎖死退出的情況,最后停機且去掉一個索引,用時4個小時完成

mysql 5.1之前版本改表字段名,和建索引都要建臨時表,會很慢

 mysql 5.1修改表字段名會重建臨時表來做事情,建索引不會建臨時表

mysql 5.6修改表字段名也不會臨時表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM