Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL शेल का उपयोग करके तार्किक डेटाबेस बैकअप

Mysqldump MySQL के लिए एक लोकप्रिय तार्किक बैकअप उपकरण है जो मूल रूप से इगोर रोमनेंको द्वारा लिखा गया था।

Mysqldump तार्किक बैकअप (SQL कथनों का सेट) करता है। डिफ़ॉल्ट रूप से, mysqldump info_schema तालिकाओं को डंप नहीं करता है और यह कभी भी performance_schema नहीं लेता है। लेकिन mysqldump की सबसे बड़ी कमी यह है कि यह बैकअप और रिस्टोर करते समय केवल एक थ्रेड का उपयोग करता है। (यहां तक ​​कि आपके सर्वर में भी 64 कोर हैं)। इस कमी को दूर करने के लिए, MySQL ने शेल क्लाइंट पर नई उपयोगिताओं की शुरुआत की। इस ब्लॉग में मैं इन नई बैकअप उपयोगिताओं की व्याख्या करने जा रहा हूँ।

MySQL शेल का अवलोकन 

MySQL शेल MySQL सर्वर के लिए एक शक्तिशाली और उन्नत क्लाइंट और कोड संपादक है। MySQL शेल 8.0.21 में लॉजिकल डंप बनाने और उपयोगकर्ताओं सहित संपूर्ण डेटाबेस इंस्टेंस के लिए लॉजिकल रीस्टोर करने के लिए कुछ रोमांचक नई उपयोगिताएं शामिल हैं।

MySQL शेल 8.0.22 में विशिष्ट तालिकाओं और पुनर्स्थापना का तार्किक बैकअप शामिल है।

उपयोगिताएँ 

  • util.dumpInstance() - उपयोगकर्ताओं सहित संपूर्ण डेटाबेस इंस्टेंस को डंप करें
  • util.dumpSchemas() - स्कीमा का एक सेट डंप करें
  • util.loadDump() - एक डंप को लक्ष्य डेटाबेस में लोड करें
  • util.dumpTables() - विशिष्ट तालिकाओं और दृश्यों को लोड करें।

util.dumpInstance()

DumpInstance() उपयोगिता उन सभी डेटाबेस को डंप कर देगी जो MySQL डेटा निर्देशिका में प्रस्तुत किए गए हैं। यह डंप लेते समय info_schema, mysql, ndbinfo, performance_schema, और sys स्कीमा को बाहर कर देगा।

सिंटैक्स 

util.dumpInstance(outputUrl[, options]) 

यह स्थानीय फाइल सिस्टम में डंप हो जाएगा, outputUrl एक स्थानीय निर्देशिका के पथ को निर्दिष्ट करने वाला एक स्ट्रिंग है जहां डंप फ़ाइलों को रखा जाना है। आप वर्तमान कार्यशील निर्देशिका के सापेक्ष पूर्ण पथ या पथ निर्दिष्ट कर सकते हैं।

इस उपयोगिता में, स्कीमा का निरीक्षण करने और संगतता मुद्दों को देखने के लिए एक ड्राई रन विकल्प है, फिर मुद्दों को दूर करने के लिए उपयुक्त संगतता विकल्पों के साथ डंप चलाएं।

विकल्प 

आइए इस डंपयूटिलिटी के लिए कुछ महत्वपूर्ण विकल्पों पर नजर डालते हैं।

Ocimds :[सच | झूठा]

जब यह विकल्प सही पर सेट होता है, तो यह डेटा डिक्शनरी, इंडेक्स डिक्शनरी और क्रिएट टेबल स्टेटमेंट में एन्क्रिप्शन विकल्पों की जांच करेगा, डीडीएल फाइलों में टिप्पणी की गई है, यह सुनिश्चित करने के लिए कि सभी टेबल में स्थित हैं MySQL डेटा निर्देशिका और डिफ़ॉल्ट स्कीमा एन्क्रिप्शन का उपयोग करें।

और यह उपयोगकर्ताओं या भूमिकाओं के लिए अनुपयुक्त विशेषाधिकारों के अनुदान के लिए, और अन्य संगतता मुद्दों के लिए, InnoDB के अलावा CREATE TABLE स्टेटमेंट में किसी भी स्टोरेज इंजन की जाँच करेगा।

यदि कोई गैर-अनुरूपता SQL कथन पाया जाता है, तो एक अपवाद उठाया जाता है और डंप को रोक दिया जाता है।

