Pemulihan Mysqldump. Kami membuang pangkalan data MySQL dan mengeksport data ke konsol. Memampatkan Fail Dump MySQL

Membuat dump pangkalan data (backup) adalah sangat penting. Jadi saya membuat beberapa komen dengan contoh untuk ini utiliti yang sangat baik seperti mysqldump.

mysqldump - utiliti yang membolehkan anda membuang kandungan pangkalan data atau set pangkalan data untuk dibuat salinan sandaran atau menghantar data ke pelayan pangkalan data SQL yang lain (tidak semestinya pelayan MySQL). Longgokan akan mengandungi satu set perintah SQL untuk mencipta dan/atau mengisi jadual.

mysqldump-u root -p -f name_database >

Dengan pasukan ini kita lakukan sandaran pangkalan data data di bawah nama name_database untuk memacu C dalam fail mydb_backup_name_database.txt

Anda tidak perlu mencipta fail; MySQL akan menciptanya sendiri.

mysql-u root -p -f name_database< C:\mydb_backup_name_database.txt

Dengan arahan ini kami mengimport data sandaran daripada fail C:\mydb_backup_name_database.txt

Nota: -f, --force ialah pilihan yang menentukan untuk meneruskan walaupun ralat SQL diterima, i.e. abaikan ralat. Contohnya, jika baris yang sama sudah wujud dalam jadual.

Untuk mengelak daripada meminta kata laluan, anda perlu menulisnya sejurus selepas -p, iaitu, tanpa ruang. Jika kata laluan Pwd, maka contoh akan kelihatan seperti ini:

mysqldump-u akar -p Pwd-f name_database > C:\mydb_backup_name_database.txt

Jika anda sering menggunakan perintah ini, maka lebih baik dilakukan pengguna individu Dengan hak yang diperlukan, untuk menjadikan kata laluan akar kurang kelihatan

Mari kita pertimbangkan lebih lanjut tetapan yang baik mysqldump:

--pangkalan data membenarkan mysqldump untuk memasukkan CREATE DATABASE /*!33333 JIKA TIDAK WUJUD*/ DBNAME dan GUNAKAN arahan DBNAME dalam skrip pemulihan. Ini akan membolehkan anda membuat pangkalan data yang berfungsi dari awal. Iaitu, tanpa menggunakan --databases, diandaikan bahawa pengguna memulihkan pangkalan data tunggal dan secara eksplisit menyatakan di mana data yang dipulihkan harus diletakkan. Jika sandaran dibuat dengan matlamat untuk membuat salinan data yang berfungsi sepenuhnya, sebagai contoh, pada pelayan MySQL yang lain, maka anda perlu menggunakan kunci ini;

--semua-pangkalan data membolehkan anda membuat salinan semua pangkalan data yang wujud pada pelayan MySQL tertentu. Jika anda perlu membuat salinan hanya beberapa pangkalan data, anda hanya perlu menentukannya dipisahkan oleh ruang apabila memanggil mysqldump daripada baris arahan (lihat di atas);

kunci --membantu. Program mysqldump mempunyai banyak versi. Anda boleh melihat ciri yang disokong secara khusus oleh versi anda menggunakan kekunci ini;

--add-drop-table- suis yang akan memaksa mysqldump menambah arahan jadual jatuh pada skrip yang dihasilkan sebelum membuat jadual. Ini akan membolehkan anda mengelakkan beberapa ralat semasa memulihkan pangkalan data daripada sandaran. Sudah tentu, anda perlu mengambil kira bahawa jadual yang terletak dalam salinan kerja (jika jadual dengan nama yang sama wujud dalam sandaran) akan dipadamkan daripada pangkalan data utama dan dicipta semula daripada sandaran sebelum memulihkan daripada sandaran;

--tiada data. Menggunakan kunci ini, anda boleh membuat salinan struktur jadual/pangkalan data dengan cepat tanpa data itu sendiri. Sebagai contoh, anda telah mencipta jadual yang kompleks dan ingin menyimpan strukturnya untuk masa hadapan, tetapi anda tidak memerlukan data itu sendiri yang terdapat dalam jadual ini dalam salinan sandaran;

