как mysqldump удаленной БД с локальной машины


177

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

Я попытался создать туннель SSH, а затем сделать дамп, но это не похоже на работу. Я попытался:

ssh -f -L3310:remote.server:3306 user@remote.server -N

Туннель создан с успехом. Если я сделаю

telnet localhost 3310

Я получаю некоторую рекламу, которая показывает правильную версию сервера MySQL. Тем не менее, выполнение следующих действий, кажется, пытается подключиться локально

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name

9
Поскольку этот вопрос больше относится к администрированию, чем к программированию, я бы сказал, что добрые люди на serverfault.com могли бы помочь вам лучше.
Писквор покинул здание

Взгляните на MSQL WorkBench 5.2.22. Это легко позволит вам сделать это.
Гэри

1
ПРИМЕЧАНИЕ: для выгрузки удаленного сервера MySQL, пожалуйста, включите --host = sqlserver.host.name --port = 3306
ro0ter

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит DBA,
маркиз Лорн

Ответы:


244

Как я еще не видел в serverfault, и ответ довольно прост:

Изменить:

ssh -f -L3310:remote.server:3306 user@remote.server -N

Для того, чтобы:

ssh -f -L3310:localhost:3306 user@remote.server -N

И изменить:

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name

Для того, чтобы:

mysqldump -P 3310 -h 127.0.0.1 -u mysql_user -p database_name table_name

(не используйте localhost, это одна из этих бессмыслиц «особого значения», которые, вероятно, соединяются скорее через сокет, чем через порт)

edit : хорошо, чтобы уточнить: если host установлен в localhost, предполагается сконфигурированная (или по умолчанию) --socketопция. См. Руководство по поиску / использованию файлов опций. Под Windows это может быть именованный канал.


3
Осторожно: localhostчасто по умолчанию используется ::1IPv6, а не 127.0.0.1.
polkovnikov.ph

113

Можно вызвать mysqldump локально против удаленного сервера.

Пример, который работал для меня:

mysqldump -h hostname-of-the-server -u mysql_user -p database_name > file.sql

Я следовал документации mysqldump по вариантам подключения.


9
Больше не нужно открывать туннель SSH раньше. +1
ученик

1
Проще всего, нет необходимости подключаться через ssh и возвращать файл на локальный компьютер! Просто принеси свалку напрямую!
theGabyRod

3
это опасно, очень опасно. это требует, чтобы порт mysql был открыт для общественности. которые могут быть легко форсированы ботами.
volkovmqx

5
Как насчет того, чтобы быть в VPN? Или делать дамп с компьютера, на котором вы SSHed, который имеет доступ к компьютеру базы данных? Порт не должен быть публичным.
Ондрей Беркерт

3
Здесь важно помнить, что -pэто аргумент пароля, а не имя базы данных. Но хранить его в текстовом виде небезопасно, поэтому добавление -pозначает, что вам будет предложено ввести пароль при входе в систему. Может быть, это только я, но синтаксис дампа mysqlи, следовательно, mysqlсинтаксис дампа никогда не был таким простым, как аргументы командной строки.
anon58192932

0

Основываясь на этой странице здесь:

Сравните две базы данных MySQL

Я изменил его, чтобы вы могли использовать ddbb на разных хостах.

#! / Bin / ш

echo "Использование: dbdiff [user1: pass1 @ dbname1: host] [user2: pass2 @ dbname2: host] [ignore_table1: ignore_table2 ...]"

dump () {
  до $ = {1 %% @ *}; вниз = $ {1 ## * @}; пользователь = $ {до %%: *}; передать = $ {до ## *:}; имя_бд = $ {вниз %%: *}; хост = $ {вниз ## *:};
  mysqldump --opt --compact --skip-extended-insert -u $ user -p $ pass $ dbname -h $ host $ table> $ 2
}

rm -f /tmp/db.diff

# Сравнить
до $ = {1 %% @ *}; вниз = $ {1 ## * @}; пользователь = $ {до %%: *}; передать = $ {до ## *:}; имя_бд = $ {вниз %%: *}; хост = $ {вниз ## *:};
для таблицы в `mysql -u $ user -p $ pass $ dbname -h $ host -N -e" show tables "--batch`; делать
  if ["` echo $ 3 | grep $ table` "=" "]; затем
    echo "Сравнение таблицы $ ..."
    сбросить $ 1 /tmp/file1.sql
    сбросить $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  еще
    echo "Игнорируется таблица $ ..."
  фи
сделано
меньше /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

mysqldump с удаленного сервера использует SSL

1- Безопасность с SSL

192.168.0.101 - удаленный сервер

192.168.0.102 - локальный сервер

Remore сервер

CREATE USER 'backup_remote_2'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '3333333' REQUIRE SSL;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote_2'@'192.168.0.102';

FLUSH PRIVILEGES;

-

Локальный сервер

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote_2 \
 --password=3333333 \
 --master-data \
 --set-gtid-purged \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=REQUIRED \
 --result-file=/home/db_1.sql

====================================

2 - Безопасность с использованием SSL (REQUIRE X509)

192.168.0.101 - удаленный сервер

192.168.0.102 - локальный сервер

Remore сервер

CREATE USER 'backup_remote'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '1111111' REQUIRE X509;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote'@'192.168.0.102';

FLUSH PRIVILEGES;

-

Локальный сервер

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote \
 --password=1111111 \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=VERIFY_CA \
 --ssl-ca=/usr/local/mysql/data/ssl/ca.pem \
 --ssl-cert=/usr/local/mysql/data/ssl/client-cert.pem \
 --ssl-key=/usr/local/mysql/data/ssl/client-key.pem \
 --result-file=/home/db_name.sql

[Заметка]

На локальном сервере

/ USR / местные / MySQL / данные / SSL /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28 ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28 client-key.pem

Скопируйте эти файлы с удаленного сервера для (REQUIRE X509) или, если SSL без (REQUIRE X509), не копируйте


На удаленном сервере

/ USR / местные / MySQL / данные /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28  ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  client-key.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  private_key.pem
-rw-r--r-- 1 mysql mysql  451 Apr 16 22:28  public_key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  server-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  server-key.pem

my.cnf

[mysqld]
# SSL
ssl_ca=/usr/local/mysql/data/ca.pem
ssl_cert=/usr/local/mysql/data/server-cert.pem
ssl_key=/usr/local/mysql/data/server-key.pem

Повысить безопасность пароля

https://dev.mysql.com/doc/refman/8.0/en/password-security-user.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.