इसलिए हम डंपिंग प्रक्रिया शुरू होने से पहले डंप में आइटम के साथ सभी मुद्दों को सूचीबद्ध करने के लिए ड्राईरन विकल्प का उपयोग करने का सुझाव दे रहे हैं। डंप आउटपुट में समस्याओं को स्वचालित रूप से ठीक करने के लिए संगतता विकल्प का उपयोग करें।

नोट:इस विकल्प में केवल इंस्टेंस डंप उपयोगिता और स्कीमा डंप उपयोगिता के लिए समर्थन है।

उदाहरण 1 

MySQL  localhost:3306 ssl  cart  JS > util.dumpInstance("/home/vagrant/production_backup", {ocimds: true,compatibility: ["strip_restricted_grants"]})

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

NOTE: Backup lock is not supported in MySQL 5.7 and DDL changes will not be blocked. The dump may fail with an error or not be completely consistent if schema changes are made while dumping.

Global read lock has been released

Checking for compatibility with MySQL Database Service 8.0.22

NOTE: MySQL Server 5.7 detected, please consider upgrading to 8.0 first. You can check for potential upgrade issues using util.checkForServerUpgrade().

NOTE: User 'backupuser'@'localhost' had restricted privileges (RELOAD, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'127.0.0.1' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'::1' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'localhost' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE, PROXY) removed

ERROR: Table 'cart'.'sales' uses unsupported storage engine MyISAM (fix this with 'force_innodb' compatibility option)

Compatibility issues with MySQL Database Service 8.0.22 were found. Please use the 'compatibility' option to apply compatibility adaptations to the dumped DDL.

Util.dumpInstance: Compatibility issues were found (RuntimeError)

तो हमारे पास मेरे कार्ट डेटाबेस में एक myisam तालिका है। ड्राई रन विकल्प स्पष्ट रूप से त्रुटि फेंकता है।

यदि आप अपनी डंप फ़ाइल में इन त्रुटियों को स्वचालित रूप से ठीक करना चाहते हैं, तो अपने आदेश में संगतता विकल्प को तर्क के रूप में पास करें।

उदाहरण 2 

MySQL  localhost:3306 ssl  cart  JS > util.dumpInstance("/home/vagrant/production_backup", {dryRun: true ,ocimds: true,compatibility: ["strip_restricted_grants","force_innodb"]})

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

NOTE: Backup lock is not supported in MySQL 5.7 and DDL changes will not be blocked. The dump may fail with an error or not be completely consistent if schema changes are made while dumping.

Global read lock has been released

Checking for compatibility with MySQL Database Service 8.0.22

NOTE: MySQL Server 5.7 detected, please consider upgrading to 8.0 first. You can check for potential upgrade issues using util.checkForServerUpgrade().

NOTE: User 'backupuser'@'localhost' had restricted privileges (RELOAD, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'127.0.0.1' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'::1' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE) removed

NOTE: User 'root'@'localhost' had restricted privileges (RELOAD, SHUTDOWN, FILE, SUPER, CREATE TABLESPACE, PROXY) removed

NOTE: Table 'cart'.'sales' had unsupported engine MyISAM changed to InnoDB

Compatibility issues with MySQL Database Service 8.0.22 were found and repaired. Please review the changes made before loading them.

Writing global DDL files

Writing users DDL

Writing DDL for schema `cart`

Writing DDL for table `cart`.`salaries`

Writing DDL for table `cart`.`sales`

Writing DDL for table `cart`.`t1`

Preparing data dump for table `cart`.`salaries`

Data dump for table `cart`.`salaries` will be chunked using column `id`

Preparing data dump for table `cart`.`sales`

Data dump for table `cart`.`sales` will be chunked using column `id`

Preparing data dump for table `cart`.`t1`

NOTE: Could not select a column to be used as an index for table `cart`.`t1`. Chunking has been disabled for this table, data will be dumped to a single file.

अब ड्राई रन ठीक है और इसमें कोई अपवाद नहीं है। इंस्टेंस बैकअप लेने के लिए डंप इंस्टेंस कमांड चलाएं।

निर्यात होने से पहले लक्ष्य निर्देशिका खाली होनी चाहिए। यदि निर्देशिका अभी तक अपनी मूल निर्देशिका में मौजूद नहीं है, तो उपयोगिता इसे बनाती है।

उदाहरण 3 

MySQL  localhost:3306 ssl  cart  JS > util.dumpInstance("/home/vagrant/production_backup", {compatibility: ["strip_restricted_grants","force_innodb"],threads : 12})

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

Global read lock has been released

Writing global DDL files

