Mysql Xuất cấu hình hiện tại vào một tệp


11

Chúng tôi đã mất tập tin my.cnf của chúng tôi và tự hỏi liệu có cách nào để xuất một bản sao từ phiên bản mysql hiện đang chạy hay không.

Cảm ơn!

Câu trả lời:


16

Ba (3) Tùy chọn

TÙY CHỌN 1: Từ trong máy khách mysql

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

Điều này sẽ nắm bắt tất cả các tùy chọn vào tập tin văn bản.

TÙY CHỌN 2: Từ dòng lệnh Linux

ps -ef | grep mysqld | grep -v grep

Điều này sẽ hiển thị các tùy chọn mysqld bắt đầu với như được đặt từ mysqld_safe

TÙY CHỌN 3: Hỏi trực tiếp máy chủ

mysqld --help --verbose

Ở dưới cùng của màn hình 'mysqld --help --verbose', bạn sẽ thấy các cài đặt hiện tại mysqld được tải từ my.cnf hoặc được mặc định.


-1 Xin lỗi, nhưng điều này không có ý nghĩa. Tại sao bạn lại bỏ SHOW VARIABLES vào một tệp văn bản, sau đó lấy danh sách quy trình và không làm gì với kết quả của nó, sau đó nói đọc cờ trợ giúp cho mysqld?
Coops

@Coops - Chúng là ba thứ riêng biệt. Cái đầu tiên chụp VARIABLES trong tệp văn bản. Thứ hai cho phép bạn xem các tùy chọn nào được chỉ định bởi /etc/init.d/mysql khi khởi động mysql. Phần thứ ba cho phép bạn nhìn thấy ở nửa dưới của màn hình mà mysqld hiện đang hoạt động. Tùy thuộc vào samspot để thực hiện công việc thiết lập các tùy chọn đó trong /etc/my.cnf từ các màn hình này. Tôi có nên viết một cái gì đó để tự động hóa và tái tạo /etc/my.cnf không?
RolandoMySQLDBA

Dòng mở đầu của bạn là "thực hiện tất cả những điều sau đây" gợi ý bạn cung cấp hướng dẫn từng bước để đạt được câu trả lời cho câu hỏi. Bạn cũng không giải thích từng bước làm gì, hoặc cách nó trả lời câu hỏi, làm tăng thêm sự nhầm lẫn! :-)
Coops

Xin lỗi vì bất kỳ sự nhầm lẫn gây ra bởi cách tôi viết câu trả lời của tôi ban đầu.
RolandoMySQLDBA

Mặc dù việc tái tạo my.cnf sẽ là trường hợp tốt nhất (tôi đã hy vọng mysql có thể làm điều này), đây thực sự là thông tin tuyệt vời để chúng tôi phục hồi. Tôi đã cố gắng tìm kiếm thông tin này nhưng tất cả những gì tôi có thể tìm thấy là các bài viết về việc sao lưu cơ sở dữ liệu. Cảm ơn!
samspot

3

Các hướng dẫn này dành cho stock mariadb trên centos 7.1.

Dưới đây là cách sao lưu hoặc sao chép các cài đặt hiện tại của máy sang cài đặt mới, hiện tại hoặc tương lai.

Trên máy mà chúng tôi muốn sao chép cài đặt, chúng tôi có thể chạy:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

Trên một máy khác, chúng ta có thể cài đặt mariadb-server và chạy:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

Sau đó, chúng tôi đặt cả hai tệp vào một thư mục, trong ví dụ này là "/ a /".

Sau đó, chúng tôi chạy:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

Nếu không có đầu ra, thì hai tệp giống hệt nhau. Điều đó có nghĩa là tất cả các cài đặt, trên cả hai máy, đều ở mặc định.

Nếu có một số đầu ra, thì một số dòng sẽ không được thụt lề, trong khi một số dòng sẽ được thụt lề.

Các dòng không thụt lề chỉ xuất hiện trong tệp đầu tiên, ở đây là /a/mysql_civerse_sinstall.txt.

Các dòng thụt chỉ hiện diện trong tệp thứ hai, ở đây là /a/mysql_default_sinstall.txt.

Bây giờ chúng tôi biết tất cả các cài đặt, ngoại trừ một số cài đặt được đặt trong dòng lệnh bắt đầu mysqld. Các cài đặt này có thể đến từ các tập tin /etc/my.cnf hoặc /etc/my.cnf.d/* hoặc tập lệnh tùy chỉnh hoặc bí danh, v.v. Trong mọi trường hợp, chúng ta có thể thấy chúng bằng lệnh sau:

ps -ef | grep mysqld

Bây giờ chúng tôi biết rất ít cài đặt mà chúng tôi phải thay đổi trên bản cài đặt mới để định cấu hình cài đặt cũ.


Dưới đây làm theo một số chi tiết khác.

Trên centos 7.1, lệnh sau hiển thị tất cả các cài đặt hiện tại, ngoại trừ một số cài đặt được đặt trong dòng lệnh bắt đầu mysqld:

/usr/libexec/mysqld --help --verbose

Tổng cộng, nó cho thấy:

trong phần đầu tiên, các cài đặt mà chúng ta có thể sử dụng làm tham số đầu tiên sau "mysqld" khi chúng ta khởi động nó;

trong phần thứ hai, các cài đặt được đặt ở thời gian biên dịch;

trong phần thứ ba, các thiết lập hiện tại.

Ngay cả khi dòng cuối cùng của đầu ra nói: để xem giá trị nào mà máy chủ MySQL đang chạy đang sử dụng, hãy nhập:

    mysqladmin variables -uroot -p

lệnh đó không hiển thị, fe, địa chỉ liên kết, ngay cả khi chúng ta thay đổi nó trong /etc/my.cnf và khởi động lại mysql.

Ngoài ra lệnh sau đây cho thấy nhiều cài đặt nhưng không phải là "địa chỉ liên kết":

mysql -uroot -p -e"SHOW VARIABLES;"

Lưu ý rằng, trên centos 7.1, mysqld không có trong $ PATH.


2

Đây là cách yêu thích của tôi để tạo một my.cnf hiện tại:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

Tuy nhiên, điều này không hoạt động đáng tin cậy cho Mac OS X.

Điều này sẽ xuất ra một nhật ký biến sạch, nhận xét, sẵn sàng để nhập vào my.cnf của bạn.

Nguồn gốc: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html


Một số lưu ý: 1. bsdmainutils cần được cài đặt 2. Cảnh báo: nó ghi phiên bản của máy khách mysql, không phải máy chủ
gadelat

Đối với phiên bản máy chủ, lệnh là mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Không chắc nó có vấn đề gì vì tôi nghĩ cả máy khách và máy chủ đều được cài đặt cùng nhau. Mục đích của {{{1và là 1}}}gì?
beppe9000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.