প্রশ্ন একটি tar.gz থেকে mysqldump


সাধারণত সঙ্গে একটি MySQL ডাটাবেস ডাম্পিং পরে mysqldump কমান্ড আমি অবিলম্বে tar / ফলাফল ফলাফল gzip। আমি এক কমান্ডে এটি করার জন্য একটি উপায় খুঁজছি:

তাই এই থেকে:

mysqldump dbname -u root -p > dbname.sql
tar czvf dbname.sql.tgz dbname.sql
rm dbname.sql

এরকম কিছু করার জন্য:

mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz

অথবা আরও ভাল (যেহেতু আমি সাধারণত অন্য সার্ভারে ডাম্প ফাইলটি স্ক্যান করছি):

mysqldump dbname -u root -p > send dbname.sql.tgz to user@host

আমি ডেবিয়ান উপর bash চলমান করছি।


80
2018-01-26 23:15


উত্স




উত্তর:


mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'

আপনি এটির মতো পাইপে টার ব্যবহার করতে পারবেন না এবং আপনি এটির কোনও প্রয়োজন নেই, কারণ আপনি কেবল একটি ফাইলকে আউটপুট করছেন। আপনি যদি একাধিক ফাইল থাকে তবে tar শুধুমাত্র দরকারী।


98
2018-01-26 23:24



আপনি tar প্রয়োজন না ঠিক আছে, কিন্তু যদি আপনি এটি দিয়ে পাইপলাইনে এটি ব্যবহার করতে পারে mysqldump | tar cf - | gzip -c | ssh ... 'cat > file.tgz' - Darren Chamberlain
আসলে যে কাজ করে? আমি চমত্কার নিশ্চিত tar উপর কাজ করার ফাইল তালিকা একটি তালিকা প্রয়োজন। - James
আমি স্থানীয়ভাবে কাজ করতে এটি আপডেট করেছি (রিমোট এসএসএস সার্ভারে নয়) ওহ, আমি তারিখ অনুসারে একটি গতিশীল নাম ব্যবহার করি, আসল পোস্টার এবং উত্তর দেওয়ার জন্য ধন্যবাদ! mysqldump --opt <database> | gzip -c | cat > $(date +%Y-%m-%d-%H.%M.%S).sql.gz - electblake
@Electblake: এটি স্থানীয় হলে 'বিড়াল' ব্যবহার করার প্রয়োজন নেই। মাত্র gzip -c > $(date +%Y-%m-%d-%H.%M.%S).sql.gz - James
শুধু মজার জন্য, আপনি ব্যবহার করতে পারেন netcat পরিবর্তে ssh পাইপিং। আপনি ssh এর এনক্রিপশন ওভারহেডে একটু বাঁচাতে পারেন, যদি এটি একটি নিরাপদ নেটওয়ার্কে স্থানান্তরিত হয় (অথবা আপনি নিরাপত্তা সম্পর্কে কোনও যত্ন নেন না)। আজকাল আপনি ব্যবহার বিবেচনা করতে পারে xz পরিবর্তে gzip। - James


যদি আপনি এই স্থানীয়ভাবে চলমান থাকেন তবে আপনার ডাটাবেস ব্যাকআপ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন এবং gzip ব্যবহার করে এটি জিপ করুন:

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

(সম্পাদনা: নির্দিষ্ট-সি কী)


37
2018-02-29 10:28



হ্যাঁ, এটি সবচেয়ে সহজ সমাধান। আমি খুব এটি ব্যবহার। - Roman Snitko
সহজ এবং ব্যবহার সহজ! ধন্যবাদ! - SPRBRN
এটা সম্ভবত হতে হবে gzip -cঠিক আছে? - pilsetnieks
চমৎকার ... কিন্তু কিভাবে আমি এই কমান্ডে stderr পুনঃনির্দেশিত করবেন? যদি আমি 2> / dev / null যুক্ত করি তবে এটি আর কাজ করবে না। এবং 2> / dev / null পাইপের আগে কাজ করে না। - Nelson Teixeira
mysqldump -u ব্যবহারকারী নাম-প (পাসওয়ার্ডপ্রমাণ) আপনার ডেটাবেসনাম 2> / var / log / dump-errors | gzip -v> output.gz - undefine


