Saya telah mencoba untuk memindahkan db yang ada dari MySQL yang berjalan pada EC2 ke instance Amazon RDS baru (percobaan untuk melihat apakah kita dapat bergerak melintasi). Sejauh ini, ini tidak berjalan baik. Saya terjebak pada impor awal sebelum menyiapkan replikasi (instruksi di sini ).
Saya sudah menyiapkan instance RDS seperti yang dijelaskan dan dapat menyambungkannya dari instance EC2 menggunakan mysql. Saya menjalankan perintah mysqldump sebagai:
mysqldump --master-data --databases db1 db2 > dump.sql
Kemudian mencoba mengunggahnya ke RDS dengan:
mysql -h RDSHost -P 3306 -u rdsuser --password=rdspassword < dump.sql
Masalah pertama adalah pada baris 22 tempat pembuangan:
GANTI MASTER KE MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 106;
Baris ini menyebabkan kesalahan ERROR 1227 (42000) at line 22: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
. Tidak masalah, cukup komentari baris itu dan berharap untuk memperbaikinya nanti melalui mysql.rds_set_external_master (). Dicoba upload, dan punya kesalahan sangat mirip: ERROR 1227 (42000) at line 7844: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
. Bagian di sekitar baris 7844 terlihat seperti ini:
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`dev`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `jos_contributor_ids_view` AS select `jos_resource_contributors_view`.`uidNumber` AS `uidNumber` from `jos_resource_contributors_view` union select `jos_wiki_contributors_view`.`uidNumber` AS `uidNumber` from `jos_wiki_contributors_view` */;
Dengan mengomentari 2 baris pertama dan menambahkan 'BUAT' ke baris ketiga, saya bisa melewati yang ini. Tetapi ada banyak bagian seperti ini. Apakah ada jalan keluarnya tanpa semua pengeditan? Suka opsi untuk mysqldump
tidak menghasilkan apa pun yang membutuhkan hak SUPER?
Sepertinya banyak orang memiliki masalah yang sama, seperti harus menjalankan sed
terhadap keluaran mysqldump / mysqlbinlog! Saya akan memposting di forum AWS juga - sungguh saya pikir RDS harus memiliki cara yang lebih toleran untuk mengimpor dari mysqldump, atau alat khusus yang dapat dijalankan terhadap db yang ada untuk membuat dump yang merupakan keluhan dengan keamanan RDS. Hanya ingin tahu apakah ada yang punya resep atau trik lain yang mungkin bisa membantu di sini.
Terima kasih,
Dave
sumber
log_bin_trust_function_creators
parameter ke 1, tetapi masih mendapatkan kesalahan yang sama pada baris 7844.--masterdata=2
. Baris kemudian akan dikomentari di tempat sampah.Jawaban:
Anda mungkin perlu
log_bin_trust_function_creators
= 1 pada RDS tetapi bukan itu masalahnya, di sini.Ketika program tersimpan (proc, fungsi, acara, atau pemicu) sedang berjalan, semua yang dilakukannya memiliki izin dari pengguna yang mendefinisikannya, atau dari pengguna yang secara eksplisit dinyatakan dengan
DEFINER
deklarasi. Hal ini memungkinkan, antara lain, untuk program yang disimpan untuk mengizinkan pengguna lain untuk melakukan hal-hal ke data mereka tidak secara langsung memiliki izin untuk memanipulasi, selama mereka memiliki izin untuk menggunakan program yang tersimpan itu sendiri.Maka akan menjadi kerentanan serius, jika non-
SUPER
pengguna dapat membuat prosedur dengan definisi yang sewenang-wenang, karena pengguna dapat meningkatkan haknya sesuka hati.Ini juga berlaku untuk pandangan, tentu saja, ketika konteks keamanan definer digunakan, seperti dalam contoh yang Anda posting.
Salah satu keluhan terbesar yang saya miliki dengan RDS adalah bahwa Anda tidak dapat memiliki
SUPER
... dan sekarang bisa menjadi salah satu dari Anda juga :) karena fakta itulah yang menjadi penyebab masalah yang Anda hadapi.Tentu saja, jika saya menjalankan layanan MySQL yang dikelola, saya tidak akan memberikan siapa pun
SUPER
juga, sehingga model keamanan mereka masuk akal, bahkan jika kadang-kadang sulit.Jika semua objek Anda memiliki definisi yang sama, solusinya adalah mengembalikan dump menggunakan akun itu daripada yang Anda gunakan sekarang, tapi itu sepertinya tidak mungkin.
Menghapus hanya baris dengan
DEFINER
deklarasi harus membuat dumpfile berfungsi dalam kasus-kasus di mana ia muncul pada sebuah baris dengan sendirinya, atau Anda dapat menggunakan sed atau perl untuk memodifikasi file ... sebuah ide yang saya tahu Anda tidak suka, tapi itu benar-benar hal yang baik tentang MySQL bahwa peretasan seperti itu cukup sah, dan tidak terlalu jauh dari hal-hal yang harus saya lakukan sebagai DBA bahkan dalam envirnoment non-RDS.... mungkin bukan jawaban yang Anda harapkan, tetapi Anda bisa menjalankannya terhadap dumpfile Anda dan akan berakhir dengan file yang sedikit lebih bermanfaat.
sumber
Dalam kasus saya adalah baris "UBAH MASTER KE MASTER_LOG_FILE = ..." di dump yang memberi saya kesalahan. Baris ini ditambahkan oleh opsi "--master-data" dari mysqldump. Di Amazon AWS Anda perlu memulai replikasi dengan mengatur detail utama dengan prosedur "mysql.rds_set_external_master" sebagai gantinya baca di sini
Jadi saya hanya memberi catatan pada baris itu "head 22 backup.dump" di mana baris 22 melaporkan kesalahan. Kemudian hapus sebelum mengimpor, untuk file besar saya, saya menggunakan: "sed '22d' backup.dump> backup_clean.dump"
sumber