Назад | Перейти на главную страницу

Самый быстрый способ перенести несколько баз данных на новый сервер

У меня есть несколько баз данных mysql малого и среднего размера, скажем, около 40, и мне нужно перенести их с одного сервера whm с разными учетными записями cpanel на другой с учетными записями, настроенными с предыдущего сервера, и старых версий баз данных, в которые я уже перемещаю место.

Может ли кто-нибудь порекомендовать самый быстрый способ сделать это, я собирался вручную сбрасывать каждый из них и импортировать его, но это кажется очень трудоемким, я хотел бы вырезать свою машину как посредника, если это возможно, и автоматизировать, если это возможно.

Я мало что знаю о cPanel, но знаю, как очень быстро перенести базу данных на другой сервер - если у вас есть доступ к ssh.

используйте mysqldump с правильными параметрами и соедините его с ssh. поэтому база данных импортируется, а база данных волшебства все еще экспортируется. никакие временные файлы не используются (кроме mysql внутри;))

исходный сервер # mysqldump --user = user1 --all-databases | ssh targethost 'mysql --user = user2'

если вы аутентифицируетесь на исходном сервере с помощью вашего закрытого ключа и ssh-agent, вы можете использовать параметр -A для ssh для подключения. Таким образом, вам не нужно заботиться об авторизации на целевой стороне. Но имейте в виду:

         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