Varsayılan MySQL veri dizinimi başka bir yola değiştirmek mümkün müdür? Veritabanlarına eski konumdan erişebilecek miyim?
Varsayılan MySQL veri dizinimi başka bir yola değiştirmek mümkün müdür? Veritabanlarına eski konumdan erişebilecek miyim?
Yanıtlar:
Aşağıdaki komutu kullanarak MySQL'i durdurun:
sudo /etc/init.d/mysql stop
/var/lib/mysql
Aşağıdaki komutu kullanarak mevcut veri dizinini (varsayılan olarak bulunur ) kopyalayın :
sudo cp -R -p /var/lib/mysql /newpath
MySQL yapılandırma dosyasını aşağıdaki komutla düzenleyin:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Girdisini arayın ve yeni veri dizininin datadir
yolunu (olması gereken /var/lib/mysql
) değiştirin.
Terminalde şu komutu girin:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
İle başlayan satırları arayın /var/lib/mysql
. /var/lib/mysql
Yeni yolla satırlarda değişiklik .
Dosyayı kaydedip kapatın.
AppArmor profillerini şu komutla yeniden başlatın:
sudo /etc/init.d/apparmor reload
MySQL komutunu yeniden başlatın:
sudo /etc/init.d/mysql restart
Şimdi MySQL'e giriş yapın ve daha önce sahip olduğunuz veritabanlarına erişebilirsiniz.
alias /var/lib/mysql/ -> /newpath/,
Hızlı ve kolay:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Düzen /etc/my.cnf
dosyası ve altında [mysqld]
bu satırı ekleyin:
datadir=/new/dir/for/mysql/
CageFS kullanıyorsanız (CloudLinux ile veya CloudLinux olmadan) ve MySQL dizinini değiştirmek istiyorsanız, yeni dizini bu dosyaya eklemeniz GEREKİR:
/etc/cagefs/cagefs.mp
Ve sonra şu komutu çalıştırın:
cagefsctl --remount-all
geçerli verileri yeni dizine kopyalamanız ve my.cnf
MySQL'inizi değiştirmeniz gerekir .
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Sunucu çalışmazken veritabanını kopyalamanız gerekir .
ln -s
statik sembolik bir vaşak kullanırsanız, bunu yapmaz mı?
my.cnf
Önce mysql sunucusunu durdurmalısınız. Örneğin
# /etc/init.d/mysql stop
Bundan sonra eski veri dizinini (örn. / Var / lib / mysql) dahil etmelisiniz. üzerinden yeni dizininize ayrıcalıklar
# cp -R -p /var/lib/mysql /new/data/dir
şimdi /etc/mysql/my.cnf
yeni verilerde değişiklik yapabilir ve sunucuyu yeniden başlatabilirsiniz
# /etc/init.d/mysql restart
Benim gibi debian iseniz ve mysql dir evinize veya / home / ... bir yol taşımak istiyorsanız, çözüm:
Bir gün mariadb belgelerinde benim için çözüm bulmak için. Umarım bu yardımcı olur!
Makinemde bir veritabanı tutmak istedim, ancak harici sabit diskimde bir veri var ve ikisini kullanma arasında geçiş yapmak istedim.
Mac kullanıyorsanız ve Homebrew kullanarak MySQL yüklediyseniz, bunun sizin için çalışması gerekir. Aksi takdirde, datadir
makinenizdeki MySQL için uygun yerleri değiştirmeniz yeterlidir .
#cd to my data dir location
cd /usr/local/var/
#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/
#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
Daha sonra geri dönmek istediğinizde şunları yapın:
mv mysql mysql.remote
mv mysql.local mysql
ve yerel veritabanınızı tekrar kullanıyorsunuz. Umarım yardımcı olur.
İlk durak mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Ardından /etc/mysql/my.cnf
Start mysqld'inizdeki datadir'i değiştirin
Notlar:
# 1: muhtemelen SELinux ayarlarınızı yapmanız gerekir (sorun durumunda SELinux devre dışı bırakıldığında deneyin), Apparmor (Ubuntu) da sorun olabilir.
# 2: bkz. MySQL DB Kurulumunu Kurma
İlk önce MySQL'inizi durdurun
sudo service mysql stop
mysql verilerini yeni konuma kopyalayın.
sudo cp -rp /var/lib/mysql /yourdirectory/
apparmor kullanıyorsanız, aşağıdaki dosyayı düzenleyin ve aşağıdakileri yapın
sudo vim /etc/apparmor.d/usr.sbin.mysqld
/ Var / lib / by / yourdirectory dizininin yerini değiştirin / sonra dosyaya yoksa follwoing öğesini ekleyin
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Dosyayı komutla kaydedin
:wq
My.cnf dosyasını düzenleyin
sudo vim /etc/mysql/my.cnf
Where / var / lib / by / yourdirectory / öğesini değiştirin ve ardından komut ile kaydedin
:wq
sonunda mysql başlat
sudo service mysql start
@ raid0, optimizasyon ici hakkında daha fazla bilgi
Bu çözüm, Workbench kullanarak Windows 7'de çalışır. Bunu yapmak için Yönetici ayrıcalıklarına sahip olmanız gerekir. Verilerinizi gerçekten depolamak istediğiniz yere bir bağlantı (kısayol gibi) oluşturur
Workbench'i açın ve INSTANCE - Başlatma / Kapatma'yı seçin Sunucuyu durdurun
Junction Master'ı https://bitsum.com/junctionmaster.php adresinden yükleyin.
C: \ ProgramData \ MySQL \ MySQL Server 5.6 klasörüne gidin
Veri'ye sağ tıklayın ve "TAŞI ve sonra da LINK klasörü ..." seçeneğini seçin. "Yeni veri dizininiz burada tırnak işaretleri olmadan" uyarı noktasını kabul edin MOVE AND LINK
Şimdi "Yeni veri dizininiz burada tırnak işaretleri olmadan" bölümüne gidin
Verilere sağ tıklayın Güvenlik sekmesine gidin Düzenle'ye tıklayın Ekle Ekle AĞ HİZMETİ'ne tıklayın ve Adları Kontrol Et'e tıklayın Tamam'a Tam Denetimine İzin Ver onay kutusuna tıklayın ve ardından Tamam'a tıklayın
Workbench'e geri dönün ve sunucuyu başlatın
Bu yöntem benim için Windows 7 Enterprise'da MySQL Workbench 6.2 kullanarak çalıştı.
@ User1341296'nın dediği gibi her şey, artı ...
Değiştirmemeniz daha iyi olur /etc/mysql/my.cnf
Bunun yerine yeni dosya oluşturmak istersiniz /etc/mysql/conf.d/ext.cnf
(herhangi bir ad, ancak uzantı olmalıdır cnf
)
Ve değişikliğinizi içine koyun:
[mysqld]
datadir=/vagrant/mq/mysql
Böylece
Windows kullanıcısıysanız ve tüm yanıtların Linux Kullanıcıları için olduğunu öğrenmek üzere buraya geldiyseniz hayal kırıklığına uğramayın! Benim yaptığım gibi zaman kaybetmene izin vermeyeceğim.
Çözümden önce biraz saçmalık konuşması:
MySQL, oluşturduğunuz farklı veritabanlarının verilerini depolamak için bir Veri dizini kullanır. Sonunda, Veritabanları sınıflarında öğrendiğiniz Veritabanı vaatlerinin sağlam olmasını sağlamak için bunları uygulama ve dosya biçiminde bazı eklenmiş jugglery ile dosyalar şeklinde saklamak zorundadır.
Şimdi, gelecekte oluşturabileceğiniz büyük veritabanlarını depolamak için yeterli alan olduğundan emin olmak istersiniz ve böylece düşündünüz ki, Hey! Daha fazla alana sahip başka bir sürücüye koymak istiyorum.
Böylece aşağıdakileri yaparsınız.
Adım - 1 : MySQL hizmetini durdurma.
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for version 8.0, look for the one you've).
Stop it. (Right click, Stop)
Adım - 2 : Geçerli Veri dizinini bulma
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Varsayılan olarak, burada adlı bir klasör olmalıdır Data
, bu MySQL tarafından varsayılan ayarda kullanılan (daha iyi bir yer bulamamışlarsa), ancak bunu kontrol edelim.
bulmak my.ini
Dosya , tam orada olmalı.
Bir düzenleyicide açın (Notepad ++ belki).
datadir
Dosyada bulmak için bir CTRL + F yapın .
Burada belirtilenler, MySQL tarafından veri dizini için kullanılmakta olan gerçek konumdur. Değiştirmek istediğiniz budur.
Adım - 3 : Yeni bir veri dizini ile değiştirilmesi.
Yeni veri dizininizin W: __ MySQL_Data olmasını istediğinizi varsayalım. Diyelim değişim
datadir
değeri my.ini
bu değere dosyasına. Hatırlamak zorunda kalmamak için önceki değeri açık tutun.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Şimdi xcopy
varsayılanı kopyalamak için datadir
düğmelerini kullanın W:\
. Komut istemini başlat (Pencere + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
Ve kopyalanan klasörü datadir
değiştirdiğiniz yeni değere yeniden adlandırın . Buraya:W:/__MySQL_Data
Neden sadece kopyalamıyorsunuz? Çünkü bu SOĞUK değil! Bu, kopyalanan klasördeki izinleri kaybetmenize yardımcı olmaz, böylece yeniden başlattığınızda MySQL80
aptalca bir hata vermez: "Yerel Bilgisayardaki MySQL80 hizmeti başlatıldı ve sonra durdu. Bazı hizmetler otomatik olarak durursa başka hizmetler veya programlar tarafından kullanılmıyor. " - Nezaket: Microsoft
Adım - 4 : Hizmeti yeniden başlatma
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Adım - 5 : Bitti! Şimdi işine dön !!
Makineleri yükseltirken, kutudan kutuya hareket ederken sık sık bunu yapmam gerekir. / Var / lib / mysql dosyasını daha iyi bir konuma taşımanın yanı sıra, genellikle eski DB tablolarını eski bir MySQL kurulumundan geri yüklemem gerekir. Bunu yapmak için...
/home
Başka bir fiziksel diskten eşlendiği için MySQL'i dizine taşımak zorunda kaldık . Canlılaştırmayı kolaylaştırmak için, my.cnf dosyasındaki dizini değiştirmek yerine, yeni dizini /home/mysql
orijinal dizinin yerine eşledik /var/lib/mysql
. Bizim için bir cazibe gibi çalışır (CentOS 7.1'de test edilmiştir).
Yeni dizini oluşturun ve doğru izinleri ayarlayın.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Çalışıyorsa MySQL'i durdurun.
systemctl stop mysql
Veri dizinini taşıyın.
mv -f /var/lib/mysql/* /home/mysql
Kalıcı bir bağ oluşturun ve yürütün.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Sunucuyu yeniden başlatın.
systemctl start mysql
Bunu programlı olarak yapmak istiyorsanız (gedit ile manuel metin girişi yok), yukarıdaki user1341296'nın cevabına dayanan bir Dockerfile sürümü:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm && \
rm -rf /var/lib/mysql && \
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
/etc/init.d/mysql restart
Docker hub'ında şu adreste bulabilirsiniz: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
İlk olarak, yapılandırma dosyanızın nerede olduğunu bilmelisiniz. yapılandırma dosyanız nerede?
Apt-get veya yum kurulumu ile yüklediyseniz。
yapılandırma dosyası
/etc/mysql/my.cnf
veri dosyası görünebilir
/ Var / lib / mysql
ve yapmanız gereken şey
ve sonra işler yapıldı.
Ancak apt veya yum ile yüklemediyseniz, direcotry böyle olmayabilir ve mysql dosyalarını bulabilirsiniz
burası mysql
SuSE 13.1 altında, mysql veri dizinini başka bir yere taşımak için iyi çalışır, örneğin / home / example_user / ve daha bilgilendirici bir ad vermek için:
/ Var / lib / dizininde:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
MySQL'i yeniden başlattım:
# systemctl restart mysql.service
ama bunun bile gerekli olmadığından şüpheleniyor.
Ortamlardan biri için mysql veri dizinini yeni bir konuma değiştirdim, ancak mysql sunucusunun yeniden başlatılması sırasında zaman alıyordu. Bu yüzden portu kontrol ettim ve diğer sürecin mysql portunu dinlediğini buldum. Bu yüzden süreci öldürdüm ve mysql sunucusunu yeniden başlattım ve iyi çalıştı.
Mükemmel çalışan veri dizinini değiştirmek için aşağıdaki adımları izledim. Linux'ta mysql veri dizinini değiştirme
Yukarıdaki adımlar temel ve temeldir. Onları takip ettim ve hala "mysql başlatılamadı" hatası aldım.
Yeni klasörün mysql verilerini depolaması için, klasörün izinlerine ve mysql: mysql sahipliğine sahip olduğundan emin olmanız gerekir.
Bunun yanı sıra, / data / mysql / dizinine sahipseniz, mysql dosyasının üst dizininin izinlerini ve sahipliğini de kontrol etmesi gerekir. Burada / data / dizini root: root olmalıdır. / Mysql üst dizinin sahipliğini değiştirdikten sonra "mysql başlatılamadı" hatasını düzeltti. VM'imdeki işletim sistemi RHEL 7.6.
Ayrıca, datadir'e bağlanmak da mümkündür. En azından macOS, dev ortamında.
(homebrew) örn.
# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory] /usr/local/var/mysql
MySQL'i yeniden başlatın.
SE linux kullanıyorsanız, / etc / selinux / config dosyasını düzenleyerek ve SELINUX = zorlama SELINUX = izin verici olarak değiştirerek izin verilen moda ayarlayın
datadir
mülkiyet