mysqldump к tar.gz

Моя компания делает высококачественный файловый сервер с точками доступа для FTP/FTPS/SFTP/WebDav/HTTP/HTTPS.

Название продукта является Пустым FTP-сервером и существует доступная бесплатная версия.

Некоторые функции:

  • REST HTTP API для управления сервером
  • Удаленное администрирование для 1 или более серверов.
  • x86 и x64 варианты доступны.
  • Аутентификация пользователя поддерживается с учетными записями пользователя Windows, активным каталогом и/или встроенными учетными записями.
  • Можно или заблокировать учетную запись пользователя в каталог или использовать корневой каталог сервера.
  • Виртуальные каталоги также поддерживаются.
  • несколько других основных характеристик и снимков экрана

88
задан 27 January 2010 в 01:15
9 ответов
mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'

Вы не можете использовать tar в канале как это, и Вам не нужен он так или иначе, поскольку Вы только производите единственный файл. tar только полезен, если у Вас есть несколько файлов.

102
ответ дан 28 November 2019 в 19:23
  • 1
    You' ре прямо о не необходимости смолит, но Вы могли использовать его в конвейере, если бы Вы сделали, с mysqldump | tar cf - | gzip -c | ssh ... 'cat > file.tgz' –  Darren Chamberlain 27 January 2010 в 02:15
  • 2
    Это на самом деле работает? I' m вполне уверенный tar нуждается в списке имен файлов, чтобы продолжить работать. –  James 27 January 2010 в 12:25

Можно также сохранить пароль в файле конфигурации и использовать эту опцию - дополнительный файл значений по умолчанию:

mysqldump --defaults-extra-file=mysqldump.cnf DataBaseName | gzip -c > DBOutputName.sql.gz

файл конфигурации может быть похожим на это:

[mysqldump]
host = localhost
user = username
password = "password"
0
ответ дан 28 November 2019 в 19:23

Используйте именованный канал.

mkfifo mysql_pipe
gzip -9 -c < mysql_pipe > name_of_dump.gz &
mysqldump database > mysql_pipe 
rm mysql_pipe

Я использую все это время, it'a потрясающий.

http://en.wikipedia.org/wiki/Named_pipe

18
ответ дан 28 November 2019 в 19:23

Можно сделать как:

mysqldump --add-drop-table -h dbhost -u dbuser -p dbname (tablename tablename ... ) | gzip -c > wp.sql.gz

например.

mysqldump --add-drop-table -h localhost -u root -p wordpress | gzip -c > wp.sql.gz

2
ответ дан 28 November 2019 в 19:23

Я записал быстрый сценарий для всасывания вниз удаленной mysql базы данных. Это использует mysql сжатие, gzip и ssh сжатие. Высосанный вниз много база данных GB на невероятном уровне.

    ssh -C user@host "mysqldump --opt --compress database <table> | gzip -9 -c" > outputfile.sql.gz

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

Надежда это помогает кому-то.

15
ответ дан 28 November 2019 в 19:23

Если вы запускаете это локально, просто используйте следующую команду для резервного копирования вашей базы данных и заархивируйте ее с помощью gzip:

mysqldump -u userName -p (passwordPrompt) yourDatabaseName | gzip -c > output.gz 

(Edit: fixed -c key)

45
ответ дан 28 November 2019 в 19:23

Use pv and monitor rate!

mysqldump prod_db -h dbslave | pv | gzip -c > prod_2012_08_20.dump.tgz

Or, if you know the size (3GB), get an accurate estimate:

mysqldump prod_db -h dbslave | pv -s 3g | gzip -c > prod_2012_08_20.dump.tgz
5
ответ дан 28 November 2019 в 19:23

Я работал над этим сценарием bash ниже, который пытается собрать воедино все полезные советы, которые я видел, когда дело доходит до дампа / восстановления с помощью mysql. Он предназначен для удаленных операций.

Просто перенастройте переменные и попробуйте. :)

Возможности:

  • вы можете передать список таблиц для дампа (выборочный дамп)
  • вам может быть предложено ввести пароли (MySQL / SSH) или установить их в переменных
  • сетевая передача сжата
  • вы можете сохранить gzip-дамп на удаленный сервер
  • вы можете повторно импортировать дамп на удаленный сервер на лету (на локальном / удаленном сервере нет временных файлов)
  • у вас есть визуальная обратная связь о том, что происходит ( благодаря echo и pv)
  • вы можете устанавливать переменные mysql до и после процесса дампа

Что нужно улучшить: (лучше всего просматривать с помощью nano или другого редактора, который раскрашивает код)

--------------------------------- вырезать здесь ----------------------------------

#!/bin/bash
#set -x