--fail-hasil=...- suis ini boleh digunakan untuk mengubah hala output ke fail. Anda boleh menggunakan ubah hala Unix biasa dengan arahan ">", atau anda boleh menggunakan kekunci ini. Siapa suka apa;

Lain sangat nasihat yang berguna menggunakan mysqldump dalam persekitaran pengehosan. Sebagai peraturan, apabila menggunakan pengehosan, beberapa sekatan dikenakan ke atas pengguna. Sebagai contoh, anda tidak boleh meminjam lebih daripada jumlah tertentu ingatan fizikal(RAM, RAM). mysqldump secara lalai meletakkan semua data yang diterima daripada pelayan MySQL ke dalam memori, dan kemudian menulis semuanya ke cakera. Oleh itu, jika pembekal membenarkan anda meminjam, sebagai contoh, 30 MB memori, dan pangkalan data, yang anda salin menggunakan mysqldump, menduduki 50 MB, sudah tentu, ralat akan timbul di sini - mysqldump tidak akan dapat berfungsi dengan betul dan akan ranap, yang akan dimaklumkan kepada anda. Untuk "memaksa" mysqldump menulis data terus ke cakera, dan bukannya menyimpannya, walaupun buat sementara waktu, dalam ingatan, gunakan kekunci --cepat. Ini akan menyelesaikan masalah.

Berikut ialah beberapa contoh yang lebih berguna:

mysqldump -u root -p Pwd-f --default-character-set=cp1251 DBNAME| gzip -c > nama fail.txt .gz

Anda boleh membongkar arkib sedemikian dengan arahan:

gunzip nama fail.txt.gz

Untuk mengetahui tarikh sandaran dibuat, anda boleh menulis arahan berikut:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `tarikh "+%Y-%m-%d"`.gz

dan jika anda perlu membuat pembuangan dengan pengekodan yang berbeza, maka adalah mudah untuk menggunakan pembolehubah:

ditetapkan DBCHARACTER= utf8

ditetapkan DBNAME= pelanggaran

mysqldump -u root -p Pwd-f --default-character-set=$ DBCHARACTER $DBNAME| bzip2 -c > sql. $DBNAME.`tarikh "+%Y-%m-%d"`.bz2

Jika anda ingin mengautomasikan pengalihan keluar arkib lama, cuba gunakan cron dan cari arahan, yang biasanya terdapat dalam unix. Berjalan secara berkala

cari~/directory-with-archives -name "*.gz" -mtime +7 -exec rm -f () \;

Oleh itu, anda akan memadamkan arkib yang "lebih tua" daripada tujuh hari.

Anda mungkin terpaksa mengimport lambakan pangkalan data lebih daripada sekali. Dan walaupun tugas ini remeh, soalan dan kadang-kadang masalah yang berkaitan dengan ini sering timbul. Di bawah ialah semua kod yang anda perlukan untuk menggunakan pembuangan pangkalan data dengan cepat dari baris arahan.

TETAPKAN NAMA utf8; LEPASKAN PANGKALAN DATA `mydb`; CIPTA PANGKALAN DATA `mydb` SET KARAKTER LALAI utf8; GUNAKAN `mydb`; SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET autokomit=0; SET foreign_key_checks=0; SET unique_checks=0; SUMBER /path/to/db_dump.sql; KOMITED; SET autokomit=1; SET foreign_key_checks=1; SET unique_checks=1;

Arahan ini akan membolehkan anda mengimport pembuangan pangkalan data dengan cepat dan mengelakkan masalah. Selain itu, beberapa masalah ini tidak dapat diselesaikan walaupun oleh pelanggan mysql biasa, seperti phpMyAdmin dan lain-lain.

Mari kita cuba memikirkannya kod ini mengikut tertib.

TETAPKAN NAMA utf8; mengatakan bahawa pertukaran data akan berlaku dalam pengekodan UTF-8 dan di situlah ia berada fail asal longgokan pangkalan data dan inilah pangkalan data akhir yang akan ada.

