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

MYSQL replay dumpfile semua atau tidak sama sekali dalam suatu transaksi

Catatan:Berikut ini hanya diuji secara kasar, mungkin ada lebih banyak hal yang perlu dipertimbangkan saat membuang, tergantung pada database Anda.

Itu hanya mungkin dalam keadaan tertentu.

Kegagalan pertama adalah, bahwa transaksi terikat ke sesi. Karena Anda terhubung lagi untuk mengeluarkan rollback , rollback tidak ada gunanya karena tidak ada transaksi untuk dikembalikan. Itu di sesi lain.

Kegagalan kedua adalah, biasanya mysqldump memiliki beberapa pernyataan yang memberikan commit implicit secara implisit dan karena itu mengakhiri transaksi. Ini mencakup semua pernyataan DDL (bahasa definisi data, ini termasuk drop , alter , create dan seterusnya) serta (un)lock tables .
Jadi, untuk mengeksekusi dumpfile Anda dalam satu transaksi, dump harus dibuat seperti ini:

mysqldump -uuser -ppw database --no-create-info --skip-add-locks --skip-disable-keys --skip-triggers >dumpfiles

--no-create-info mari mysqldump lewati semua drop table ...; create table ...; pernyataan.

--skip-add-locks mari mysqldump lewati semua tabel kunci lock table ...; unlock table ...; pernyataan.

--skip-disable-keys mari mysqldump lewati semua alter table ... disable keys; alter table ...enable keys; pernyataan.

--skip-triggers mari mysqldump lewati semua create trigger ...; pernyataan.

Ada juga --single-transaction opsi, tetapi opsi ini hanya akan diterapkan ke tabel tunggal.

Kegagalan ketiga (kemungkinan) adalah, bahwa transaksi hanya dapat dibatalkan sepenuhnya, jika semua tabel yang terlibat mampu melakukan transaksi, seperti InnoDB atau BDB. Jika Anda memiliki tabel MyISAM di sana, insert pernyataan tidak akan dibatalkan.

Berikut ini gagal, menyebabkan source perintah tidak diperbolehkan dalam prosedur tersimpan, melainkan bagian dari klien mysql.

Jika semua sudah dipertimbangkan, Anda bisa melakukannya seperti ini:

Pertama buat prosedur seperti ini:

DELIMITER $$
CREATE PROCEDURE sp_exec_dumpfile()
BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
  ROLLBACK;
END ;

START TRANSACTION;

SOURCE '/path/to/dumpfile.sql';

COMMIT;
END $$
DELIMITER ;

Kemudian jalankan seperti ini di skrip Anda:

mysql -uuser -ppw -hhost databasename -e "CALL sp_exec_dump()"

Atau tentu saja Anda membuat parameter prosedur dengan nama dumpfile.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktivitas MySQL yang berlebihan

  2. Validasi nomor Ponsel dalam bentuk php

  3. Lihat file yang disimpan dalam database menggunakan php di browser

  4. Masukkan teks dan karakter khusus dan MySQL

  5. menambahkan unik ke kunci asing yang ada