Apakah perintah mysqldump juga akan mencadangkan semua tampilan yang ada dalam DB atau ada perintah khusus untuk itu?

10

Saya mencoba mem-backup seluruh database saya bersama dengan pandangan. Saya akan menggunakan mysqldumpperintah. Saya bertanya-tanya apakah itu akan menyalin semua tampilan atau saya harus menggunakan perintah terpisah untuk itu.

Tolong sarankan saya jawaban. Setiap bantuan sangat dihargai.

vinny
sumber

Jawaban:

9

Tidak ada opsi khusus untuk membuang tampilan.

Anda dapat mencoba yang berikut ini:

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

Anda harus dapat melihat tampilan. Ini menunjukkan bahwa ketika Anda membuang basis data, tampilan akan menyertainya.

Aksi lain yang dapat Anda coba, hanya untuk mendapatkan tampilan saja, adalah ini:

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

Cobalah !!!

RolandoMySQLDBA
sumber
Terima kasih banyak atas jawaban yang jelas. Masalahnya adalah, basis data saya sangat besar sehingga saya berencana untuk menyalin satu per satu. Dalam semua kekacauan ini saya juga perlu menyalin 'pandangan' jadi saya tidak bisa menggunakan perintah --all-database. Tolong sarankan cara untuk menyalin pandangan dari Mysql DB Server.
vinny
Jadi, alih-alih menggunakan --all-databases, tentukan database yang Anda inginkan.
Derek Downey
1

Jawaban terbaik untuk ini mungkin yang satu ini oleh olliiiver yang saya sedikit modifikasi. Itu secara khusus mengekspor permintaan tabel drop dan membuat atau mengganti permintaan tampilan untuk setiap tampilan dalam sistem, tanpa perlu dipusingkan dengan tabel apa pun. Kueri drop table sering penting, karena mysqldump tampaknya suka membuat ulang tampilan sebagai tabel kecuali Anda memasukkan setiap tampilan dalam parameter --ignore-table sendiri, yang akan mengganggu. Ini menggunakan INFORMATION_SCHEMA.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

Jika Anda ingin mengubah sesuatu seperti ini menjadi skrip shell, saya juga merekomendasikan menggunakan parameter --defaults-extra-file = CREDSFILENAME, sehingga Anda tidak perlu menentukan pengguna / pass dalam skrip.

File kredensial terlihat seperti ini:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
sumber