LEPASKAN PANGKALAN DATA `mydb`; Dan CIPTA PANGKALAN DATA `mydb` SET KARAKTER LALAI utf8; melaksanakan kemusnahan pangkalan data dan penciptaan seterusnya dengan pengekodan lalai UTF-8. Adalah jelas bahawa ini akan memadamkan semua jadual dan data di dalamnya, tetapi ini akan memberi kita keyakinan bahawa pangkalan data yang dihasilkan akan sepadan sepenuhnya dengan data dalam fail dump.

GUNAKAN `mydb`; menunjukkan bahawa pangkalan data khusus ini harus digunakan untuk semua arahan daripada fail dump (semak fail dump untuk kehadiran arahan ini yang menunjukkan pangkalan data yang berbeza untuk mengelakkan kekeliruan).

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; melumpuhkan peningkatan pembilang kenaikan automatik apabila menulis nilai 0 ke medan kenaikan automatik. Secara lalai, apabila menulis ke medan sedemikian nilai NULL atau 0 ia dinaikkan secara automatik. Dan walaupun mempunyai nilai 0 dalam medan auto-incremental tidak amalan terbaik, kadang-kadang masih berlaku bahawa terdapat baris sedemikian di tempat pembuangan (saya menemui sesuatu yang serupa dalam pembuangan dari Magento). Ia juga berbaloi untuk menggantikan apa yang telah dimasukkan oleh mysqldump untuk beberapa waktu sekarang arahan ini secara lalai di tempat pembuangan mereka.

SET autokomit=0; sebelum memuat naik tempat pembuangan dan KOMITED; selepas itu, mereka mempercepatkan pelaksanaan INSERT untuk jadual InnoDB, kerana apabila mod autokomit didayakan, log disimpan ke cakera dengan setiap INSERT. Boleh membantu apabila menggulung tempat pembuangan besar.

SET foreign_key_checks=0; pilihan yang paling jelas, tanpanya kebanyakan pembuangan tidak dapat digunakan sama sekali. Melumpuhkan semakan kunci asing, yang membolehkan data ditulis dalam sebarang susunan, termasuk dengan rujukan pekeliling kunci asing. Pilihan ini juga mempercepatkan import dump.

SET unique_checks=0; melumpuhkan semakan keunikan untuk kunci sekunder, yang sekali lagi boleh mempercepatkan proses import.

Dan akhirnya, pasukan utama untuk siapa semua ini dirancang - SUMBER /path/to/db_dump.sql; terus mengimport dump pangkalan data mysql dari fail yang ditentukan. Laluan ke fail boleh mutlak atau relatif kepada direktori dari mana anda mengakses konsol mysql.

Dan selepas import selesai, kami memulihkan nilai bendera, walaupun ini tidak perlu dilakukan, kerana arahan SET dalam mysql, secara lalai, menukar nilai pembolehubah hanya dalam konteks sesi semasa.

Memang pelik, tetapi agak sukar untuk mencari maklumat ini di Internet. Sekumpulan semua jenis cadangan sayap kiri. Tetapi sebenarnya, semuanya mudah. Anda boleh memulihkan dump dengan arahan:

# mysql-u -p< mysql_dump.sql.

Sebaliknya, gantikan nama pengguna, saya secara peribadi melakukan pemulihan daripada akar. Dan dalam mysql_dump, sql, sebenarnya, dump dibuat mysqldump utiliti. Pilihan -p menunjukkan kebenaran dengan kata laluan; selepas menekan enter anda akan diminta untuk kata laluan. Itu sahaja, sebenarnya. Anda boleh membuat pembuangan dengan arahan:

# mysqldump-u root -p -f database_name > file_with_dump.sql

Di sini parameter -f database_name menentukan nama pangkalan data yang kami simpan. Jika anda memerlukan segala-galanya, kami menggantikannya dengan --semua-pangkalan data. Pilihan ini akan menunjukkan menyimpan semua pangkalan data pada pelayan. Untuk tidak memasukkan kata laluan setiap kali, anda boleh menentukannya secara langsung dalam arahan (ini perlu jika anda melakukan pembuangan cron daripada skrip), namun, dari sudut pandangan keselamatan, soalan timbul di sini, terutamanya jika kata laluan adalah akar untuk otot. Sekarang, jika hanya otot memahami sekurang-kurangnya kata laluan md5 ... Namun, ia bukan fakta yang dia tidak faham, saya hanya mungkin saya tidak tahu :)

