私はいくつかの中小規模のmysqlデータベース、たとえば約40を持っており、異なるcpanelアカウントを持つ1つのwhmサーバーから、以前のサーバーからセットアップされたアカウントとすでに移動している古いバージョンのデータベースを持つ別のサーバーに移行する必要があります場所。
誰かがこれを行う最も速い方法をお勧めできますか?私はそれぞれを手動でダンプしてインポートするつもりでしたが、非常に時間がかかるようです。可能であれば仲介者として自分のマシンを切り取り、可能な限り自動化したいと思います。
私はcPanelについてあまり知りませんが、データベースを別のサーバーに非常に高速に転送する方法を知っています-sshにアクセスできる場合。
適切なパラメーターを指定してmysqldumpを使用し、sshでチェーンします。したがって、データベースはインポートされますが、ソースデータベースはまだエクスポートされます。一時ファイルは使用されません(内部のmysqlを除く;))
sourceserver#mysqldump --user = user1 --all-databases | ssh targethost'mysql --user = user2 '
秘密鍵とssh-agentを使用してソースサーバーに認証する場合は、sshの-Aオプションを使用して接続できます。したがって、ターゲット側の承認について気にする必要はありません。ただし、次の点に注意してください。
Agent forwarding should be enabled with caution. Users with the
ability to bypass file permissions on the remote Host (for the
agent's Unix-domain socket) can access the local agent through
the forwarded connection. An attacker cannot obtain key material
from the agent, however they can perform operations on the keys
that enable them to authenticate using the identities loaded into
the agent.
(出典:man 1 ssh)
これが少し役立つことを願っています
@krissiの回答が非常にうまく機能するので、おそらく少し多すぎますが、複数回実行する必要がある場合に備えて、次のようなスクリプトを使用できます。
#!/bin/bash
# MySQL databases migration script
# Jorge Barnaby (jorge {dot} barnaby {at} gmail)
################################################################################
# Configuration variables
ORIG_USER="Origin-username"
ORIG_PASS="Origin-password"
ORIG_Host="Origin-server"
DEST_USER="destination-username"
DEST_PASS="destination-password"
DEST_Host="destination-server"
# Do not backup the following databases
IGNORED_DBS="information_schema"
################################################################################
# Start of the program
# Command that runs on the Origin server to extract the databases
MYSQL_ORIG="mysqldump -u $ORIG_USER -h $ORIG_Host -p$ORIG_PASS --add-drop-database --databases"
# Command that runs on the destination server to popuplate the databases
MYSQL_DEST="mysql -u $DEST_USER -h $DEST_Host -p$DEST_PASS"
# Get all database list first
DBS="$(mysql -u $ORIG_USER -h $ORIG_Host -p$ORIG_PASS -Bse 'show databases')"
echo
echo -----------------------------------------------------------
echo `date +"%F %T %Z"` : Starting MySQL Migration script
echo -----------------------------------------------------------
echo
echo -- MySQL Origin Server: $ORIG_Host
echo -- MySQL Destination Server: $DEST_Host
for db in $DBS
do
skipdb=-1
if [ "$IGNORED_DBS" != "" ];
then
for i in $IGNORED_DBS
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ];
then
echo
echo -- `date +"%F %T %Z"` : Migrating database $db
# Command to be executed piping mysqldump on the Origin and mysql on the remote
$MYSQL_ORIG $db | $MYSQL_DEST
echo -- `date +"%F %T %Z"` : Done
fi
done
echo
echo -----------------------------------------------------------
echo `date +"%F %T %Z"` : All Done
echo -----------------------------------------------------------
exit 0