একটি নামযুক্ত পাইপ ব্যবহার করুন।

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

আমি সব সময় এটি ব্যবহার, এটি একটি দুর্দান্ত।

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


18
2018-02-03 17:27



জেমস 1 লাইন একই জিনিস আছে। - Jon Haddad
.. কিন্তু নামযুক্ত পাইপ সম্পর্কে শেখার এটা মূল্য :-) - Tomasz Zieliński
mkfifo mysql_pipe; gzip -9 -c < mysql_pipe > name_of_dump.gz &; mysqldump database > mysql_pipe; rm mysql_pipe সেখানে, একটি লাইন। অবশ্যই আমি পাইপ চারপাশে রাখা এবং এটি প্রতি সময় ব্যবহার করা হবে। - d34dh0r53


আমি একটি দূরবর্তী MySQL ডাটাবেস নিচে স্তন্যপান একটি দ্রুত স্ক্রিপ্ট লিখেছেন। এটা mysql কম্প্রেশন, gzip এবং ssh কম্প্রেশন ব্যবহার করে। একটি অবিশ্বাস্য হারে একটি মাল্টি জিবি ডাটাবেস নিচে sucked।

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

একটি সাইড বেনিফিট এটি সোর্স ডাটাবেস সার্ভারে কোনও মুক্ত স্থান প্রয়োজন হয় না, তাই আপনি এটির ডেটা ছিনতাইয়ের আগে যাওয়ার আগে শূন্য ফ্রি ডিস্ক স্পেসের সাথে একটি সার্ভারে একটি ডেটাবেস ব্যাকআপ করতে ব্যবহার করতে পারেন।

এটা কারো সাহায্য করে আশা করি।


15
2018-06-18 15:52



আমি একটি সহজ শেল স্ক্রিপ্ট তৈরি করেছি: #! / Bin / bash যদি [-z "$ 1"]; তারপর echo "ব্যবহার: $ {0} [হোস্ট] [ব্যবহারকারী] [ডাটাবেস] [outputfile]" অন্যথায় প্রস্থান করুন HOST = $ 1 ফাই যদি [-z "$ 2"]; তারপর echo "ব্যবহার: $ {0} $ {1} [ব্যবহারকারী] [ডাটাবেস] [আউটপুটফাইল]" অন্যথায় প্রস্থান করুন USER = $ 2 ফাই যদি [-z "$ 3"]; তারপর echo "ব্যবহার: $ {0} $ {1} $ {2} [ডাটাবেস] [আউটপুটফাইল]" অন্যথায় প্রস্থান করুন ডিবি = $ 3 ফাই যদি [-z "$ 4"]; তারপর OUTFILE = "$ {DB} .sql.gz" অন্যথায় আউটফিল = $ 4 ফাই COMMAND = "ssh -C $ {USER} @ $ {HOST} \" mysqldump - OPT $ {DB} | gzip-9 -c \ "> $ {OUTFILE}" ssh -C $ {USER} @ $ {HOST} "mysqldump - OPT $ {DB} | gzip -9 -c"> $ {OUTFILE} - Tony Dillon
ঐ দুটি কম্প্রেশনগুলি নিরর্থক: mysqldump এর বিকল্পটি সার্ভার প্রক্রিয়াতে ডেটা সংকুচিত করে এবং অবিলম্বে আবার ডcomcompresses (যদি MySQLDump নিজে DB সার্ভারে চালিত হয়)। সি-সি বিকল্পটি sz সক্রিয় করে gzip কম্প্রেশন যা আরও CPU- চক্রগুলি নষ্ট করবে কারণ ডেটা ইতিমধ্যে ইতিমধ্যে জিজিপি করা হয়েছে। - MattW.


