Jadi saya mencoba mengimpor file sql ke rds (1G MEM, 1 CPU). File sql seperti 1.4G
mysql -h xxxx.rds.amazonaws.com -u pengguna -ppass --max-diperbolehkan-paket = 33554432 db <db.sql
Itu macet di:
ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Konten sql sebenarnya adalah:
/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN
SET NEW.created_at = NOW();
END IF */;;
another_user
tidak ada di rds, jadi saya lakukan:
GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';
Masih belum berhasil.
mysql
amazon-web-services
amazon-rds
kenpeter
sumber
sumber
DEFINER
ketika pengguna yang masuk tidak memilikiSUPER
hak istimewa (yang tidak diizinkan di RDS) akan memungkinkan eskalasi hak istimewa sewenang-wenang - program yang disimpan dijalankan dengan kredensial dan hak istimewa mereka.DEFINER
(sebagai lawan dari pengguna yang memanggil - merekaINVOKER
), secara default. Juga di Kesalahan Server .sed 's/\sDEFINER=`[^`]*`@`[^`]*`//' -i oldfile.sql
awk
yang mungkin sedikit lebih cepat darised
Jika file dump Anda tidak memiliki
DEFINER
, pastikan baris di bawah ini juga dihapus jika ada, atau diberi komentar dengan--
:Di awal:
-- SET @@SESSION.SQL_LOG_BIN= 0; -- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
Pada akhirnya:
-- SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
sumber
--set-gtid-purged=OFF
kemysqldump
perintah Anda . Ditemukan di sini: stackoverflow.com/a/56251925Trik berguna lainnya adalah memanggil mysqldump dengan opsi --set-gtid-purged = OFF yang tidak menulis baris berikut ke file output:
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
tidak yakin tentang yang DEFINER.
sumber
SET @@GLOBAL.GTID_MODE = OFF;
MySql Workbench di sisi pengekspor dari database sumberHanya pembaruan ekstra MacOS untuk jawaban hjpotter92.
Untuk
sed
mengenali pola di MacOS, Anda harus menambahkan garis miring terbalik sebelum=
tanda, seperti ini:sumber
Masalah : Anda mencoba mengimpor data (menggunakan file mysqldump) ke database mysql Anda, tetapi tampaknya Anda tidak memiliki izin untuk melakukan operasi itu.
Solusi : Dengan asumsi data Anda dimigrasi, diunggulkan, dan diperbarui dalam database mysql Anda, ambil snapshot menggunakan mysqldump dan ekspor ke file
mysqldump -u [username] -p [databaseName] --set-gtid-purged=OFF > [filename].sql
Setelah itu hubungkan ke mysql Anda dengan root pengguna, berikan izin, bersihkan, dan verifikasi bahwa hak pengguna Anda telah diperbarui dengan benar.
mysql -u root -p UPDATE mysql.user SET Super_Priv='Y' WHERE user='johnDoe' AND host='%'; FLUSH PRIVILEGES; mysql> SHOW GRANTS FOR 'johnDoe'; +------------------------------------------------------------------+ | Grants for johnDoe | +------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `johnDoe` | | GRANT ALL PRIVILEGES ON `db1`.* TO `johnDoe` | +------------------------------------------------------------------+
sekarang muat ulang data dan operasi harus diizinkan .
sumber
Untuk mengimpor file database dalam
.sql.gz
format, hapus definer dan impor menggunakan perintah di bawah iniSebelumnya, ekspor database dalam format .sql.gz menggunakan perintah di bawah ini.
mysqldump -u user -p old_db | gzip -9 > path_to_db_exported.sql.gz;
Impor database yang diekspor dan hapus definer menggunakan perintah di bawah ini,
zcat path_to_db_exported.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -u user -p new_db
sumber
Saat Anda memulihkan cadangan, Pastikan untuk mencoba dengan nama pengguna yang sama untuk yang lama dan yang baru.
sumber
Solusi Lengkap
Semua solusi di atas baik-baik saja. Dan di sini saya akan menggabungkan semua solusi sehingga dapat bekerja untuk semua situasi.
Untuk Linux dan Mac
Untuk Windows
unduh atom atau notepad ++, buka file dump sql Anda dengan atom atau notepad ++, tekan Ctrl + F
cari kata DEFINER , dan hapus baris DEFINER =
admin
@%
(atau mungkin sedikit berbeda untuk Anda) dari mana saja dan simpan file.Sebagai contoh
sebelum menghapus baris itu: CREATE DEFINER =
admin
@%
PROCEDUREMyProcedure
Setelah menghapus baris itu: CREATE PROCEDURE
MyProcedure
Contoh: Buka Dump2020.sql di Atom, Tekan ctrl + F, cari SET @@ SESSION.SQL_LOG_BIN = 0 , hapus baris itu.
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
sumber
Saya berkomentar semua baris mulai dengan
SET
di*.sql
berkas dan bekerja.sumber
* Jawaban mungkin hanya berlaku untuk MacOS *
Saat mencoba mengimpor file .sql ke dalam kontainer buruh pelabuhan, saya menemukan pesan kesalahan:
Kemudian ketika mencoba beberapa saran lain, saya menerima kesalahan di bawah ini di MacOS (osx) saya
Akhirnya, perintah berikut dari sumber ini menyelesaikan masalah "Access Denied" saya.
Jadi saya bisa mengimpor ke database buruh pelabuhan dengan:
Semoga ini membantu! :)
sumber
Perlu menyetel "pada" parameter server "log_bin_trust_function_creators" di sisi server. Yang ini dapat dengan mudah Anda temukan di bilah sisi kiri jika itu adalah azure maria db.
sumber
Pernyataan
adalah masalah di dump cadangan Anda.
Solusi yang dapat Anda atasi adalah dengan menghapus semua entri dari file sql dump dan mengimpor data dari konsol GCP.
Coba impor file baru (NEW-CLEANED-DUMP.sql).
sumber