Mysql
將大型 MySql 數據庫(超過 15 GB)從伺服器移動到伺服器 mysqldump
我需要將我沒有 root 訪問權限的基於 Cpanel/Centos 的伺服器上的大約 17 GB 的 mysql 數據庫移動到我具有完全 root 訪問權限的 Centos 伺服器上。我確實在 Cpanel 上使用 mysqldump 限制了 SSH(我認為)。
從 Cpanel Mysql 備份實用程序下載測試數據庫時,伺服器記憶體不足並關閉。我只做了大約 250 MB 作為下載測試。
我的選擇似乎是:
主/從複製(我沒有 root,所以看起來不對) Rsync 數據庫文件(我沒有 root,所以看起來不對) Mysqldump PhpMyadmin(當表有太多行時伺服器崩潰)
在這一點上,我計劃從 Cpanel 伺服器做一個 mysqldump。我不想讓它被鎖定很長時間,因為我們的網站已經上線了。我看到我可以將 mysqldump 與 -r 一起使用,它會導致緩衝區逐行執行,而不是將整個表載入到緩衝區中。有些表有 200 萬行。大多數都在 50,000 行以下。
在不鎖定係統或由於 ram 過載而導致伺服器崩潰的情況下移動數據庫的最佳方法是什麼?
兩台伺服器都具有強大的 CPU 和 16 GB 的記憶體以及相當最新的 MySql 版本。
你會推荐一個表格轉儲,還是有必要?
我也許可以讓目前的 Cpanel 主機設置 my.cnf 以便我設置主從連接(但不確定那個)
您需要做的是 mysqldump 批量分離表並載入它們。
在新的 CentOS 伺服器上,編寫以下內容
MYSQL_SOURCE_HOST=10.20.30.40 MYSQL_SOURCE_USER=root MYSQL_SOURCE_PASS=rootpassword SRC_CONN="-h${MYSQL_SOURCE_HOST} -u${MYSQL_SOURCE_USER} -p${MYSQL_SOURCE_PASS}" MYSQL_TARGET_HOST=localhost MYSQL_TARGET_USER=root MYSQL_TARGET_PASS=rootpassword TGT_CONN="-h${MYSQL_TARGET_HOST} -u${MYSQL_TARGET_USER} -p${MYSQL_TARGET_PASS}" SQL="SELECT table_name FROM information_schema.tables" SQL="${SQL} WHERE table_schema = 'xcart'" SQL="${SQL} ORDER BY data_length" mysql ${SRC_CONN} -ANe"${SQL}" > /tmp/ListOfTables.txt COMMIT_COUNT=0 COMMIT_LIMIT=10 MYSQLDUMP_OPTIONS="--hex-blob --routines --triggers --events" for TBL in `cat /tmp/ListOfTables.txt` do mysqldump ${SRC_CONN} ${MYSQLDUMP_OPTIONS} xcart ${TBL} | mysql ${TGT_CONN} -Dxcart & (( COMMIT_COUNT++ )) if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ] then COMMIT_COUNT=0 wait fi done if [ ${COMMIT_COUNT} -gt 0 ] ; then wait ; fi
我的舊文章有其他想法:如何優化大型數據庫的 mysqldump?
試一試 !!!