로컬 컴퓨터에서 원격 DB를 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 의 친절한 사람들이 당신을 더 잘 도울 수 있다고 말하고 싶습니다 .
Piskvor는

MSQL WorkBench 5.2.22를 살펴보십시오 . 쉽게 할 수 있습니다.
Gary

1
참고 : 원격 mysql 서버를 덤프하려면 --host = sqlserver.host.name --port = 3306
ro0ter

나는이 질문이 DBA에 속해 있기 때문에이 주제를 논외 주제로 폐쇄하기로 투표하고 있습니다
Marquis of Lorne

답변:


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를 사용하지 마십시오. 포트가 아닌 소켓으로 연결되는 '특별한 의미'의 의미가 없습니다.)

편집 : 정교하게 : 호스트가로 설정된 경우 localhost구성된 (또는 기본) --socket옵션이 가정됩니다. 옵션 파일을 찾고 사용 하는 설명서 를 참조하십시오 . Windows에서는 이름이 지정된 파이프 일 수 있습니다.


3
주의 : localhost종종 기본값이 ::1아닌 IPv6으로 설정 127.0.0.1됩니다.
polkovnikov.ph

112

원격 서버에 대해 로컬로 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을 사용하는 것은 어떻습니까? 또는 SSH를 연결 한 시스템에서 데이터베이스 시스템에 액세스 할 수있는 덤프를 수행합니까? 포트는 공용 일 필요는 없습니다.
Ondrej Burkert

3
-p데이터베이스 이름이 아니라 비밀번호 인수에 대한 것임을 기억하는 것이 중요합니다 . 그러나 일반 텍스트로 저장하는 것은 안전하지 않으므로 추가 -p하면 로그인 할 때 비밀번호를 묻는 메시지가 나타납니다. 어쩌면 그것은 단지 나 있지만, mysql따라서 mysql덤프 구문은 결코 모든였습니다 정직까지 명령 행 인수로.
anon58192932

0

이 페이지를 기반으로 :

두 개의 MySQL 데이터베이스 비교

다른 호스트에서 ddbb를 사용할 수 있도록 수정했습니다.

#! / bin / sh

echo "사용 : dbdiff [user1 : pass1 @ dbname1 : host] [user2 : pass2 @ dbname2 : host] [ignore_table1 : ignore_table2 ...]"

덤프 () {
  최대 = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %% : *}; pass = $ {up ## * :}; dbname = $ {down %% : *}; host = $ {down ## * :};
  mysqldump --opt --compact --skip-extended-insert -u $ user -p $ pass $ dbname -h $ host $ table> $ 2
}

rm -f /tmp/db.diff

# 비교
최대 = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %% : *}; pass = $ {up ## * :}; dbname = $ {down %% : *}; host = $ {down ## * :};
`mysql -u $ user -p $ pass $ dbname -h $ host -N -e "show tables"--batch의 테이블; 하다
  if [ "`echo $ 3 | grep $ table`"= ""]; 그때
    echo " '$ table'비교 ..."
    덤프 $ 1 /tmp/file1.sql
    덤프 $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  그밖에
    echo " '$ table'을 무시했습니다 ..."
  fi
끝난
적은 /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

원격 서버의 mysqldump는 SSL을 사용합니다.

1- SSL을 사용한 보안

192.168.0.101-원격 서버

192.168.0.102-로컬 서버

리 모어 서버

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-로컬 서버

리 모어 서버

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 / local / mysql / data / 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) 또는 (REQUIRE X509)가없는 SSL이 복사하지 않는 경우 원격 서버에서이 파일을 복사


원격 서버에서

/ usr / local / mysql / data /

-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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.