Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Backup Database Logis Menggunakan MySQL Shell

Mysqldump adalah alat pencadangan logis populer untuk MySQL yang aslinya ditulis oleh Igor Romanenko.

Mysqldump melakukan pencadangan logis (set pernyataan SQL). Secara default, mysqldump tidak membuang tabel information_schema dan tidak pernah membutuhkan performance_schema. Tetapi kelemahan utama dari mysqldump adalah ia hanya menggunakan satu utas saat melakukan pencadangan dan pemulihan. (Bahkan server Anda memiliki 64 core). Untuk mengatasi kelemahan ini, MySQL memperkenalkan utilitas baru pada klien Shell. Di blog ini saya akan menjelaskan utilitas cadangan baru ini.

Ikhtisar MySQL Shell 

Shell MySQL adalah klien dan editor kode yang kuat dan canggih untuk server MySQL. MySQL shell 8.0.21 menyertakan beberapa utilitas baru yang menarik untuk membuat dump logis dan melakukan pemulihan logis untuk seluruh instance database, termasuk pengguna.

MySQL shell 8.0.22 menyertakan pencadangan logis dari tabel dan pemulihan tertentu.

Utilitas 

  • util.dumpInstance() - Buang seluruh instance database, termasuk pengguna
  • util.dumpSchemas() - Buang sekumpulan skema
  • util.loadDump() - Memuat dump ke database target
  • util.dumpTables() - Memuat tabel dan tampilan tertentu.

util.dumpInstance()

Utilitas dumpInstance() akan membuang semua database yang disajikan di direktori data MySQL. Ini akan mengecualikan  information_schema, mysql, ndbinfo, performance_schema, dan skema sistem saat mengambil dump.

Sintaks 

util.dumpInstance(outputUrl[, options]) 

Ini akan dibuang ke sistem file lokal, outputUrl adalah string yang menentukan jalur ke direktori lokal tempat file dump akan ditempatkan. Anda dapat menentukan jalur absolut atau jalur relatif terhadap direktori kerja saat ini.

Dalam utilitas ini, ada opsi menjalankan kering untuk memeriksa skema dan melihat masalah kompatibilitas, kemudian menjalankan dump dengan opsi kompatibilitas yang sesuai diterapkan untuk menghapus masalah.

Opsi 

Mari kita lihat beberapa opsi penting untuk dumputilitas ini.

ocimds :[Benar | Salah]

Ketika opsi ini disetel ke true, Ini akan memeriksa kamus data, kamus indeks, dan opsi enkripsi dalam pernyataan CREATE TABLE dikomentari dalam file DDL, untuk memastikan bahwa semua tabel berada di Direktori data MySQL dan menggunakan enkripsi skema default.

Dan itu akan memeriksa mesin penyimpanan apa pun dalam pernyataan CREATE TABLE selain InnoDB, untuk pemberian hak istimewa yang tidak sesuai untuk pengguna atau peran, dan untuk masalah kompatibilitas lainnya.

Jika ditemukan pernyataan SQL yang tidak sesuai, pengecualian akan muncul dan dump dihentikan.

Jadi kami menyarankan untuk menggunakan opsi dryRun untuk membuat daftar semua masalah dengan item di dump sebelum proses dumping dimulai. Gunakan opsi kompatibilitas untuk memperbaiki masalah di keluaran dump secara otomatis.

Catatan:Opsi ini hanya memiliki dukungan untuk utilitas dump Instance dan utilitas dump skema.

Contoh 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)

Jadi kami memiliki tabel myisam di database keranjang saya. Opsi dry run jelas menimbulkan kesalahan.

Jika Anda ingin memperbaiki kesalahan ini secara otomatis di file dump Anda, berikan opsi kompatibilitas sebagai argumen dalam perintah Anda.

Contoh 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.

Sekarang dry run baik-baik saja dan tidak ada pengecualian. Mari kita jalankan perintah dump instance untuk mengambil cadangan instance.

Direktori target harus kosong sebelum ekspor dilakukan. Jika direktori belum ada di direktori induknya, utilitas akan membuatnya.

Contoh 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

