Mysql

將大型 MySql 數據庫(超過 15 GB)從伺服器移動到伺服器 mysqldump

  • September 11, 2019

我需要將我沒有 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?

試一試 !!!

引用自:https://dba.stackexchange.com/questions/81105