Bagaimana cara membuang basis data jauh tanpa mysqldump?

8

Saya ingin membuang database di situs saya yang di-host secara berkala menggunakan skrip shell. Sayangnya server terkunci cukup ketat, tidak mysqldumpdiinstal, file biner tidak dapat dieksekusi oleh pengguna normal / di direktori home (jadi saya tidak bisa "menginstal" sendiri) dan database hidup di server yang terpisah, jadi saya tidak dapat mengambil file secara langsung.

Satu-satunya hal yang bisa saya lakukan adalah masuk ke server web melalui SSH dan membuat koneksi ke server database menggunakan mysqlklien baris perintah. Bagaimana saya bisa membuang konten ke file ala mysqldumpdalam format SQL?
Bonus: Jika memungkinkan, bagaimana saya bisa membuang konten langsung ke koneksi SSH saya?


Saya suka gagasan terowongan SSH yang diusulkan di bawah ini, namun, saya harus menggandakan terowongan itu.

localhost -> remote web server -> remote database server

Ini berfungsi dengan baik:

$ ssh -f -L 3306:mysql.example.com:3306 [email protected] -N

Namun, mencoba masuk ke mysql gagal:

$ mysqldump -P 3306 -h localhost -u user -p db
Enter password: 
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
   (using password: YES) when trying to connect

Saya kira itu mengharapkan kredensial pengguna menjadi 'user'@'mysql.example.com'. Bagaimana saya bisa membujuknya menggunakan itu daripada host "nyata"?


Oke, saya membuatnya berfungsi dengan menambahkan 127.0.0.1 mysql.example.comke file host saya dan menghubungkan melalui mysqldump -P 3306 -h mysql.example.com -u user -p db. Masalah terselesaikan! Saya masih tertarik dengan solusi yang tidak mengharuskan saya mengedit file host.

menipu
sumber
1
Saya menyarankan agar Anda memberikan izin 'user'@'localhost'selain 'user'@'mysql.example.com'di MySQL, alih-alih mengedit file host.
Znarkus

Jawaban:

15

Anda dapat mengatur terowongan ssh dan menggunakannya mysqldumppada mesin lokal Anda.

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname
chmeee
sumber
1
Di Unix, 'localhost' diperlakukan berbeda. Di mana, nomor port diabaikan, Anda harus menggunakan 127.0.0.1 untuk membuat ini berfungsi. dev.mysql.com/doc/refman/5.0/en/connecting.html
Adrian Gunawan
1

http://sypex.net/en/ - Anda dapat menggunakan skrip ini untuk cadangan basis data setelah mengunggahnya ke server. Sangat praktis dan cepat

Vladislav Rastrusny
sumber
0

Unggah skrip ini ke server web Anda (harap Anda memiliki setidaknya akses FTP), mulai, tentukan nama basis data / host (alamat "server terpisah" Anda) / nama pengguna / kata sandi dan buang basis data ke lokasi mana pun yang Anda inginkan ...

Sergey
sumber
0

Jika server Anda adalah server Web, Anda dapat menggunakan skrip PHP yang membuang database ke layar. Di server cadangan Anda, letakkan cron yang wget halaman dump. Kemudian basis data Anda dibuang ke server cadangan Anda hanya dengan HTTP.

Jangan lupa keamanan: Semua orang tersedia untuk membuang markas Anda. Masukkan kata sandi, atau batasan IP ...

Dom
sumber