Di atas kami telah menggunakan opsi kompatibilitas. Jadi saat mengambil dump, itu akan mengubah tabel myisam menjadi innodb dan menyimpannya ke file.

Log 

[[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 */;

Jika Anda menggunakan mysqldump, itu akan menyimpan output ke dalam satu file. Tapi di sini ia menghasilkan lebih banyak file seperti yang akan kami jelaskan di bawah.

Ini adalah file yang tersedia di direktori cadangan.

[[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
  • File @.json ini berisi detail server dan daftar pengguna, nama database, dan rangkaian karakternya.
  • File cart.json ini berisi tampilan, SP, nama fungsi beserta daftar tabelnya.
  • File @.sql dan @.post.sql ini berisi detail versi server MySQL.
  • File @.users.sql ini berisi daftar pengguna database.
  • File [email protected] ini berisi struktur tabel.
  • File  cart.sql ini berisi pernyataan database.
  • File [email protected] ini berisi nama kolom dan set karakter.
  • File [email protected]@0.tsv.zst.idx adalah file biner. Ini menyimpan statistik indeks tabel.
  • File  [email protected]@0.tsv.zst adalah file biner dan menyimpan data.
  • File @.done.json ini berisi waktu akhir pencadangan dan ukuran file data dalam KB.

util.dumpSchemas()

Ini akan membuang skema spesifik yang Anda sebutkan dalam argumen untuk utilitas ini.

Sintaks 

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

Contoh 

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 

Jika Anda ingin membuang tabel tertentu, kami dapat menggunakan utilitas dumpTables.

Untuk tabel yang lebih besar, mysqldump akan memakan waktu lebih lama. Gunakan utilitas dumpTables untuk mengurangi waktu.

Sintaks 

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

Contoh 

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 

Utilitas Pemuatan Dump 

Utilitas pemuatan dump menyediakan streaming data ke penyimpanan jarak jauh, pemuatan tabel atau potongan tabel secara paralel, pelacakan status kemajuan, kemampuan melanjutkan dan menyetel ulang, dan opsi pemuatan bersamaan saat dump masih berlangsung.

Catatan:Utilitas pemuatan dump menggunakan pernyataan LOAD DATA LOCAL INFILE, jadi kita perlu mengaktifkan parameter local_infile ini secara global saat mengimpor.

Utilitas pemuatan dump memeriksa apakah variabel sistem sql_require_primary_key diatur ke AKTIF, dan jika ya, mengembalikan kesalahan jika ada tabel di file dump tanpa kunci utama.

Sintaks 

util.loadDump(url[, options])

Contoh 

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.

Secara default, indeks teks lengkap untuk tabel dibuat hanya setelah tabel dimuat sepenuhnya, yang mempercepat impor.

Anda juga dapat memilih untuk menonaktifkan pembuatan indeks selama impor, dan membuat indeks setelahnya.

Utilitas pemuatan dump mengimpor di beberapa utas untuk memaksimalkan paralelisme. Jika file dump dikompresi oleh utilitas dump MySQL Shell, utilitas dump loading menangani dekompresi.

Anda dapat memilih tabel atau skema individual untuk diimpor atau dikecualikan dari impor.

Anda dapat memilih untuk melewati pencatatan log biner pada instans MySQL target selama proses impor menggunakan pernyataan SET sql_log_bin=0.

Kesimpulan

Ini adalah salah satu utilitas yang kuat di MySQL 8.0. Sekarang dimungkinkan untuk membuang dari MySQL 5.6 dan memuat dump ini ke MySQL 5.7 atau 8.0. Tetapi pembuangan akun pengguna tidak didukung saat membuang dari MySQL 5.6. Di blog saya berikutnya, kita akan membandingkan kecepatan pencadangan/pemulihan MySQLdump dan utilitas shell.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hasilkan urutan integer di MySQL

  2. Bisakah saya menggabungkan beberapa baris MySQL menjadi satu bidang?

  3. Di MySQL, haruskah saya mengutip angka atau tidak?

  4. (mysql, php) Bagaimana cara mendapatkan nilai bidang auto_increment sebelum memasukkan data?

  5. Basis data kode pin india dengan skrip pencari lokasi di php dan jquery