Writing users DDL

Writing DDL for schema `cart`

Writing DDL for view `cart`.`price`

Writing DDL for table `cart`.`dummy`

Writing DDL for table `cart`.`salaries`

Writing DDL for schema `sbtest`

Writing DDL for table `sbtest`.`sbtest1`

Writing DDL for table `sbtest`.`sbtest10`

.

.

.

1 thds dumping - 99% (624.55K rows / ~625.40K rows), 896.15K rows/s, 10.13 MB/s uncompressed, 3.73 MB/s compressed 

Duration: 00:00:00s                                                                                               

Schemas dumped: 2                                                                                                 

Tables dumped: 18                                                                                                 

Uncompressed data size: 7.14 MB                                                                                   

Compressed data size: 2.79 MB                                                                                     

Compression ratio: 2.6                                                                                            

Rows written: 624550                                                                                              

Bytes written: 2.79 MB                                                                                            

Average uncompressed throughput: 7.14 MB/s                                                                        

Average compressed throughput: 2.79 MB/s

ऊपर हमने एक संगतता विकल्प का उपयोग किया है। तो डंप लेते समय, यह myisam टेबल को innodb में बदल देगा और उन्हें फाइल में स्टोर कर देगा।

लॉग्स 

[[email protected] production_backup]$ cat [email protected]

-- MySQLShell dump 1.0.1  Distrib Ver 8.0.22 for Linux on x86_64 - for MySQL 8.0.22 (MySQL Community Server (GPL)), for Linux (x86_64)

--

-- Host: localhost    Database: cart    Table: sales

-- ------------------------------------------------------

-- Server version 5.7.32

--

-- Table structure for table `sales`

--

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE IF NOT EXISTS `sales` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(30) DEFAULT NULL,

  `address` varchar(30) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

यदि आप mysqldump का उपयोग कर रहे हैं, तो यह आउटपुट को एक फ़ाइल में संग्रहीत करेगा। लेकिन यहां यह अधिक फाइलें उत्पन्न करता है जैसा कि हम नीचे बताएंगे।

ये बैकअप निर्देशिका में उपलब्ध फ़ाइलें हैं।

[[email protected] production_backup]$ ls -lrth

total 52K

-rw-r-----. 1 vagrant vagrant  707 Nov  6 02:36 @.json

-rw-r-----. 1 vagrant vagrant  287 Nov  6 02:36 cart.json

-rw-r-----. 1 vagrant vagrant  240 Nov  6 02:36 @.sql

-rw-r-----. 1 vagrant vagrant  240 Nov  6 02:36 @.post.sql

-rw-r-----. 1 vagrant vagrant 2.6K Nov  6 02:36 @.users.sql

-rw-r-----. 1 vagrant vagrant  733 Nov  6 02:36 [email protected]

-rw-r-----. 1 vagrant vagrant  486 Nov  6 02:36 cart.sql

-rw-r-----. 1 vagrant vagrant  575 Nov  6 02:36 [email protected]

-rw-r-----. 1 vagrant vagrant    8 Nov  6 02:36 [email protected]@0.tsv.zst.idx

-rw-r-----. 1 vagrant vagrant    8 Nov  6 02:36 [email protected]@@1.tsv.zst.idx

-rw-r-----. 1 vagrant vagrant   47 Nov  6 02:36 [email protected]@0.tsv.zst

-rw-r-----. 1 vagrant vagrant   24 Nov  6 02:36 [email protected]@@1.tsv.zst

-rw-r-----. 1 vagrant vagrant  252 Nov  6 02:36 @.done.json
  • इस @.json फ़ाइल में सर्वर विवरण और उपयोगकर्ताओं की सूची, डेटाबेस नाम और उनके वर्ण सेट शामिल हैं।
  • इस कार्ट.जेसन फ़ाइल में टेबल की सूची के साथ व्यू, एसपी, फ़ंक्शन नाम शामिल हैं।
  • इस @.sql और @.post.sql फ़ाइलों में MySQL सर्वर संस्करण विवरण हैं।
  • इस @.users.sql फ़ाइल में डेटाबेस उपयोगकर्ताओं की सूची है।
  • इस [email protected] फ़ाइल में तालिका संरचना है।
  • इस कार्ट.एसक्यूएल फ़ाइल में एक डेटाबेस स्टेटमेंट है।
  • इस [email protected] फ़ाइल में कॉलम नाम और वर्ण सेट हैं।
  • [email protected]@0.tsv.zst.idx फ़ाइल एक बाइनरी फ़ाइल है। यह तालिका अनुक्रमणिका आँकड़े संग्रहीत करता है।
  • उदाहरण@[email protected] फ़ाइल एक बाइनरी फ़ाइल है और यह डेटा संग्रहीत करती है।
  • इस @.done.json फ़ाइल में बैकअप समाप्ति समय और डेटा फ़ाइलों का आकार KB में है।