Pengarang

Alex Razgibalov

Lelaki gila, umur yang tidak tentu, menikmati khayalan penganiayaan. Tidak percaya secara patologi, mementingkan diri sendiri, autoritarian. Diagnosis sekunder - pengaturcara dan pembantu. Memiliki Bahasa Inggeris pada tahap perbualan yang kurang baik. Juga biasa dengan beberapa bahasa lain. Dia berminat dengan semua orang dan segala-galanya, kerana pengetahuannya dalam mana-mana bidang adalah cetek dan cetek. Perwatakan tidak dapat dikawal. Kekuatan - 55 darjah.

Buang dan pulihkan pangkalan data data MySQL Ia agak mudah dan mudah dilakukan dari jauh melalui SSH atau terus melalui konsol pelayan. Dari jauh, ini boleh dilakukan menggunakan program Putty/Kitty. Anda juga boleh menjalankan contoh di bawah pada Windows dengan menjalankan baris arahancmd'. Di bawah adalah contoh tentang cara membuat pembuangan pangkalan data MySQL dan kemudian memulihkannya jika perlu, contohnya untuk tapak web anda, kedai dalam talian atau beberapa projek lain.

Mencipta Dump Pangkalan Data MySQL

Untuk melaksanakan arahan ini, sambungkan dari jauh ke pelayan anda melalui SSH menggunakan salah satu program yang disenaraikan di atas. Selepas menyambung dan memberi kuasa kepada pelayan/penghosan, anda boleh memasukkan arahan di bawah.

# Sandarkan satu pangkalan data ke fail dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Hidup pembuangan tingkap Adalah lebih baik untuk mencipta perintah yang sedikit berbeza yang menghalang # menulis ganti baris pembuangan secara tidak sengaja disebabkan oleh penukaran aksara baris baharu "\r\n" kepada "\n" mysqldump -uroot -p your_base -r dump_file_utf8.sql # Jika anda memerlukan sandaran daripada jadual individu sahaja, dan bukan keseluruhan pangkalan data # (nyatakan nama jadual yang dipisahkan oleh ruang selepas nama pangkalan data) mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql # Jika anda perlu membuat sandaran hanya pangkalan data struktur tanpa data itu sendiri mysqldump -uroot -p -- no-data your_base > dump_file.sql # Sandarkan semua pangkalan data ke fail current_date.gz mysqldump -uroot -p --all_databases | gzip -c > "date "+%Y-%m-%d"".gz # Backup, di mana INSERT berasingan dicipta untuk setiap rekod # dan dengan petunjuk eksplisit pengekodan pangkalan data UTF-8 mysqldump -uroot -p --default- character-set=utf8 your_base --extended-insert=SALAH | gzip -c > "tarikh "+%Y-%m-%d"".gz

# Sandarkan satu pangkalan data ke dump_file.sql

mysqldump - uroot - p your_base > dump_file . sql

# Pada Windows adalah yang terbaik untuk membuat dump dengan arahan yang sedikit berbeza yang menghalang

# timpa rawak baris pembuangan disebabkan penukaran aksara baris baharu "\r\n" kepada "\n"

mysqldump - uroot - p your_base - r dump_file_utf8 . sql

# Jika anda memerlukan sandaran hanya jadual individu, dan bukan keseluruhan pangkalan data

# (nyatakan nama jadual yang dipisahkan oleh ruang selepas nama pangkalan data)

mysqldump - uroot - p your_base JADUAL1 JADUAL2 JADUAL3 > dump_file . sql

# Jika anda perlu membuat sandaran hanya struktur pangkalan data tanpa data itu sendiri

mysqldump - uroot - p -- no - data your_base > dump_file . sql

# Sandarkan semua pangkalan data ke fail current_date.gz

mysqldump - uroot - p -- all_databases | gzip - c > "tarikh "+%Y-%m-%d"" . gz

# Sandaran, di mana INSERT berasingan dicipta untuk setiap entri

# dan secara eksplisit menyatakan pengekodan pangkalan data UTF-8

mysqldump - uroot - p -- lalai - aksara - set = utf8 your_base -- extended - insert = FALSE | gzip - c > "tarikh "+%Y-%m-%d"" . gz