#REQUIRED VARS
SOURCE_USER=root   #MySQL user
SOURCE_HOST=localhost
SOURCE_PASSWORD=yourmysqlpass  #optional
SOURCE_DBNAME=yourdbname
TARGET_HOST=192.168.1.2
TARGET_DBNAME=yourdbname
TARGET_SSHUSER=root
TARGET_SSHPASSWORD=yoursshpass  #optional
TABLES='table1 table2 table3 table4'
TARGET_DIR="/data/dumpfiles"
EXEC_ACTION_TEXT[0]='Reimport TABLES directly into remote MySQL database'
EXEC_ACTION_TEXT[1]='Backup gzipped data to TARGED_DIR on remote TARGET_HOST'
EXEC_ACTION=0

#print config
echo "---------------------------------"
echo " SOURCE_USER:    $SOURCE_USER (MySQL)"
if [ "SOURCE_PASSWORD" != "" ]; then
echo " SOURCE_PASSWORD:<present>        "; else
echo " SOURCE_PASSWORD:<to be asked>    "
fi
echo " SOURCE_HOST:    $SOURCE_HOST     "
echo " SOURCE_DBNAME:  $SOURCE_DBNAME   "
echo " TARGET_HOST:    $TARGET_HOST     "
echo " TARGET_DBNAME:  $TARGET_DBNAME   "
echo " TARGET_SSHUSER: $TARGET_SSHUSER  "
if [ "TARGET_SSHPASSWORD" != "" ]; then
echo " TARGET_SSHPASS: <present>     "; else
echo " TARGET_SSHPASS: <to be asked>    "
fi
echo " TABLES:         $TABLES          "
echo " EXEC_ACTION:    $EXEC_ACTION - ${EXEC_ACTION_TEXT[$EXEC_ACTION]}"
echo " TARGET_DIR:     $TARGET_DIR (only for action 1)"
echo "---------------------------------"
echo "PRESS <ENTER> to continue...";  read;  echo

#read the mysql password from command-line (SOURCE and TARGET uses the same password)
if [ "$SOURCE_PASSWORD" == "" ]; then
     echo -n "Type $SOURCE_USER password for MySQL servers: "; read -s SOURCE_PASSWORD; echo
fi
echo "Creating database $TARGET_DBNAME on $TARGET_HOST if not exists ... "
mysql \
--user=$SOURCE_USER \
--password=$SOURCE_PASSWORD \
--host=$TARGET_HOST \
--execute "create database if not exists $TARGET_DBNAME;"

echo '--------------------------------------------------------------------------------------'
echo "**** ATTENTION ****: execute this command on mysql server at  $TARGET_HOST :"
echo "GRANT ALL PRIVILEGES ON $TARGET_DBNAME.* TO '$SOURCE_USER'@'%' IDENTIFIED BY 'yourpass';"
echo '--------------------------------------------------------------------------------------'
echo "PRESS <ENTER> to continue...";  read;  echo

#read the password from command-line
if [ "$TARGET_SSHPASSWORD" == "" ]; then
     echo -n "Type the password for remote SSH Server (TARGET) ['$TARGET_SSHUSER'@'$TARGET_HOST']: "; read -s TARGET_SSHPASSWORD; echo
fi

for thistable in $TABLES
do
     case "$EXEC_ACTION" in
         0)
         thisaction="gunzip | mysql --user=$SOURCE_USER --password=$SOURCE_PASSWORD -D $TARGET_DBNAME"
         endmessage='remote reimporting has finished'
         ;;
         1)
         thisaction="cat > $TARGET_DIR/`date +%Y.%m.%d`-"$thistable".gz"
         endmessage="$thisaction has finished"
         ;;
         *)   echo "EXEC_ACTION=$EXEC_ACTION not supported" && exit 1
     esac

     echo "---------------------------------------------------------------------"
     echo "-- table $thistable"
     echo "---------------------------------------------------------------------"
     (
       echo -n "-- setting variables... " > /dev/stderr  #talk to user via stderr
       echo "SET AUTOCOMMIT=0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;"
       echo -n "starting mysqldump... " > /dev/stderr
       mysqldump --opt --user=$SOURCE_USER --password=$SOURCE_PASSWORD --host=$SOURCE_HOST $SOURCE_DBNAME $thistable
       echo -n "done mysqldump, reseting variables... " > /dev/stderr
       echo "SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; SET AUTOCOMMIT=1;"
       echo -n "commiting... " > /dev/stderr
       echo "COMMIT;"
       echo "done!" > /dev/stderr
     ) | \
     gzip -c -2 | \
     pv | \
     sshpass -p $TARGET_SSHPASSWORD ssh $TARGET_SSHUSER'@'$TARGET_HOST $thisaction
     echo $endmessage ' with exit status '$?
done
1
ответ дан 28 November 2019 в 19:23

Попробуйте следующее:

mysqldump --all-databases --password=dbpassword | gzip -c | ssh user@servername "cat >/tmp/filename_of_your_choice.gz"

Обратите внимание, что я никоим образом не разбираюсь в этих вещах, я просто объединил 2 варианта в Интернете в один.

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

Однако он требует, чтобы ssh.keys были установлены и приняты, если вы хотите использовать его в скриптах или crontab или подобное.

4
ответ дан 28 November 2019 в 19:23

Теги

Похожие вопросы