Có thể thay đổi thư mục dữ liệu MySQL mặc định của tôi sang một đường dẫn khác không? Tôi có thể truy cập cơ sở dữ liệu từ vị trí cũ không?
Có thể thay đổi thư mục dữ liệu MySQL mặc định của tôi sang một đường dẫn khác không? Tôi có thể truy cập cơ sở dữ liệu từ vị trí cũ không?
Câu trả lời:
Dừng MySQL bằng lệnh sau:
sudo /etc/init.d/mysql stop
Sao chép thư mục dữ liệu hiện có (mặc định nằm trong /var/lib/mysql
) bằng lệnh sau:
sudo cp -R -p /var/lib/mysql /newpath
chỉnh sửa tập tin cấu hình MySQL bằng lệnh sau:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Tìm kiếm mục nhập datadir
và thay đổi đường dẫn (cần phải /var/lib/mysql
) sang thư mục dữ liệu mới.
Trong terminal, nhập lệnh:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Tìm kiếm các dòng bắt đầu với /var/lib/mysql
. Thay đổi /var/lib/mysql
trong các dòng với đường dẫn mới.
Lưu và đóng tập tin.
Khởi động lại hồ sơ AppArmor bằng lệnh:
sudo /etc/init.d/apparmor reload
Khởi động lại MySQL bằng lệnh:
sudo /etc/init.d/mysql restart
Bây giờ hãy đăng nhập vào MySQL và bạn có thể truy cập cùng cơ sở dữ liệu bạn đã có trước đây.
alias /var/lib/mysql/ -> /newpath/,
Nhanh chóng và dễ dàng để làm:
# 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/
Chỉnh sửa /etc/my.cnf
tệp và dưới [mysqld]
dòng này:
datadir=/new/dir/for/mysql/
Nếu bạn đang sử dụng CageFS (có hoặc không có CloudLinux) và muốn thay đổi thư mục MySQL, bạn PHẢI thêm thư mục mới vào tệp này:
/etc/cagefs/cagefs.mp
Và sau đó chạy lệnh này:
cagefsctl --remount-all
bạn sẽ phải sao chép dữ liệu hiện tại vào thư mục mới và thay đổi my.cnf
MySQL của bạn.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Bạn phải sao chép cơ sở dữ liệu khi máy chủ không chạy .
ln -s
lynx tượng trưng tĩnh sẽ không làm cho nó?
my.cnf
Trước tiên, bạn nên dừng máy chủ mysql. ví dụ
# /etc/init.d/mysql stop
Sau đó, bạn nên sao chép thư mục dữ liệu cũ (vd / var / lib / mysql). đặc quyền cho thư mục mới của bạn thông qua
# cp -R -p /var/lib/mysql /new/data/dir
bây giờ bạn có thể thay đổi /etc/mysql/my.cnf
dữ liệu mới và khởi động lại máy chủ
# /etc/init.d/mysql restart
Nếu giống như tôi, bạn đang ở trên debian và bạn muốn di chuyển thư mục mysql đến nhà của bạn hoặc một đường dẫn trên / home / ..., thì giải pháp là:
Một ngày để tìm giải pháp cho tôi trên tài liệu mariadb. Hy vọng điều này sẽ giúp một số kẻ!
Tôi muốn giữ một cơ sở dữ liệu trên máy của mình, nhưng cũng có dữ liệu trên ổ cứng ngoài và chuyển đổi giữa việc sử dụng hai.
Nếu bạn đang dùng Mac và cài đặt MySQL bằng Homebrew, thì nó sẽ phù hợp với bạn. Nếu không, bạn sẽ chỉ cần thay thế các vị trí thích hợp cho MySQL datadir
trên máy của bạn.
#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
Sau đó, khi bạn muốn chuyển trở lại chỉ cần làm:
mv mysql mysql.remote
mv mysql.local mysql
và bạn đang sử dụng cơ sở dữ liệu địa phương của bạn một lần nữa. Mong rằng sẽ giúp.
Điểm dừng đầu tiên của mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Sau đó thay đổi datadir trong của bạn /etc/mysql/my.cnf
Bắt đầu mysqld
Ghi chú:
# 1: có lẽ bạn phải điều chỉnh cài đặt SELinux của mình (dùng thử với Selinux bị vô hiệu hóa trong trường hợp gặp sự cố), Apparmor (Ubuntu) cũng có thể gặp sự cố.
# 2: xem Tài liệu tham khảo DB cài đặt MySQL
Trước tiên hãy dừng mysql của bạn
sudo service mysql stop
sao chép dữ liệu mysql vào vị trí mới.
sudo cp -rp /var/lib/mysql /yourdirectory/
nếu bạn sử dụng apparmor, hãy chỉnh sửa tệp sau và thực hiện như sau
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Thay thế where / var / lib / by / yourdirectory / sau đó thêm follwaging nếu không tồn tại vào tệp
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Lưu tệp bằng lệnh
:wq
Chỉnh sửa tập tin my.cnf
sudo vim /etc/mysql/my.cnf
Thay thế vị trí / var / lib / by / yourdirectory / sau đó lưu lại bằng lệnh
:wq
cuối cùng bắt đầu mysql
sudo service mysql start
@ xem thêm về raid0, tối ưu hóa ici
Giải pháp này hoạt động trong Windows 7 bằng Workbench. Bạn sẽ cần đặc quyền của Quản trị viên để làm điều này. Nó tạo ra một điểm nối (như lối tắt) đến bất cứ nơi nào bạn thực sự muốn lưu trữ dữ liệu của mình
Mở Workbench và chọn INSTANCE - Khởi động / Tắt máy dừng máy chủ
Cài đặt Junction Master từ https://bitsum.com/jeftmaster.php
Điều hướng đến C: \ ProgramData \ MySQL \ MySQL Server 5.6
Nhấp chuột phải vào Dữ liệu và chọn "DI CHUYỂN và sau đó thư mục LINK đến ..." Chấp nhận đích cảnh báo Điểm đến "Thư mục dữ liệu mới của bạn ở đây mà không có dấu ngoặc kép" Nhấp vào DI CHUYỂN VÀ LINK
Bây giờ đi đến "Thư mục dữ liệu mới của bạn ở đây mà không có dấu ngoặc kép"
Nhấp chuột phải vào Dữ liệu Chuyển đến tab bảo mật Nhấp vào Chỉnh sửa Nhấp vào Thêm Loại dịch vụ MẠNG sau đó Kiểm tra tên Nhấp vào OK Nhấp vào hộp kiểm Cho phép kiểm soát hoàn toàn và sau đó OK
Quay trở lại Workbench và khởi động máy chủ
Phương pháp này hiệu quả với tôi khi sử dụng MySQL Workbench 6.2 trên Windows 7 Enterprise.
Mọi thứ như @ user1341296 đã nói, cộng với ...
Tốt hơn hết là bạn không nên thay đổi /etc/mysql/my.cnf
Thay vào đó, bạn muốn tạo tệp mới /etc/mysql/conf.d/ext.cnf
(bất kỳ tên nào, nhưng nên mở rộng cnf
)
Và đưa vào đó sự thay đổi của bạn:
[mysqld]
datadir=/vagrant/mq/mysql
Theo cách này
Tôi thường cần phải làm điều này khi nâng cấp máy, chuyển từ hộp này sang hộp khác. Ngoài việc di chuyển / var / lib / mysql đến một vị trí tốt hơn, tôi thường cần khôi phục các bảng DB cũ từ bản cài đặt MySQL cũ. Để làm điều này ...
Chúng tôi phải chuyển MySQL vào /home
thư mục vì nó được ánh xạ từ một đĩa vật lý khác. Để làm cho đơn giản hơn, thay vì thay đổi thư mục trong my.cnf, chúng tôi đã ánh xạ thư mục mới /home/mysql
vào vị trí của thư mục gốc /var/lib/mysql
. Nó hoạt động đối với chúng tôi như một bùa mê (được thử nghiệm trên CentOS 7.1).
Tạo thư mục mới và đặt quyền chính xác.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Dừng MySQL nếu chạy.
systemctl stop mysql
Di chuyển các dữ liệu dir.
mv -f /var/lib/mysql/* /home/mysql
Tạo một mount vĩnh viễn và thực hiện nó.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Khởi động lại máy chủ.
systemctl start mysql
Nếu bạn muốn thực hiện việc này theo chương trình (không nhập văn bản thủ công bằng gedit) thì đây là phiên bản dành cho Dockerfile dựa trên câu trả lời của người dùng1341296 ở trên:
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
Có sẵn trên trung tâm Docker tại đây: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Trong trường hợp bạn là người dùng Windows và đã đến đây để tìm hiểu rằng tất cả các câu trả lời đều dành cho Người dùng Linux, đừng thất vọng! Tôi sẽ không để bạn lãng phí thời gian như cách tôi đã làm.
Một chút nói nhảm nhí trước giải pháp:
MySQL sử dụng một thư mục Dữ liệu để lưu trữ dữ liệu của các cơ sở dữ liệu khác nhau mà bạn tạo. Chà, cuối cùng, nó phải lưu trữ chúng dưới dạng các tệp có thêm một số trò tung hứng trong ứng dụng và định dạng tệp để đảm bảo Cơ sở dữ liệu hứa hẹn rằng bạn đã học trong các lớp Cơ sở dữ liệu còn nguyên vẹn.
Bây giờ bạn muốn đảm bảo có đủ không gian để lưu trữ cơ sở dữ liệu lớn mà bạn có thể tạo trong tương lai, và vì vậy bạn nghĩ, Hey! Tôi muốn đặt nó vào một ổ đĩa khác có nhiều không gian hơn.
Vì vậy, bạn làm như sau.
Bước - 1 : Dừng dịch vụ MySQL.
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)
Bước - 2 : Tìm ra thư mục Dữ liệu hiện tại
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Theo mặc định, cần có một thư mục ở đây được đặt tên Data
, đây là thư mục được sử dụng bởi MySQL trong cài đặt mặc định (miễn là họ không tìm thấy vị trí khác tốt hơn), nhưng hãy kiểm tra xem.
Tìm my.ini
tập tin, nên ở ngay đó.
Mở nó trong một trình soạn thảo (Notepad ++ có thể).
Thực hiện CTRL + F để tìm hiểu datadir
trong tệp.
Bất cứ điều gì được đề cập ở đây là vị trí thực tế hiện đang được MySQL sử dụng cho thư mục dữ liệu. Đây là những gì bạn muốn thay đổi.
Bước - 3 : Thay thế nó bằng một thư mục dữ liệu mới.
Giả sử bạn muốn thư mục dữ liệu mới của mình là W: __ MySQL_Data. Hãy thay đổi
datadir
giá trị trong my.ini
tệp thành giá trị này. Giữ giá trị trước đó được nhận xét để bạn sẽ không phải nhớ nó.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Bây giờ sử dụng xcopy
để sao chép mặc định datadir
sang W:\
. Khởi chạy dấu nhắc lệnh (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
Và đổi tên thư mục đã sao chép thành datadir
giá trị mới mà bạn đã thay đổi. Đây:W:/__MySQL_Data
Tại sao không chỉ đơn giản là sao chép? Chà vì đó không phải là COOL!, Điều này giúp bạn không bị mất quyền trên thư mục đã sao chép, do đó khi bạn khởi động lại MySQL80
, nó sẽ không gây ra lỗi ngu ngốc: "Dịch vụ MySQL80 trên Máy tính cục bộ đã khởi động và sau đó dừng lại. chúng không được sử dụng bởi các dịch vụ hoặc chương trình khác. " - Lịch sự: Microsoft
Bước - 4 : Khởi động lại dịch vụ
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Bước - 5 : Xong! Bây giờ trở lại làm việc !!
Trước tiên, bạn nên biết tập tin cấu hình của bạn ở đâu? tập tin cấu hình của bạn ở đâu?
NẾU bạn đã cài đặt với apt-get hoặc yum install
tập tin cấu hình có thể xuất hiện trong
/etc/mysql/my.cnf
datafile có thể xuất hiện trong
/ var / lib / mysql
và những gì bạn nên làm là
và sau đó công việc được thực hiện.
Nhưng nếu bạn không cài đặt nó bằng apt hoặc yum, direcotry có thể không thích điều này và bạn có thể tìm thấy các tệp mysql với
mysis ở đâu
Trong SuSE 13.1, điều này hoạt động tốt để di chuyển thư mục dữ liệu mysql sang nơi khác, ví dụ: / home / example_user / và để đặt cho nó một tên nhiều thông tin hơn:
Trong / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Tôi đã khởi động lại mysql:
# systemctl restart mysql.service
nhưng nghi ngờ rằng thậm chí điều đó là không cần thiết.
Đối với một trong những môi trường tôi đã thay đổi thư mục dữ liệu mysql sang vị trí mới nhưng trong quá trình khởi động lại máy chủ mysql, nó đã mất thời gian. Vì vậy, tôi đã kiểm tra cổng và thấy rằng quá trình khác đang lắng nghe trên cổng mysql. Vì vậy, tôi đã giết quá trình và khởi động lại máy chủ mysql và nó hoạt động tốt.
Tôi đã làm theo các bước dưới đây để thay đổi thư mục dữ liệu hoạt động tuyệt vời. thay đổi thư mục dữ liệu mysql trong Linux
Các bước trên là nền tảng và cơ bản. Tôi đã theo dõi họ và vẫn gặp lỗi "mysql không khởi động được".
Đối với thư mục mới để lưu trữ dữ liệu mysql, bạn cần đảm bảo rằng thư mục đó có quyền và quyền sở hữu mysql: mysql.
Bên cạnh đó, nó cần kiểm tra các quyền và quyền sở hữu thư mục mẹ của mysql nếu có, nói, / data / mysql /. Ở đây / data / thư mục nên là root: root. Tôi đã sửa lỗi "mysql fail to start" sau khi thay đổi quyền sở hữu thư mục mẹ của / mysql. Hệ điều hành trong VM của tôi là RHEL 7.6.
Cũng có thể liên kết symadir. Ít nhất là trong macOS, môi trường dev.
(homebrew), vd
# 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
Khởi động lại mysql.
Nếu bạn đang sử dụng SE linux, hãy đặt nó ở chế độ cho phép bằng cách chỉnh sửa / etc / selinux / config và thay đổi SELINUX = bắt buộc thành SELINUX = permissive
datadir
tài sản