ব্যবহার pv এবং মনিটর রেট!

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

অথবা, যদি আপনি আকার (3GB) জানেন তবে একটি সঠিক অনুমান পান:

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

5
2017-08-20 23:08





এটা চেষ্টা কর:

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

আমি এই জিনিস ভাল কোন উপায়ে না দয়া করে, আমি শুধু ওয়েবে দুটি বিকল্প একত্রিত।

এটি অন্য কোন উপায়ে ভাল হতে পারে তবে এটি একটি এক-মাছ ধরার নৌকা যা আমার জন্য কাজ করে।

এটা প্রয়োজন তবে ssh.keys আপনি স্ক্রিপ্ট বা এটি ব্যবহার করতে চান যদি ইনস্টল করা এবং গ্রহণ করা crontab অথবা একইভাবে।


3
2018-04-15 21:08



ServerFault স্বাগতম। এটা আমার পুরোপুরি যুক্তিসঙ্গত দেখায়। - chicks


আপনি পছন্দ করতে পারেন:

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
2018-03-10 08:45





আমি এই কাজ করছি bash স্ক্রিপ্ট এটি dsump / mysql সঙ্গে পুনঃস্থাপন আসে যখন আমি দেখেছি সব ভাল উপদেশ একসঙ্গে করা চেষ্টা করে নিচে। এটা দূরবর্তী অপারেশন লক্ষ্য করা হয়।

শুধু vars reconfig এবং এটি একটি চেষ্টা দিতে। :)

বৈশিষ্ট্যগুলি হল:

  • আপনি ডাম্প (নির্বাচনী ডাম্প) টেবিল একটি তালিকা পাস করতে পারেন
  • আপনি পাসওয়ার্ড (মাইএসকিউএল / এসএসএইচ) জন্য প্রম্পট বা পরিবর্তনশীল তাদের সেট করা যেতে পারে
  • নেটওয়ার্ক ট্রান্সমিশন gzipped হয়
  • আপনি রিমোট সার্ভারে gzipped ডাম্প সংরক্ষণ করতে পারেন
  • আপনি দূরবর্তী সার্ভারে দূরবর্তী সার্ভারে ডাম্প পুনর্বিবেচনা করতে পারেন (স্থানীয় / দূরবর্তী সার্ভারে কোন টেম্প ফাইল নেই)
  • আপনি কি ঘটছে এর চাক্ষুষ মতামত আছে (প্রতিধ্বনি এবং পিভি ধন্যবাদ)
  • আপনি ডাম্প প্রক্রিয়া আগে এবং পরে mysql ভেরিয়েবল সেট করতে পারেন

কি উন্নতি প্রয়োজন: 

  • আপনি টেবিলের একটি তালিকা পাস করতে হবে (সমস্ত টেবিল খোঁড়া যাবে না)
  • MySQL পাসওয়ার্ড উৎস এবং লক্ষ্যের জন্য একই
  • আপনি ম্যানুয়ালি ব্যক্তিগত অনুমোদন করতে হবে (মাইএসকিউএল মত মনে হচ্ছে এটি দূরবর্তী করতে না)
  • আপনি sshpass ইনস্টল করা প্রয়োজন
  • কিছু নিরবধি বিশাল সংকোচিত টেবিল ডাম্প ধীর হয় (mysqldump এর দোষ হতে পারে)

আমি এখানে এই স্ক্রিপ্ট শেয়ার আশা করি এটি সম্প্রদায় দ্বারা উন্নত করা যেতে পারে। (কোডটি রঙ করে এমন ন্যানো বা অন্যান্য সম্পাদকের সাথে সেরা দেখা যায়)

--------------------------------- এখানে কাটো --------------- -------------------

#!/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
2018-04-03 01:33