Mengubah direktori data MySQL di Ubuntu Server 10.04

9

Saya mendapatkan kesalahan berikut ketika mencoba mengubah direktori data di server ubuntu 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
Norling Jr.
sumber
2
... dan pertanyaan Anda adalah? Perhatikan bahwa jika Anda hanya memindahkan konten folder, dan tidak ada file, Anda akan kehilangan semua konten tabel InnoDB.
bobince
tidak ada pertanyaan / sendok. Baru saja membayangkan ini mungkin menarik bagi orang-orang di sekitar sini. Poin bagus tentang konten tabel InnoDB!
2
Jika Anda ingin bertanya dan menjawab pertanyaan Anda sendiri itu tidak masalah, tetapi luangkan waktu untuk benar-benar mengajukan pertanyaan dan berikan jawaban Anda sebagai jawaban.
Zoredache

Jawaban:

8

Setelah beberapa kebingungan umum tentang perizinan, OP menyadari bahwa masalahnya bukan karena ia tidak memiliki hak akses dan lintasan tetapi AppArmor mencegah MySQL membaca dan menulis ke lokasi baru.

Ini solusinya:

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
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Kemudian beri tahu mysql bahwa datadir telah pindah:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     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
percikan
sumber
2
Anda dapat menyimpan dan menjalankan database dengan menautkan file ke lokasi baru mereka, alih-alih memindahkannya ... kecuali tentu saja dua lokasi datadir berada di partisi terpisah.
cpbills
Instruksi untuk memindahkan direktori saja tidak akurat jika Anda menggunakan innodb. Dalam hal ini Anda harus memindahkan data innodb dan juga mencatat file (ibdata *, ib_logfile *).
hillel
Catatan untuk orang lain sama cerobohnya denganku. Anda harus memiliki garis miring di jalur di konfigurasi AppArmor /new-mysql-dir/ ratau kalau tidak akan tetap ditolak. Hal-hal dasar Linux tapi saya tidak pernah bisa mendapatkan garis miring yang benar.
Jeff
Saya masih ditolak oleh AppArmor. Utas ini membantu mengatasi rintangan terakhir itu.
Jeff