Saya mencoba menyalin database mysql saya dari Amazon EC2 ke RDS:
Saya berhasil melakukan mysqldump
database saya ke folder root saya menggunakan ini:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
Kemudian saya mencoba mentransfer file .sql ini ke database RDS baru saya:
root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
Sayangnya, saya mendapatkan pesan kesalahan berikut:
You do not have the SUPER privilege and binary logging is enabled
(you *might* want to use the less safe log_bin_trust_function_creators variable)
Saya mencoba dengan GRANT SUPER..
berbagai cara tetapi saya mendapatkan kesalahan ketika saya mencoba melakukannya juga. Mengetik mysql > FLUSH privileges;
juga tidak berhasil.
Saya seorang pemula mysql jadi maaf untuk pertanyaan yang begitu mudah. Pikiran?
mysql
amazon-ec2
amazon-web-services
amazon-rds
grant
tim peterson
sumber
sumber
GRANT SUPER
di RDS. RDS tidak menawarkan cara untuk mendapatkan hak istimewa SUPER.sql
file saya memilikiCREATE FUNCTION
pernyataan yang membutuhkan pengguna yang memiliki hak istimewa. lihat iniJawaban:
Sesuai http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ , Anda perlu menyetel
log_bin_trust_function_creators
ke 1 di konsol AWS , untuk memuat file dump Anda tanpa kesalahan.Jika Anda ingin mengabaikan kesalahan ini, dan memuat berkas dump lainnya, Anda dapat menggunakan
-f
opsi:The
-f
akan melaporkan kesalahan, tetapi akan terus memproses sisa file dump.sumber
-f
tidak membantu. Saya mendapat kesalahan yang sama. Menggunakan tautan Anda, saya mengalami masalah dengan sintaks alat RDS Cli. Artinya, ketika saya pergi untuk mengubah hak istimewa saya mendapatkan kesalahan berikut:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"
Saya tahu itu harus menjadi masalah kutipan atau tanda hubung ganda saya tetapi tidak ada dari jenis perubahan itu yang berfungsi sejauh ini, ugh!-f
pilihan tidak akan membuat kesalahan pergi, itu hanya akan memungkinkan pernyataan SQL non-menyinggung dalam file yang akan diproses. Dari apa yang saya baca, RDS tersedak prosedur yang tersimpan di file dump. Coba buat file dump tanpa prosedur penyimpanan dan lihat apakah itu memuat OK:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
-f
opsi. Fase kedua mungkin untuk membuang hanya rutinitas / proses stred, dll secara terpisahsumber
Masalah dengan pemicu dan prosedur tersimpan di berkas dump adalah bahwa definisi ini menyertakan pengguna yang harus dibuat oleh prosedur tersimpan, DEFINER. Pengguna kemungkinan besar tidak ada di RDS sehingga kesalahan kemudian dimunculkan. Untuk dapat memuat file dump, Anda dapat menghapus DEFINER menggunakan sed atau Perl dan membuat prosedur / pemicu yang tersimpan dengan pengguna yang melakukan impor.
Sekarang Anda harus dapat memuat file dump tetap
Seperti yang dikatakan dalam jawaban sebelumnya, Anda harus mengatur Parameter DB:
sumber
OldDefiner
@localhost
/ DEFINER =NewDefiner
@localhost
/ g' ./TargetSqlFile.sqlBagi saya, hanya ada 2 perintah di file dump saya yang membutuhkan hak SUPER:
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
Menurut dokumen mysqldump Anda dapat menonaktifkannya dengan
--set-gtid-purged=OFF
.Kemudian melihat man mysqldump :
Jadi saya memutuskan untuk menambahkan
--set-gtid-purged=OFF
kemysqldump
perintah saya dan kemudian saya berhasil mengimpor file dump yang dihasilkan.sumber
Seperti yang ditentukan dalam dokumentasi AWS, pemicu, prosedur, dan fungsi dinonaktifkan secara default karena logging biner diaktifkan secara default. Menonaktifkan pada dasarnya membuat db Anda lebih aman, tetapi jika Anda telah mengamankannya dengan benar melalui jaringan itu tidak masalah.
Ikuti langkah-langkah ini dan masalah Anda akan diperbaiki https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
Anda juga tidak boleh menggunakan definisi saat membuat prosedur. Perintah sed sederhana dapat menghapusnya.
sumber
Selain pengeditan
Anda perlu menghapus semua DEFINER dari file dump Anda, periksa tautan berikut untuk perintah SED yang dapat membantu membersihkan file dump sql Anda.
https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243
sumber
Setelah menggunakan jawaban arun-r, jika masalah tidak terpecahkan Anda perlu memodifikasi file dump Anda. Itu sederhana.
Di file dump Anda akan menemukan baris seperti:
Anda harus mengganti:
username_from_dumped_database
dengan nama pengguna Anda di database rds.host_from_dumped_databse
oleh%
Saya tidak tahu mengapa tetapi trik ini berhasil untuk saya. Editor teks sederhana sudah cukup untuk melakukan ini.
sumber