我需要在远程服务器上做一个数据库的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

因为我还没有在serverfault上看到它,答案很简单:

变化:

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

To:

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

和变化:

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

To:

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

(不要使用localhost,它是这些“特殊含义”的废话之一,可能是通过套接字而不是端口连接)

编辑:嗯,详细说明:如果host被设置为localhost,则假设有一个配置的(或默认的)——socket选项。请参阅寻找/使用哪个选项文件的手册。在Windows下,这可以是一个命名管道。


可以针对远程服务器在本地调用mysqldump。

举个对我有用的例子:

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

我参考了mysqldump文档中关于连接选项的说明。


根据这一页:

比较两个MySQL数据库

我修改了它,所以你可以在不同的主机上使用ddbb。


#!/bin/sh

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

dump () {
  up=${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

# Compare
up=${1%%@*}; down=${1##*@}; user=${up%%:*}; pass=${up##*:}; dbname=${down%%:*}; host=${down##*:};
for table in `mysql -u $user -p$pass $dbname -h $host -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

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 / local / 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 / local / 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