Dalam contoh di atas, utiliti digunakan untuk membuat sandaran mysqldump, yang disertakan dengan mysql. Berikut ialah parameter untuk membuat sandaran pangkalan data, yang akan kami periksa dengan lebih terperinci:

  • -u– parameter menentukan log masuk yang akan digunakan untuk menyambung ke pangkalan data. Dalam contoh, kami menggunakan log masuk akar, yang mesti dinyatakan dalam parameter ini tanpa ruang! Akibatnya, ia kelihatan seperti -uroot
  • -hlm– parameter menunjukkan bahawa anda perlu memasukkan kata laluan untuk log masuk yang ditentukan. Kami membiarkannya kosong, akibatnya kata laluan perlu dimasukkan selepas menekan "Enter" semasa melaksanakan arahan. Walau bagaimanapun, anda boleh menentukan kata laluan di sini, seperti dalam parameter log masuk, tanpa ruang selepas -p, namun kaedah ini tidak selamat, kerana konsol menyimpan arahan anda ke fail log dan jika anda tidak mengosongkannya dengan kerap, ia boleh dilihat oleh penyerang.
  • pangkalan_anda– bukannya baris ini dalam contoh, anda perlu menunjukkan nama sebenar pangkalan data anda yang anda buat sandaran.
  • > – pengendali yang menunjukkan arah tindakan, i.e. seolah-olah ia menunjukkan bahawa anda akan menulis dari pangkalan data ke fail.
  • dump_file.sql– ini adalah nama fail .slq anda di mana anda perlu menyimpan pangkalan data anda. Ia ditunjukkan dengan ruang selepas operator ‘>’. Anda boleh menentukan sebarang nama lain. Sebagai contoh, supaya dalam nama sistem secara automatik memasukkan masa semasa, hanya tentukan baris seperti:

    "tarikh "+%Y-%m-%d""

    "tarikh "+%Y-%m-%d""


    selepas baris ini dalam contoh sambungan fail ditunjukkan ' .gz'. Akibatnya, fail seperti ' 2014-11-15.gz‘.

    Perhatian! Jika anda hanya menentukan nama fail, ia akan disimpan dalam direktori yang sama berbanding dengan yang anda laksanakan arahan ini. Itu. jika anda melihat sesuatu seperti ini pada command prompt # , Di mana akar@dvs ini adalah nama log masuk dan pelayan, fail akan dibuat dalam direktori /rumah. Untuk menukar menyimpan fail ke laluan lain, nyatakan bukannya nama laluan penuh untuk menyimpan fail, contohnya: /var/www/backup/dump_file.sql.

  • Dalam contoh kedua, bukannya operator ' > ' operator ' digunakan | ', yang menunjukkan keperluan untuk melaksanakan arahan tambahan gzip dengan parameter ' -c' yang membolehkan anda segera membungkus pembuangan ke dalam arkib, dan hanya kemudian menyimpannya ke fail seperti ' 2014-11-15.gz', seperti yang dilaporkan oleh pengendali' > ‘.
  • Parameter -tiada data membolehkan anda membuang hanya struktur pangkalan data tanpa data itu sendiri. Agak berguna dalam beberapa kes apabila data tidak diperlukan.
  • Pilihan –default-character-set=utf8 Dan –extended-insert=SALAH. Yang pertama membolehkan anda menentukan secara eksplisit pengekodan yang digunakan oleh pangkalan data ini, dengan itu mengelakkan penyimpanan pangkalan data dalam pengekodan yang salah. Daripada utf8, anda boleh menentukan sebarang pengekodan lain, contohnya cp1251. Parameter kedua membolehkan anda menentukan bahawa arahan INSERT yang berasingan mesti dibuat untuk setiap rekod semasa mengeksport. Dalam sesetengah kes, ini mungkin diperlukan apabila memulihkan sebahagian data daripada tempat pembuangan.
  • Memulihkan Pangkalan Data daripada Fail Dump MySQL

    Sekarang mari kita lihat proses terbalik memulihkan pangkalan data daripada fail dump. Tindakan ini dilakukan menggunakan program mysql. Mari lihat contoh segera.