util.dumpSchemas()

यह उन विशिष्ट स्कीमाओं को डंप कर देगा जिनका आप इस उपयोगिता के लिए तर्कों में उल्लेख करते हैं।

सिंटैक्स 

​util.dumpSchemas(schemas, outputUrl[, options])

उदाहरण 

MySQL  localhost:3306 ssl  cart  JS > util.dumpSchemas(["cart"], "/home/vagrant/production_backup",{compatibility: ["strip_restricted_grants","force_innodb"],threads :12})

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

NOTE: Backup lock is not supported in MySQL 5.7 and DDL changes will not be blocked. The dump may fail with an error or not be completely consistent if schema changes are made while dumping.

Global read lock has been released

Writing global DDL files

Writing DDL for table `cart`.`price_tag`

Writing DDL for schema `cart`

Writing DDL for table `cart`.`salaries`

Writing DDL for table `cart`.`sales`

NOTE: Table 'cart'.'sales' had unsupported engine MyISAM changed to InnoDB

Preparing data dump for table `cart`.`price_tag`

Data dump for table `cart`.`price_tag` will be chunked using column `id`

Data dump for table `cart`.`price_tag` will be written to 1 file

Preparing data dump for table `cart`.`salaries`

Data dump for table `cart`.`salaries` will be chunked using column `id`

Data dump for table `cart`.`salaries` will be written to 2 files

Preparing data dump for table `cart`.`sales`

Data dump for table `cart`.`sales` will be chunked using column `id`

Running data dump using 12 threads.

NOTE: Progress information uses estimated values and may not be accurate.

Data dump for table `cart`.`sales` will be written to 1 file                                               

