Bagaimana cara saya memindahkan file data MySQL ke partisi yang berbeda?

27

Saya memiliki hard drive saya dipartisi dengan dua partisi, jadi saya dapat dengan mudah menginstal ulang Ubuntu dan mencoba versi yang berbeda tanpa kehilangan data direktori rumah saya. Ini diatur seperti ini:

20GB  -> /     (root)
180GB -> /home 

Saya melakukan banyak pekerjaan pengembangan, jadi saya memiliki /var/wwwfolder yang terhubung dengannya /home/valorin/workspace.

Tapi saya ingin melakukan ini dengan file data MySQL saya juga, karena saya merasa jengkel bahwa setiap kali saya menginstal ulang mesin saya, saya perlu melakukan SQLdump penuh dan kemudian mengembalikan semua DB sebelum saya dapat melakukan lebih banyak pekerjaan.

Apa cara terbaik untuk melakukan ini tanpa merusak MySQL?

Stephen RC
sumber

Jawaban:

30

Sebenarnya ada potensi jawaban spesifik Ubuntu untuk pertanyaan ini.

Seperti yang disebutkan oleh tautan Gergoes, ini pada dasarnya tentang memodifikasi /etc/mysql/my.cnf dan menetapkan nilai baru untuk datadir = di bagian [mysqld] . Sejauh ini bagian yang tidak spesifik dari jawabannya.

Dengan asumsi Anda menjalankan versi Ubuntu yang agak modern, Anda mungkin sudah menginstal AppArmor secara default, dengan profil untuk / usr / sbin / mysqld dalam mode yang dipaksakan. Profil default itu kemungkinan besar tidak akan menerima datadir baru Anda.

Mari kita asumsikan bahwa datadir baru Anda adalah / home / data / mysql .

Jika Anda membuka file /etc/apparmor.d/usr.sbin.mysqld Anda akan menemukan aturan di antara dua baris ini.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Dengan asumsi contoh kita di atas, mereka harus diganti atau (mungkin lebih disukai) dilengkapi oleh dua baris ini.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Sebelum kita dapat memulai server MySQL kita, dengan datadir baru, kita juga harus memuat ulang profil apparmor baru kita secara eksplisit.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
andol
sumber
Ini sepertinya tidak berhasil pada Natty (11.4). Saya harus memulai MySQL menggunakan / usr / sbin / mysqld untuk membacanya membaca dir data saya yang berubah. Kalau tidak, ia terus membaca dir data lama saya. Ini bisa menjadi kesalahan di pihak saya.
tiga cangkir
Di atas gagal menyelesaikan masalah bagi saya di Ubuntu 12.04 (Precise). Saya menemukan bahwa seseorang perlu mengedit file /etc/apparmor.d/tunables/alias untuk memasukkan baris "alias / var / lib / mysql / -> / home / data / mysql /," Dengan ini, saya tidak memerlukan perubahan apa pun pada file AppArmor lainnya. Ini bekerja segera setelah me-restart AppArmor dengan "/etc/init.d/apparmor restart" dan MySQL dengan "restart mysql".
mak
Saya pikir izin tertentu perlu ditetapkan pada folder baru yang akan digunakan. Adakah yang tahu apa itu? Saya tahu instalasi mysql membuat pengguna mysql ... dan secara default, saya tidak dapat mengakses konten folder / var / lib / mysql.
NullVoxPopuli
4

Pengguna super memiliki petunjuk langkah demi langkah yang bagus tentang cara mengatasi masalah ini

Berikut ini adalah seperangkat instruksi lain untuk melakukan hal yang sama http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Ini dia mem-posting ulang. Pergi dan naik pilih yang asli jika Anda bisa di pengguna super.

Setelah kebingungan umum tentang izin, saya menyadari bahwa masalahnya bukan pada hak akses dan jalur saya, tetapi AppArmor mencegah mysql membaca dan menulis ke lokasi baru.

Ini solusi saya:

Pertama hentikan MySQL, jadi tidak ada yang aneh terjadi saat Anda mengutak-atik:

$ sudo stop mysql

Kemudian pindahkan semua direktori database ke rumah baru mereka:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Jangan pindahkan file, itu akan dihasilkan oleh mysql, cukup pindahkan folder (yang merupakan basis data).

Kemudian dengan sopan minta AppArmor untuk mengizinkan mysql menggunakan folder baru:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld

tambahkan baris:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Kemudian beri tahu mysql bahwa datadir telah pindah:

$ sudo vim /etc/mysql/my.cnf 

ubah baris:

datadir=/var/lib/mysql

untuk:

datadir=/my-new-db-dir/

CATATAN: Bergantung pada pengaturan basis data Anda, Anda mungkin perlu mengubah innodb-data-home-dir dll.

Kemudian restart AppArmor untuk membaca pengaturan baru:

$ sudo /etc/init.d/apparmor restart

Dan mulai lagi MySQL menggunakan datadir baru:

$ sudo start mysql

Semoga ini membantu!

nelaaro
sumber
0

Ini sebenarnya bukan spesifik Ubuntu. Namun demikian, berikut adalah sesuatu yang mungkin membantu: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

Nathan Osman
sumber
Instruksi tidak benar-benar membantu karena bagian yang tidak dapat saya kerjakan adalah AppArmour dan pos Anda hanya menjelaskannya secara sepintas. Juga, apakah situs ini untuk pertanyaan yang spesifik untuk Ubuntu? Bagaimana pengguna baru yang mencari bantuan tahu apa yang spesifik untuk Ubuntu atau tidak, dan di mana mereka harus bertanya apakah mereka generik?
Stephen RC
Situs web tidak tersedia.
Hengjie
-1

Ini tidak akan berfungsi begitu saja.

user mysql harus memiliki hak untuk menulis ke dir yang baru:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
sumber