Я пытаюсь передать данные с одного сервера MySQL на другой с помощью сжатия gzip. На данный момент у меня есть:
mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c | mysql -h [host] -u [user] -p[pwd]
Конечно, это не работает, потому что сжатые данные импортируются в удаленную БД. Как мне распаковать данные на удаленном сервере перед импортом - или это не сработает, и мне нужно использовать SSH?
Спасибо
Используя параметр --compress
, Клиент MySQL может отправлять сжатые данные на удаленный сервер. Итак, командную строку передачи можно изменить на:
mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | \
mysql --compress -h [host] -u [user] -p[pwd]
Обратите внимание, что данные будут отправляться по сети в незашифрованном виде. Если вас это беспокоит, лучше выбрать конвейерную передачу дампа через SSH.
Да, вам нужно будет использовать какое-то удаленное выполнение, чтобы удаленная сторона выполнила декомпрессию:
mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c | ssh [host] "gunzip | mysql -h localhost -u [user] -p[pwd]"
Однако имейте в виду, что по умолчанию ssh выполняет сжатие прозрачно - шаги g (un) zip не нужны.
mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | ssh [host] mysql -h localhost -u [user] -p[pwd]
должно быть достаточно
Вы можете - через несколько каналов SSH.
Например:
ssh user@host1 "mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c" | ssh user@host2 "gzip -c -d | mysql -h [host] -u [user] -p[pwd]"
Немного разбив это, у вас есть две команды SSH, переданные друг другу:
mysqldump
, затем передаёт результат в gzip
, который, в свою очередь, отправляет результат в STDOUT.mysql
команда.Когда вы объединяете две команды, вы можете передавать данные между двумя хостами напрямую, используя SSH.
Пример из практики ниже:
cwatson@zeus:~$ ssh tyr
cwatson@tyr:~$ echo stuff123tyr > testfile.txt
cwatson@tyr:~$ cat testfile.txt
stuff123tyr
cwatson@tyr:~$ logout
ssh tyr "cat ~/testfile.txt | gzip -c" | ssh thor "gzip -c -d > ~/testfile.txt"
cwatson@zeus:~$ ssh thor
Last login: Fri Feb 26 17:28:01 2016 from host217-44-218-9.range217-44.btcentralplus.com
cwatson@thor:~$ cat testfile.txt
stuff123tyr
Предварительный запрос
whoami
ifconfig |grep "inet addr"|head -1
mysqldump -u{sender dbuser} -p{sender dbpassword} {sender database name} | gzip -cf | ssh {receiver user}@{receiver ip address} ' cat >/home/myfilename.gz | gzip -dc < myfilenamegz |mysql -u{receiver username} -p{receiver dbuser} {receiver dbname} '
{ }
из команды и вставьте свои значения