1 thds dumping - 150% (3 rows / ~2 rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed          

Duration: 00:00:00s                                                                              

Schemas dumped: 1                                                                                

Tables dumped: 3                                                                                 

Uncompressed data size: 53 bytes                                                                 

Compressed data size: 0 bytes                                                                    

Compression ratio: 53.0                                                                          

Rows written: 3                                                                                  

Bytes written: 0 bytes                                                                           

Average uncompressed throughput: 53.00 B/s                                                       

Average compressed throughput: 0.00 B/s                

util.dumpTables 

यदि आप विशिष्ट तालिकाओं को डंप करना चाहते हैं तो हम डंपटेबल्स उपयोगिता का उपयोग कर सकते हैं।

बड़ी तालिकाओं के लिए, mysqldump अधिक समय लेगा। समय कम करने के लिए डंपटेबल्स उपयोगिता का उपयोग करें।

सिंटैक्स 

util.dumpTables(schema, tables, outputUrl[, options])

उदाहरण 

util.dumpTables("sbtest", [ "sbtest14", "sbtest16" ], "/home/vagrant/specific_table",{dryRun: true})

​ MySQL  localhost:33060+ ssl  sbtest  JS > util.dumpTables("sbtest", [ "sbtest14", "sbtest16" ], "/home/vagrant/specific_table",{threads: 12})

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

Global read lock has been released

Writing global DDL files

Writing DDL for table `sbtest`.`sbtest16`

Writing DDL for table `sbtest`.`sbtest14`

Preparing data dump for table `sbtest`.`sbtest16`

Data dump for table `sbtest`.`sbtest16` will be chunked using column `id`

Preparing data dump for table `sbtest`.`sbtest14`

Data dump for table `sbtest`.`sbtest14` will be chunked using column `id`

Running data dump using 12 threads.

NOTE: Progress information uses estimated values and may not be accurate.

Data dump for table `sbtest`.`sbtest16` will be written to 1 file

Data dump for table `sbtest`.`sbtest14` will be written to 1 file

1 thds dumping - 99% (78.07K rows / ~78.08K rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed

Duration: 00:00:00s                                                                                       

Schemas dumped: 1                                                                                         

Tables dumped: 2                                                                                          

Uncompressed data size: 892.39 KB                                                                         

Compressed data size: 348.91 KB                                                                           

Compression ratio: 2.6                                                                                    

Rows written: 78068                                                                                       

Bytes written: 348.91 KB                                                                                  

Average uncompressed throughput: 892.39 KB/s                                                              

Average compressed throughput: 348.91 KB/s 

डंप लोडिंग यूटिलिटी 

डंप लोडिंग यूटिलिटी रिमोट स्टोरेज को डेटा स्ट्रीमिंग, टेबल या टेबल चंक्स के समानांतर लोडिंग, प्रोग्रेस स्टेट ट्रैकिंग, रिज्यूम और रीसेट क्षमता, और डंपिंग के दौरान समवर्ती लोडिंग का विकल्प प्रदान करती है।

नोट:डंप लोडिंग उपयोगिता LOAD DATA LOCAL INFILE स्टेटमेंट का उपयोग करती है, इसलिए हमें आयात करते समय इस local_infile पैरामीटर को वैश्विक स्तर पर सक्षम करने की आवश्यकता है।

डंप लोडिंग उपयोगिता यह जांचती है कि sql_require_primary_key सिस्टम वैरिएबल ON पर सेट है या नहीं, और अगर है, तो बिना प्राइमरी की के डंप फाइल में टेबल होने पर एक एरर लौटाता है।

सिंटैक्स 

util.loadDump(url[, options])

उदाहरण 

MySQL  localhost:3306 ssl  sbtest  JS > util.loadDump("/home/vagrant/specific_table", {progressFile :"/home/vagrant/specific_table/log.json",threads :12})

Loading DDL and Data from '/home/vagrant/specific_table' using 12 threads.

Opening dump...

Target is MySQL 8.0.22. Dump was produced from MySQL 8.0.22

Checking for pre-existing objects...

Executing common preamble SQL

[Worker006] Executing DDL script for `sbtest`.`sbtest1`

[Worker004] Executing DDL script for `sbtest`.`sbtest12`

2 thds loading \ 100% (892.39 KB / 892.39 KB), 0.00 B/s, 0 / 2 tables done[Worker001] [email protected]@@0.tsv.zst: Records: 39034  Deleted: 0  Skipped: 0  Warnings: 0

[Worker005] [email protected]@@0.tsv.zst: Records: 39034  Deleted: 0  Skipped: 0  Warnings: 0

Executing common postamble SQL                                                                                                   

2 chunks (78.07K rows, 892.39 KB) for 2 tables in 1 schemas were loaded in 1 sec (avg throughput 892.39 KB/s)

0 warnings were reported during the load.

डिफ़ॉल्ट रूप से, किसी तालिका के लिए पूर्ण पाठ अनुक्रमणिका तालिका के पूरी तरह से लोड होने के बाद ही बनाई जाती है, जो आयात को गति देती है।

आप आयात के दौरान अनुक्रमणिका निर्माण को अक्षम करना और बाद में अनुक्रमणिका बनाना भी चुन सकते हैं।

डंप लोडिंग उपयोगिता समानांतरवाद को अधिकतम करने के लिए कई थ्रेड्स में आयात करती है। यदि डंप फ़ाइलों को MySQL शेल की डंप उपयोगिताओं द्वारा संपीड़ित किया गया था, तो डंप लोडिंग उपयोगिता डीकंप्रेसन को संभालती है।

आप आयात करने या आयात से बाहर करने के लिए अलग-अलग टेबल या स्कीमा चुन सकते हैं।

आप SET sql_log_bin=0 स्टेटमेंट का उपयोग करके आयात के दौरान लक्ष्य MySQL इंस्टेंस पर बाइनरी लॉगिंग को छोड़ना चुन सकते हैं।

निष्कर्ष

यह MySQL 8.0 में शक्तिशाली उपयोगिताओं में से एक है। अब MySQL 5.6 से डंप करना और इन डंपों को MySQL 5.7 या 8.0 में लोड करना संभव है। लेकिन MySQL 5.6 से डंप करते समय उपयोगकर्ता खातों की डंपिंग समर्थित नहीं है। अपने अगले ब्लॉग में, हम MySQLdump और शेल उपयोगिता की बैकअप/पुनर्स्थापन गति की तुलना करेंगे।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATE_SUB () उदाहरण – MySQL

  2. मैं MySQL में एक विदेशी कुंजी बाधा को अस्थायी रूप से कैसे अक्षम कर सकता हूं?

  3. MySQL डेटाबेस प्रदर्शन देने के लिए युक्तियाँ - भाग दो

  4. MySQL में मासिक सक्रिय उपयोगकर्ताओं (MAU) की गणना कैसे करें

  5. MySQL को ORDER BY में पंक्ति स्थिति मिलती है