Ini adalah jawaban yang bagus tetapi Anda mungkin perlu satu langkah lagi untuk memungkinkan klien terhubung ke mysql. Tambahkan grup baru dengan satu baris di bawahnya ... [klien] socket = / array2 / mysql / mysql.sock di mana socket = porsi menunjuk ke lokasi baru file mysql.sock Anda.
Night Owl
1
Jika Anda tidak mau repot untuk menggabungkan /etc/apparmor.d/usr.sbin.mysqldsetiap kali mysql menerima update, Anda dapat menambahkan /array2/mysql/** rwk,untuk /etc/apparmor.d/local/usr.sbin.mysqldgantinya. Mysql masih akan memiliki akses ke dir data lama, tapi itu mungkin bukan masalah.
drevicko
sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf. Mengapa hanya folder basis data?
int_ua
Bagi siapa pun yang memindahkan datadir mereka ke ZFS (seperti yang saya lakukan), pastikan Anda juga menambahkan: innodb_use_native_aio=0di [mysqld]bagian my.cnffile Anda , karena ZFS di linux tidak mendukung AIO. dev.mysql.com/doc/refman/5.5/en/…
Andrew Ensley
23
Saya menemukan bahwa AppArmor adalah pelakunya dengan memeriksa syslog, dan berhasil mengubah mysqllokasi data dengan mengikuti proses ini.
Harap perhatikan bahwa, dalam file yang diedit di bawah ini, baris yang dimulai dengan +ditambahkan, dan baris yang dimulai dengan -dihapus. Anda seharusnya tidak benar-benar mengetik / menempel +tanda ketika menambahkan baris ke file-file ini.
Saya mengkloning mysqldirektori ke lokasi baru:
sudo rsync -av /var/lib/mysql /new_dir
Kemudian saya mengedit datadirbaris /etc/mysql/my.cnf:
Jika Anda memindahkan datadir Anda, Anda tidak hanya perlu memberikan izin datadir baru, tetapi Anda harus memastikan bahwa semua direktori induk memiliki izin.
Saya memindahkan datadir saya ke hard drive, yang dipasang di Ubuntu sebagai:
/media/*user*/Data/
dan datadiraku adalah Database .
Saya harus menetapkan izin ke 771 untuk masing-masing direktori media, pengguna dan Data:
sudo chmod 771 *DIR*
Jika ini tidak berhasil, cara lain Anda dapat membuat mysql berfungsi adalah dengan mengubah pengguna di /etc/mysql/my.cnf untuk me-root; meskipun tidak ada keraguan beberapa masalah dengan melakukan itu dari perspektif keamanan.
Saya lebih suka menggunakan opsi mount dengan bind jadi saya menghindari perubahan lebih lanjut dalam konfigurasi Apparmor dan Mysql.
Sebagai contoh:
Misalkan saya ingin memindahkan semuanya /var/www. Katakanlah dir ini adalah lingkungan dev saya dan sudah terpasang di partisi yang berbeda
Pertama-tama kita harus menghentikan mysql :
sudo systemctl stop mysql.service
Kami memindahkan file (menjaga izin)
sudo rsync -av /var/lib/mysql /var/www
Ini akan menghasilkan direktori /var/www/mysql/dengan semua konten.
Kami menghapus semua yang ada di direktori lama:
sudo rm -r /var/lib/mysql/*
Kami memasang direktori baru dengan bindopsi di yang lama.
edit /etc/fstabdan tambahkan baris ini:
/var/www/mysql /var/lib/mysql none bind 0 0
Ini akan me-mount /var/www/mysqldi dir kosong kita /var/lib/mysql
. bindOpsi di sini melakukan keajaiban, itu akan diisi /var/lib/mysqldengan konten /var/www/mysqljadi untuk mysql dan apparmor itu akan menjadi seperti tidak ada yang berubah.
Anda sadar jika Anda mengikuti perintah kata demi kata dari jawaban yang diterima itu akan gagal?
cp -R / var / lib / mysql / array2 / mysql
Akan menyalin / var / lib / mysql ke / array2 / mysql / mysql.
Ketika Anda mengatur file konfigurasi Anda, Anda sebaiknya meletakkan di / array2 / mysql / mysql sebagai direktori atau jika tidak mysqld Anda akan gagal untuk memulai.
Perintah salin yang lebih baik adalah:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / pengguna / array2 / mysql
/etc/apparmor.d/usr.sbin.mysqld
setiap kali mysql menerima update, Anda dapat menambahkan/array2/mysql/** rwk,
untuk/etc/apparmor.d/local/usr.sbin.mysqld
gantinya. Mysql masih akan memiliki akses ke dir data lama, tapi itu mungkin bukan masalah.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. Mengapa hanya folder basis data?innodb_use_native_aio=0
di[mysqld]
bagianmy.cnf
file Anda , karena ZFS di linux tidak mendukung AIO. dev.mysql.com/doc/refman/5.5/en/…Saya menemukan bahwa AppArmor adalah pelakunya dengan memeriksa
syslog
, dan berhasil mengubahmysql
lokasi data dengan mengikuti proses ini.Harap perhatikan bahwa, dalam file yang diedit di bawah ini, baris yang dimulai dengan
+
ditambahkan, dan baris yang dimulai dengan-
dihapus. Anda seharusnya tidak benar-benar mengetik / menempel+
tanda ketika menambahkan baris ke file-file ini.Saya mengkloning
mysql
direktori ke lokasi baru:Kemudian saya mengedit
datadir
baris/etc/mysql/my.cnf
:Kemudian saya mengedit
/etc/apparmor.d/usr.sbin.mysqld
:Kemudian saya memulai kembali
mysql
.sumber
Waspadalah.
Jika Anda memiliki tabel InnoDB Anda HARUS menyalin
ibdata*
danib_logfile*
file atau Anda tidak akan dapat menggunakan tabel. Kamu akan mendapatkan:kesalahan.
Jalankan perintah salin ini untuk menyalin
ibdata*
danib_logfile*
file.sumber
Saya hanya mencoba cara lain, yang mungkin berguna bagi beberapa orang:
salin dengan izin utuh:
cadangan (jika terjadi kesalahan):
buat direktori kosong baru menggantikan yang lama:
bind mount lokasi baru ke yang lama:
Harapan yang membantu seseorang, karena menghubungkan tidak bekerja untuk saya, dan ini adalah cara paling sederhana
sumber
Jika Anda memindahkan datadir Anda, Anda tidak hanya perlu memberikan izin datadir baru, tetapi Anda harus memastikan bahwa semua direktori induk memiliki izin.
Saya memindahkan datadir saya ke hard drive, yang dipasang di Ubuntu sebagai:
dan datadiraku adalah Database .
Saya harus menetapkan izin ke 771 untuk masing-masing direktori media, pengguna dan Data:
Jika ini tidak berhasil, cara lain Anda dapat membuat mysql berfungsi adalah dengan mengubah pengguna di /etc/mysql/my.cnf untuk me-root; meskipun tidak ada keraguan beberapa masalah dengan melakukan itu dari perspektif keamanan.
sumber
Saya lebih suka menggunakan opsi mount dengan bind jadi saya menghindari perubahan lebih lanjut dalam konfigurasi Apparmor dan Mysql.
Sebagai contoh:
Misalkan saya ingin memindahkan semuanya
/var/www
. Katakanlah dir ini adalah lingkungan dev saya dan sudah terpasang di partisi yang berbedaPertama-tama kita harus menghentikan mysql :
Kami memindahkan file (menjaga izin)
Ini akan menghasilkan direktori
/var/www/mysql/
dengan semua konten.Kami menghapus semua yang ada di direktori lama:
Kami memasang direktori baru dengan
bind
opsi di yang lama.edit
/etc/fstab
dan tambahkan baris ini:Ini akan me-mount
/var/www/mysql
di dir kosong kita/var/lib/mysql
.
bind
Opsi di sini melakukan keajaiban, itu akan diisi/var/lib/mysql
dengan konten/var/www/mysql
jadi untuk mysql dan apparmor itu akan menjadi seperti tidak ada yang berubah.Sekarang kita lakukan mount:
dan mulai kembali mysql.
sumber
Anda sadar jika Anda mengikuti perintah kata demi kata dari jawaban yang diterima itu akan gagal?
cp -R / var / lib / mysql / array2 / mysql
Akan menyalin / var / lib / mysql ke / array2 / mysql / mysql.
Ketika Anda mengatur file konfigurasi Anda, Anda sebaiknya meletakkan di / array2 / mysql / mysql sebagai direktori atau jika tidak mysqld Anda akan gagal untuk memulai.
Perintah salin yang lebih baik adalah:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / pengguna / array2 / mysql
Hanya senilai 2 sen saya.
sumber